diff --git a/abel-sdk-v2 b/abel-sdk-v2 new file mode 120000 index 0000000..a65e7f1 --- /dev/null +++ b/abel-sdk-v2 @@ -0,0 +1 @@ +projects/abel-sdk-v2 \ No newline at end of file diff --git a/contract b/contract new file mode 120000 index 0000000..dcfacbf --- /dev/null +++ b/contract @@ -0,0 +1 @@ +projects/asset_labeling-contracts/smart_contracts/asset_labeling \ No newline at end of file diff --git a/projects/abel-sdk-v2/.gitignore b/projects/abel-sdk-v2/.gitignore new file mode 100644 index 0000000..d2a0cb3 --- /dev/null +++ b/projects/abel-sdk-v2/.gitignore @@ -0,0 +1 @@ +.npmrc diff --git a/projects/abel-sdk-v2/README.md b/projects/abel-sdk-v2/README.md new file mode 100644 index 0000000..33145d7 --- /dev/null +++ b/projects/abel-sdk-v2/README.md @@ -0,0 +1 @@ +# Abel SDK for js-algorand-sdk v2 diff --git a/projects/abel-sdk-v2/artifacts/AssetLabeling.arc32.json b/projects/abel-sdk-v2/artifacts/AssetLabeling.arc32.json new file mode 100644 index 0000000..757d99a --- /dev/null +++ b/projects/abel-sdk-v2/artifacts/AssetLabeling.arc32.json @@ -0,0 +1,698 @@ +{ + "hints": { + "change_admin(account)void": { + "call_config": { + "no_op": "CALL" + } + }, + "add_label(string,string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "remove_label(string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "get_label(string)(string,uint64,uint64)": { + "read_only": true, + "call_config": { + "no_op": "CALL" + }, + "structs": { + "output": { + "name": "LabelDescriptor", + "elements": [ + [ + "name", + "string" + ], + [ + "num_assets", + "uint64" + ], + [ + "num_operators", + "uint64" + ] + ] + } + } + }, + "log_labels(string[])void": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "add_operator_to_label(account,string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "remove_operator_from_label(account,string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "get_operator_labels(account)string[]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "add_label_to_asset(string,asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "remove_label_from_asset(string,asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "get_asset_labels(asset)string[]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "get_assets_labels(uint64[])string[][]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "get_asset_micro(uint64)(string,uint8)": { + "read_only": true, + "call_config": { + "no_op": "CALL" + }, + "structs": { + "output": { + "name": "AssetMicro", + "elements": [ + [ + "unit_name", + "string" + ], + [ + "decimals", + "uint8" + ] + ] + } + } + }, + "get_assets_micro(uint64[])void": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "get_asset_micro_labels(uint64)(string,uint8,string[])": { + "read_only": true, + "call_config": { + "no_op": "CALL" + }, + "structs": { + "output": { + "name": "AssetMicroLabels", + "elements": [ + [ + "unit_name", + "string" + ], + [ + "decimals", + "uint8" + ], + [ + "labels", + "string[]" + ] + ] + } + } + }, + "get_assets_micro_labels(uint64[])void": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "get_asset_text(uint64)(string,string,string,string[])": { + "read_only": true, + "call_config": { + "no_op": "CALL" + }, + "structs": { + "output": { + "name": "AssetText", + "elements": [ + [ + "name", + "string" + ], + [ + "unit_name", + "string" + ], + [ + "url", + "string" + ], + [ + "labels", + "string[]" + ] + ] + } + } + }, + "get_assets_text(uint64[])void": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "get_asset_text_labels(uint64)(string,string,string)": { + "read_only": true, + "call_config": { + "no_op": "CALL" + }, + "structs": { + "output": { + "name": "AssetTextLabels", + "elements": [ + [ + "name", + "string" + ], + [ + "unit_name", + "string" + ], + [ + "url", + "string" + ] + ] + } + } + }, + "get_assets_text_labels(uint64[])void": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])": { + "read_only": true, + "call_config": { + "no_op": "CALL" + }, + "structs": { + "output": { + "name": "AssetSmall", + "elements": [ + [ + "name", + "string" + ], + [ + "unit_name", + "string" + ], + [ + "decimals", + "uint8" + ], + [ + "total", + "uint64" + ], + [ + "has_freeze", + "bool" + ], + [ + "has_clawback", + "bool" + ], + [ + "labels", + "string[]" + ] + ] + } + } + }, + "get_assets_small(uint64[])void": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])": { + "read_only": true, + "call_config": { + "no_op": "CALL" + }, + "structs": { + "output": { + "name": "AssetFull", + "elements": [ + [ + "name", + "string" + ], + [ + "unit_name", + "string" + ], + [ + "url", + "string" + ], + [ + "total", + "uint64" + ], + [ + "decimals", + "uint8" + ], + [ + "manager", + "address" + ], + [ + "freeze", + "address" + ], + [ + "clawback", + "address" + ], + [ + "reserve", + "address" + ], + [ + "metadata_hash", + "byte[]" + ], + [ + "reserve_balance", + "uint64" + ], + [ + "labels", + "string[]" + ] + ] + } + } + }, + "get_assets_full(uint64[])void": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA4IDQyOTQ5NjcyOTUgNDI5NDk2NzI5NgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJFUlI6Tk9FWElTVCIgMHgwMDAwICIiICJhZG1pbiIgIkVSUjpFWElTVFMiIDB4MDAwMiAiRVJSOlVOQVVUSCIgMHgwMDAwMDAwMDAwMDAwMDAwICJFUlI6Tk9FTVBUWSIgMHgwMDAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTcKICAgIC8vIHNlbGYuYWRtaW4gPSBUeG4uc2VuZGVyCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDI5CiAgICBwdXNoYnl0ZXNzIDB4OGYwZDdkOGUgMHg3YzFiMzJmNiAweDE3ZTY5MWFlIDB4MzNkMGZmZGMgMHg3MjU2MTZlNyAweGZhYzFjZjFiIDB4YjRjNTBiOWYgMHhhMmRkMjI0NyAweGEzN2RlYTExIDB4NjhmMThlZmEgMHhjMmVkNzQzZiAweGE2N2YwM2MyIDB4YWFlZTBjNjEgMHhiNmMzOWY2OCAweDYzNWJlMzYyIDB4NzA5M2IxMGQgMHhlMWJiOTVmYyAweDU1NDBiODBhIDB4OGE0MTJmOTMgMHg2ZjE3Y2RkNSAweDdhNGNlNGI5IDB4MzY2YzUxYWYgMHhkNWQzYmFkMyAweDAzYmE5OGRiIC8vIG1ldGhvZCAiY2hhbmdlX2FkbWluKGFjY291bnQpdm9pZCIsIG1ldGhvZCAiYWRkX2xhYmVsKHN0cmluZyxzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmVtb3ZlX2xhYmVsKHN0cmluZyl2b2lkIiwgbWV0aG9kICJnZXRfbGFiZWwoc3RyaW5nKShzdHJpbmcsdWludDY0LHVpbnQ2NCkiLCBtZXRob2QgImxvZ19sYWJlbHMoc3RyaW5nW10pdm9pZCIsIG1ldGhvZCAiYWRkX29wZXJhdG9yX3RvX2xhYmVsKGFjY291bnQsc3RyaW5nKXZvaWQiLCBtZXRob2QgInJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsKGFjY291bnQsc3RyaW5nKXZvaWQiLCBtZXRob2QgImdldF9vcGVyYXRvcl9sYWJlbHMoYWNjb3VudClzdHJpbmdbXSIsIG1ldGhvZCAiYWRkX2xhYmVsX3RvX2Fzc2V0KHN0cmluZyxhc3NldCl2b2lkIiwgbWV0aG9kICJyZW1vdmVfbGFiZWxfZnJvbV9hc3NldChzdHJpbmcsYXNzZXQpdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2xhYmVscyhhc3NldClzdHJpbmdbXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19sYWJlbHModWludDY0W10pc3RyaW5nW11bXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0X21pY3JvKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4KSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNybyh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfbWljcm9fbGFiZWxzKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4LHN0cmluZ1tdKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNyb19sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3RleHQodWludDY0KShzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmdbXSkiLCBtZXRob2QgImdldF9hc3NldHNfdGV4dCh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfdGV4dF9sYWJlbHModWludDY0KShzdHJpbmcsc3RyaW5nLHN0cmluZykiLCBtZXRob2QgImdldF9hc3NldHNfdGV4dF9sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3NtYWxsKHVpbnQ2NCkoc3RyaW5nLHN0cmluZyx1aW50OCx1aW50NjQsYm9vbCxib29sLHN0cmluZ1tdKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19zbWFsbCh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfZnVsbCh1aW50NjQpKHN0cmluZyxzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50OCxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLGJ5dGVbXSx1aW50NjQsc3RyaW5nW10pIiwgbWV0aG9kICJnZXRfYXNzZXRzX2Z1bGwodWludDY0W10pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY2hhbmdlX2FkbWluX3JvdXRlQDUgbWFpbl9hZGRfbGFiZWxfcm91dGVANiBtYWluX3JlbW92ZV9sYWJlbF9yb3V0ZUA3IG1haW5fZ2V0X2xhYmVsX3JvdXRlQDggbWFpbl9sb2dfbGFiZWxzX3JvdXRlQDkgbWFpbl9hZGRfb3BlcmF0b3JfdG9fbGFiZWxfcm91dGVAMTAgbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMSBtYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTIgbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTMgbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxNCBtYWluX2dldF9hc3NldF9sYWJlbHNfcm91dGVAMTUgbWFpbl9nZXRfYXNzZXRzX2xhYmVsc19yb3V0ZUAxNiBtYWluX2dldF9hc3NldF9taWNyb19yb3V0ZUAxNyBtYWluX2dldF9hc3NldHNfbWljcm9fcm91dGVAMTggbWFpbl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3JvdXRlQDE5IG1haW5fZ2V0X2Fzc2V0c19taWNyb19sYWJlbHNfcm91dGVAMjAgbWFpbl9nZXRfYXNzZXRfdGV4dF9yb3V0ZUAyMSBtYWluX2dldF9hc3NldHNfdGV4dF9yb3V0ZUAyMiBtYWluX2dldF9hc3NldF90ZXh0X2xhYmVsc19yb3V0ZUAyMyBtYWluX2dldF9hc3NldHNfdGV4dF9sYWJlbHNfcm91dGVAMjQgbWFpbl9nZXRfYXNzZXRfc21hbGxfcm91dGVAMjUgbWFpbl9nZXRfYXNzZXRzX3NtYWxsX3JvdXRlQDI2IG1haW5fZ2V0X2Fzc2V0X2Z1bGxfcm91dGVAMjcgbWFpbl9nZXRfYXNzZXRzX2Z1bGxfcm91dGVAMjgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAzMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRzX2Z1bGxfcm91dGVAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRzX2Z1bGwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2Z1bGxfcm91dGVAMjc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDM3CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfZnVsbAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRzX3NtYWxsX3JvdXRlQDI2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwNgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDYKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19zbWFsbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfc21hbGxfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwMgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfc21hbGwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19yb3V0ZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGV4dF9sYWJlbHMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X3RleHRfbGFiZWxzX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM3OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X3RleHRfbGFiZWxzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfdGV4dF9yb3V0ZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzYyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGV4dAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfdGV4dF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF90ZXh0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfbWljcm9fbGFiZWxzX3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19taWNyb19sYWJlbHMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVsc19yb3V0ZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMzcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM3CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF9taWNyb19sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c19taWNyb19yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzIxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfbWljcm8KICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX3JvdXRlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMTcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X21pY3JvCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfbGFiZWxzX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTAKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2xhYmVsc19yb3V0ZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsX3RvX2Fzc2V0CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZF9vcGVyYXRvcl90b19sYWJlbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sb2dfbGFiZWxzX3JvdXRlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTAzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBsb2dfbGFiZWxzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9sYWJlbF9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfbGFiZWwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlX2xhYmVsX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkX2xhYmVsX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NoYW5nZV9hZG1pbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2FkbWluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AyOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc3dpdGNoIG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMzIgbWFpbl9hZnRlcl9pZl9lbHNlQDMzIG1haW5fYWZ0ZXJfaWZfZWxzZUAzMyBtYWluX2FmdGVyX2lmX2Vsc2VAMzMgbWFpbl91cGRhdGVAMzAgbWFpbl9kZWxldGVAMzEKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDMzCgptYWluX2RlbGV0ZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2NwogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiRGVsZXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3VwZGF0ZUAzMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiVXBkYXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDMyOgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA1OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18zIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMSAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LmIyc3RyKGI6IGJ5dGVzKSAtPiBieXRlczoKYjJzdHI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTAtNTEKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYjJzdHIoYjogQnl0ZXMpIC0+IGFyYzQuU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTIKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZyhTdHJpbmcuZnJvbV9ieXRlcyhiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2NQogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjY5CiAgICAvLyBzZWxmLmFkbWluX29ubHkoKQogICAgY2FsbHN1YiBhZG1pbl9vbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZG1pbl9vbmx5KCkgLT4gdm9pZDoKYWRtaW5fb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDQgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRtaW5fb25seV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgYnl0ZWMgNyAvLyAiRVJSOlVOQVVUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZG1pbl9vbmx5X2FmdGVyX2lmX2Vsc2VAMzoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmNoYW5nZV9hZG1pbihuZXdfYWRtaW46IGJ5dGVzKSAtPiB2b2lkOgpjaGFuZ2VfYWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzUtNzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGNoYW5nZV9hZG1pbihzZWxmLCBuZXdfYWRtaW46IEFjY291bnQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3NwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBzZWxmLmFkbWluID0gbmV3X2FkbWluCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkZF9sYWJlbChpZDogYnl0ZXMsIG5hbWU6IGJ5dGVzKSAtPiB2b2lkOgphZGRfbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODAtODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbChzZWxmLCBpZDogU3RyaW5nLCBuYW1lOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MgogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBlbnN1cmUoaWQgbm90IGluIHNlbGYubGFiZWxzLCBTKCJFUlI6RVhJU1RTIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJ6IGFkZF9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MwogICAgLy8gZW5zdXJlKGlkIG5vdCBpbiBzZWxmLmxhYmVscywgUygiRVJSOkVYSVNUUyIpKQogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIHB1c2hieXRlcyAiRVJSOkxFTkdUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBhcmM0LlN0cmluZyhuYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4NS04OQogICAgLy8gc2VsZi5sYWJlbHNbaWRdID0gTGFiZWxEZXNjcmlwdG9yKAogICAgLy8gICAgIGFyYzQuU3RyaW5nKG5hbWUpLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4MDAxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbChpZDogYnl0ZXMpIC0+IHZvaWQ6CnJlbW92ZV9sYWJlbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MS05MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsKHNlbGYsIGlkOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBlbnN1cmUoaWQgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTQKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTUKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX2Fzc2V0cyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDggLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBlbnN1cmUoc2VsZi5sYWJlbHNbaWRdLm51bV9hc3NldHMgPT0gMCwgUygiRVJSOk5PRU1QVFkiKSkKICAgIGJ5dGVjIDkgLy8gIkVSUjpOT0VNUFRZIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTYKICAgIC8vIGRlbCBzZWxmLmxhYmVsc1tpZF0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfbGFiZWwoaWQ6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4LTk5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2xhYmVsKHNlbGYsIGlkOiBTdHJpbmcpIC0+IExhYmVsRGVzY3JpcHRvcjoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMSAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDEKICAgIC8vIHJldHVybiBzZWxmLmxhYmVsc1tpZF0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcubG9nX2xhYmVscyhpZHM6IGJ5dGVzKSAtPiB2b2lkOgpsb2dfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMy0xMDQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBsb2dfbGFiZWxzKHNlbGYsIGlkczogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA1CiAgICAvLyBmb3IgX2lkeCwgbGFiZWxfaWQgaW4gdWVudW1lcmF0ZShpZHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpsb2dfbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDUKICAgIC8vIGZvciBfaWR4LCBsYWJlbF9pZCBpbiB1ZW51bWVyYXRlKGlkcyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGxvZ19sYWJlbHNfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDYKICAgIC8vIGxvZyhzZWxmLmxhYmVsc1tsYWJlbF9pZC5uYXRpdmVdKQogICAgZXh0cmFjdCAyIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBsb2dfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKbG9nX2xhYmVsc19hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkbWluX29yX29wZXJhdG9yX29ubHkobGFiZWw6IGJ5dGVzKSAtPiB2b2lkOgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjExMi0xMTMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYWRtaW5fb3Jfb3BlcmF0b3Jfb25seShzZWxmLCBsYWJlbDogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTE0CiAgICAvLyBpZiBUeG4uc2VuZGVyID09IHNlbGYuYWRtaW46CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWRtaW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRtaW4gZXhpc3RzCiAgICA9PQogICAgYnogYWRtaW5fb3Jfb3BlcmF0b3Jfb25seV9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTUKICAgIC8vIHJldHVybgogICAgcmV0c3ViCgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTYKICAgIC8vIHNlbGYub3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBvcGVyYXRvcl9vbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5vcGVyYXRvcl9vbmx5KGxhYmVsOiBieXRlcykgLT4gdm9pZDoKb3BlcmF0b3Jfb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTgtMTE5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIG9wZXJhdG9yX29ubHkoc2VsZiwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gb3BlcmF0b3JfaW5kZXggPSBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChUeG4uc2VuZGVyLCBsYWJlbCkKICAgIHR4biBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyMgogICAgLy8gb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjItMTIzCiAgICAvLyBvcGVyYXRvcl9pbmRleCAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSkKICAgIC8vIGFuZCBvcGVyYXRvcl9pbmRleCAhPSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGJ6IG9wZXJhdG9yX29ubHlfYm9vbF9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIzCiAgICAvLyBhbmQgb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBmcmFtZV9kaWcgMAogICAgaW50YyA0IC8vIDQyOTQ5NjcyOTUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIyLTEyMwogICAgLy8gb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICAvLyBhbmQgb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBieiBvcGVyYXRvcl9vbmx5X2Jvb2xfZmFsc2VAMwogICAgaW50Y18wIC8vIDEKCm9wZXJhdG9yX29ubHlfYm9vbF9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBvcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyNAogICAgLy8gUygiRVJSOlVOQVVUSCIpLAogICAgYnl0ZWMgNyAvLyAiRVJSOlVOQVVUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpvcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VANzoKICAgIHJldHN1YgoKb3BlcmF0b3Jfb25seV9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzEgLy8gMAogICAgYiBvcGVyYXRvcl9vbmx5X2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdWludDY0OgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI3LTEyOAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gaWYgb3BlcmF0b3Igbm90IGluIHNlbGYub3BlcmF0b3JzOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMwCiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMxCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9mb3JfaGVhZGVyQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMxCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzIKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCA9PSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMzCiAgICAvLyByZXR1cm4gaWR4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDY6CiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfZm9yX2hlYWRlckAzCgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM0CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkZF9vcGVyYXRvcl90b19sYWJlbChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdm9pZDoKYWRkX29wZXJhdG9yX3RvX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNi0xMzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9vcGVyYXRvcl90b19sYWJlbChzZWxmLCBvcGVyYXRvcjogQWNjb3VudCwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gc2VsZi5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGFkbWluX29yX29wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzkKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM5CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18xIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDAtMTQxCiAgICAvLyAjIGNoZWNrIGlmIG9wZXJhdG9yIGV4aXN0cyBhbHJlYWR5CiAgICAvLyBpZiBvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfb3BlcmF0b3JfdG9fbGFiZWxfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDQKICAgIC8vIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gPT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NC0xNDUKICAgIC8vIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIC8vID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0OS0xNTAKICAgIC8vICMgYWRkIGxhYmVsIHRvIG9wZXJhdG9yCiAgICAvLyBleGlzdGluZyA9IHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gZXhpc3RpbmcuYXBwZW5kKGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTIKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IGV4aXN0aW5nLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAoKYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTctMTU4CiAgICAvLyAjIGluY3JlbWVudCBsYWJlbCBvcGVyYXRvcnMKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IgPSBzZWxmLmxhYmVsc1tsYWJlbF0uY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjAKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgKyBVSW50NjQoMSkKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTU5LTE2MQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjIKICAgIC8vIHNlbGYubGFiZWxzW2xhYmVsXSA9IGxhYmVsX2Rlc2NyaXB0b3IuY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCmFkZF9vcGVyYXRvcl90b19sYWJlbF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTQtMTU1CiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICBiIGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdm9pZDoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY0LTE2NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWwoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXBuIDQKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gc2VsZi5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGFkbWluX29yX29wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjgKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjgKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY5CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY5CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18xIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3MS0xNzIKICAgIC8vICMgZW5zdXJlIGxhYmVsIGV4aXN0cyBpbiBvcGVyYXRvcgogICAgLy8gbGFiZWxfaWR4ID0gc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgob3BlcmF0b3IsIGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NQogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzQtMTc2CiAgICAvLyBsYWJlbF9pZHggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc1LTE3NgogICAgLy8gYW5kIGxhYmVsX2lkeAogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9LRVkpLCAgIyBrZXkgY2hlY2sgcmVkdW5kYW50LCBjaGVja2VkIGFib3ZlCiAgICBmcmFtZV9kaWcgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9LRVkpLCAgIyBrZXkgY2hlY2sgcmVkdW5kYW50LCBjaGVja2VkIGFib3ZlCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NS0xNzYKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzQtMTc2CiAgICAvLyBsYWJlbF9pZHggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzCiAgICBpbnRjXzAgLy8gMQoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc3CiAgICAvLyBTKCJFUlI6Tk9FWElTVCIpLAogICAgYnl0ZWNfMSAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODAtMTgxCiAgICAvLyAjIGVuc3VyZSBvbmx5IGVtcHR5IGxhYmVscyBjYW4gYmUgbGVmdCBvcGVyYXRvci1sZXNzCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID4gMSBvciBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPT0gMCwKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGI+CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDggLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VANwoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF90cnVlQDY6CiAgICBpbnRjXzAgLy8gMQoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg0CiAgICAvLyBTKCJFUlI6Tk9FTVBUWSIpLAogICAgYnl0ZWMgOSAvLyAiRVJSOk5PRU1QVFkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODgKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgLSBVSW50NjQoMSkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4Ni0xODkKICAgIC8vICMgZGVjciBvcGVyYXRvciBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzLm5hdGl2ZSAtIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTAKICAgIC8vIHNlbGYubGFiZWxzW2xhYmVsXSA9IGxhYmVsX2Rlc2NyaXB0b3IuY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTkyCiAgICAvLyBpZiBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0ubGVuZ3RoID09IDE6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBieiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9lbHNlX2JvZHlAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTMKICAgIC8vIGRlbCBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0KICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Vsc2VfYm9keUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTUKICAgIC8vIG5leHRfbGlzdCA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTk2LTE5OQogICAgLy8gIyB3YWxrLCBwdXNoIGV2ZXJ5dGhpbmcgZXhjZXB0IGluZGV4CiAgICAvLyAjIHRoaXMgaW1wbGVtZW50YXRpb24gd2Fsa3MgdHdpY2UgKG9uY2UgaW4gZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KQogICAgLy8gIyBjb3VsZCBiZSBtb3JlIGVmZmljaWVudAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdKToKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSA1CiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA2CgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9mb3JfaGVhZGVyQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5Ni0xOTkKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIGV4Y2VwdCBpbmRleAogICAgLy8gIyB0aGlzIGltcGxlbWVudGF0aW9uIHdhbGtzIHR3aWNlIChvbmNlIGluIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleCkKICAgIC8vICMgY291bGQgYmUgbW9yZSBlZmZpY2llbnQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSk6CiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDUKICAgIDwKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2ZvckAxNgogICAgZnJhbWVfZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBmcmFtZV9idXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDAKICAgIC8vIGlmIGxhYmVsX2lkeCAhPSBpZHg6CiAgICBmcmFtZV9kaWcgNwogICAgIT0KICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDMKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDEKICAgIC8vIG5leHRfbGlzdC5hcHBlbmQoc3RvcmVkX2xhYmVsKQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyA0CiAgICBpbnRjXzAgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICBmcmFtZV9idXJ5IDMKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTQ6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNgogICAgYiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9mb3JfaGVhZGVyQDExCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9mb3JAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjAzCiAgICAvLyBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0gPSBuZXh0X2xpc3QuY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgMgogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX2ZhbHNlQDc6CiAgICBpbnRjXzEgLy8gMAogICAgYiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX21lcmdlQDgKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMSAvLyAwCiAgICBiIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9vcGVyYXRvcl9sYWJlbHMob3BlcmF0b3I6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X29wZXJhdG9yX2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X29wZXJhdG9yX2xhYmVscyhzZWxmLCBvcGVyYXRvcjogQWNjb3VudCkgLT4gTGFiZWxMaXN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA3CiAgICAvLyBpZiBvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwOAogICAgLy8gcmV0dXJuIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbHNfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA5LTIxMAogICAgLy8gIyByZXR1cm4gZW1wdHkgbGlzdAogICAgLy8gcmV0dXJuIGVtcHR5X2xpc3QoKQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRkX2xhYmVsX3RvX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYWRkX2xhYmVsX3RvX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMS0yMjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbF90b19hc3NldChzZWxmLCBsYWJlbDogU3RyaW5nLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjMKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyNQogICAgLy8gc2VsZi5vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIG9wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjcKICAgIC8vIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfbGFiZWxfdG9fYXNzZXRfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTQKICAgIC8vIGlmIGFzc2V0IG5vdCBpbiBzZWxmLmFzc2V0czoKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE1CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMQogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzQtMjM1CiAgICAvLyAjIGFkZCBsYWJlbCB0byBvcGVyYXRvcgogICAgLy8gZXhpc3RpbmcgPSBzZWxmLmFzc2V0c1thc3NldF0uY29weSgpCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjM2CiAgICAvLyBleGlzdGluZy5hcHBlbmQoYXJjNC5TdHJpbmcobGFiZWwpKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzNwogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gZXhpc3RpbmcuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0Mi0yNDMKICAgIC8vICMgaW5jciBhc3NldCBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ0LTI0NgogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NwogICAgLy8gc2VsZi5sYWJlbHNbbGFiZWxdID0gbGFiZWxfZGVzY3JpcHRvci5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTYKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgphZGRfbGFiZWxfdG9fYXNzZXRfZm9yX2hlYWRlckA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2ZvckAxMQogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxNwogICAgLy8gaWYgc3RvcmVkX2xhYmVsID09IGxhYmVsOgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IGFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDEwCiAgICBmcmFtZV9kaWcgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyAzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGFkZF9sYWJlbF90b19hc3NldF9mb3JfaGVhZGVyQDcKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9mb3JAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE5CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMwCiAgICAvLyBzZWxmLmdldF9hc3NldF9sYWJlbF9pbmRleChhc3NldCwgbGFiZWwpID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgYiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfbGFiZWxfaW5kZXhAMTIKCmFkZF9sYWJlbF90b19hc3NldF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzktMjQwCiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYuYXNzZXRzW2Fzc2V0XSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ5LTI1MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQoc2VsZiwgbGFiZWw6IFN0cmluZywgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18zIC8vICIiCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjUzCiAgICAvLyBzZWxmLm9wZXJhdG9yX29ubHkobGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgb3BlcmF0b3Jfb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NQogICAgLy8gZm91bmQgPSBGYWxzZQogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gaWYgc2VsZi5hc3NldHNbYXNzZXRdLmxlbmd0aCA9PSAxOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjU3CiAgICAvLyBpZiBzZWxmLmFzc2V0c1thc3NldF1bMF0gPT0gbGFiZWw6CiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBhc3NlcnQgLy8gSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTgKICAgIC8vIGRlbCBzZWxmLmFzc2V0c1thc3NldF0KICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTkKICAgIC8vIGZvdW5kID0gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIGZyYW1lX2J1cnkgNQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBmcmFtZV9kaWcgNQogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzQKICAgIC8vIGVuc3VyZShmb3VuZCwgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc2LTI3NwogICAgLy8gIyBkZWNyIGFzc2V0IGNvdW50CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc5CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzgtMjgwCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgxCiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjEKICAgIC8vIGZvdW5kID0gRmFsc2UKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMwoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjYzCiAgICAvLyBuZXh0X2xpc3QgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2NC0yNjYKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIHRvIG5ldyBib3ggZXhjZXB0IGxhYmVsCiAgICAvLyAjIHNhdmUgJGZvdW5kIHRvIHRocm93IGlmIG5vdCBmb3VuZAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDQKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDYKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Zvcl9oZWFkZXJANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjQtMjY2CiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyB0byBuZXcgYm94IGV4Y2VwdCBsYWJlbAogICAgLy8gIyBzYXZlICRmb3VuZCB0byB0aHJvdyBpZiBub3QgZm91bmQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDQKICAgIDwKICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2ZvckAxMgogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjcKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCAhPSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgICE9CiAgICBieiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2OAogICAgLy8gbmV4dF9saXN0LmFwcGVuZChzdG9yZWRfbGFiZWwpCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIGZyYW1lX2J1cnkgMQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyA2CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSA2CiAgICBiIHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Zvcl9oZWFkZXJANgoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcwCiAgICAvLyBmb3VuZCA9IFRydWUKICAgIGludGNfMCAvLyAxCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMAoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfZm9yQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gbmV4dF9saXN0LmNvcHkoKQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgMQogICAgYm94X3B1dAogICAgYiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVscyhhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMtMjg0CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X2xhYmVscyhzZWxmLCBhc3NldDogQXNzZXQpIC0+IExhYmVsTGlzdDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NQogICAgLy8gaWYgYXNzZXQgaW4gc2VsZi5hc3NldHM6CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRfYXNzZXRfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gcmV0dXJuIHNlbGYuYXNzZXRzW2Fzc2V0XQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIHN3YXAKICAgIHJldHN1YgoKZ2V0X2Fzc2V0X2xhYmVsc19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDcKICAgIC8vIHJldHVybiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODctMjg4CiAgICAvLyAjIHJldHVybiBlbXB0eQogICAgLy8gcmV0dXJuIGVtcHR5X2xpc3QoKQogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c19sYWJlbHMoYXNzZXRzOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hc3NldHNfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5MC0yOTMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX2xhYmVscygKICAgIC8vICAgICBzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XQogICAgLy8gKSAtPiBhcmM0LkR5bmFtaWNBcnJheVtMYWJlbExpc3RdOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5NAogICAgLy8gb3V0ID0gYXJjNC5EeW5hbWljQXJyYXlbTGFiZWxMaXN0XSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5NQogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTUKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX2xhYmVsc19hZnRlcl9mb3JANwogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk2CiAgICAvLyBhc3NldCA9IEFzc2V0KGFzc2V0X2lkLm5hdGl2ZSkKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk3CiAgICAvLyBpZiBhc3NldCBpbiBzZWxmLmFzc2V0czoKICAgIGl0b2IKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGdldF9hc3NldHNfbGFiZWxzX2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk4CiAgICAvLyBvdXQuYXBwZW5kKHNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkpCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgYnl0ZWMgNiAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGZyYW1lX2J1cnkgMQoKZ2V0X2Fzc2V0c19sYWJlbHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDMKICAgIGIgZ2V0X2Fzc2V0c19sYWJlbHNfZm9yX2hlYWRlckAxCgpnZXRfYXNzZXRzX2xhYmVsc19lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMDAKICAgIC8vIG91dC5hcHBlbmQoZW1wdHlfbGlzdCgpKQogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDEKICAgIHB1c2hieXRlcyAweDAwMDIwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfbGFiZWxzX2FmdGVyX2lmX2Vsc2VANQoKZ2V0X2Fzc2V0c19sYWJlbHNfYWZ0ZXJfZm9yQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzAxCiAgICAvLyByZXR1cm4gb3V0CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X21pY3JvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMwOS0zMTAKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgX2dldF9hc3NldF9taWNybyhzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldE1pY3JvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzEzCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE0CiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzEyLTMxNQogICAgLy8gcmV0dXJuIEFzc2V0TWljcm8oCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X21pY3JvKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfbWljcm86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE3LTMxOAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9taWNybyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldE1pY3JvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE5CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfbWljcm8KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfbWljcm8oYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c19taWNybzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjEtMzIyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c19taWNybyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbWljcm9fZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI0CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X21pY3JvCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19taWNyb19mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhhc3NldF9pZDogdWludDY0KSAtPiBieXRlczoKX2dldF9hc3NldF9taWNyb19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI4LTMyOQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldE1pY3JvTGFiZWxzOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzMyCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzMzCiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM0CiAgICAvLyBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IF9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKCl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMzEtMzM1CiAgICAvLyByZXR1cm4gQXNzZXRNaWNyb0xhYmVscygKICAgIC8vICAgICB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIC8vICAgICBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA1IC8vIDUKICAgICsKICAgIHB1c2hieXRlcyAweDAwMDUKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKX2dldF9hc3NldF9taWNyb19sYWJlbHNfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9taWNyb19sYWJlbHMoYXNzZXQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9hc3NldF9taWNyb19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM3LTMzOAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9taWNyb19sYWJlbHMoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRNaWNyb0xhYmVsczoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMzOQogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9taWNyb19sYWJlbHMoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF9taWNyb19sYWJlbHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfbWljcm9fbGFiZWxzKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfbWljcm9fbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MS0zNDIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX21pY3JvX2xhYmVscyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbWljcm9fbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDMKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX21pY3JvX2xhYmVsc19hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDQKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVscwogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfbWljcm9fbGFiZWxzX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c19taWNyb19sYWJlbHNfYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDgtMzQ5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIF9nZXRfYXNzZXRfdGV4dChzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldFRleHQ6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTIKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzUzCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU0CiAgICAvLyB1cmw9YjJzdHIoYXNzZXQudXJsKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVSTAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM1NQogICAgLy8gbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBfZ2V0X2Fzc2V0X3RleHRfdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwoKX2dldF9hc3NldF90ZXh0X3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTEtMzU2CiAgICAvLyByZXR1cm4gQXNzZXRUZXh0KAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICAvLyAgICAgbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBwdXNoYnl0ZXMgMHgwMDA4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3RleHRfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfdGV4dF90ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfdGV4dChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3RleHQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU4LTM1OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0KHNlbGYsIGFzc2V0OiBVSW50NjQpIC0+IEFzc2V0VGV4dDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM2MAogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF90ZXh0KGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0KGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjItMzYzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c190ZXh0KHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjQKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3RleHRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY1CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfdGV4dF9mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfdGV4dF9hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY5LTM3MAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0VGV4dExhYmVsczoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM3MwogICAgLy8gbmFtZT1iMnN0cihhc3NldC5uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzQKICAgIC8vIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzUKICAgIC8vIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzcyLTM3NgogICAgLy8gcmV0dXJuIEFzc2V0VGV4dExhYmVscygKICAgIC8vICAgICBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgLy8gKQogICAgZGlnIDIKICAgIGxlbgogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweDAwMDYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzc4LTM3OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0X2xhYmVscyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldFRleHRMYWJlbHM6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODAKICAgIC8vIHJldHVybiBzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF90ZXh0X2xhYmVscwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0X2xhYmVscyhhc3NldHM6IGJ5dGVzKSAtPiB2b2lkOgpnZXRfYXNzZXRzX3RleHRfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4Mi0zODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODUKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dF9sYWJlbHMKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfc21hbGwoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg5LTM5MAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3NtYWxsKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0U21hbGw6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTMKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk0CiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk1CiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk2CiAgICAvLyB0b3RhbD1hcmM0LlVJbnQ2NChhc3NldC50b3RhbCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM5NwogICAgLy8gaGFzX2ZyZWV6ZT1hcmM0LkJvb2woYXNzZXQuZnJlZXplICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RnJlZXplCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk4CiAgICAvLyBoYXNfY2xhd2JhY2s9YXJjNC5Cb29sKGFzc2V0LmNsYXdiYWNrICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q2xhd2JhY2sKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTkKICAgIC8vIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogX2dldF9hc3NldF9zbWFsbF90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyA2CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTItNDAwCiAgICAvLyByZXR1cm4gQXNzZXRTbWFsbCgKICAgIC8vICAgICBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIHRvdGFsPWFyYzQuVUludDY0KGFzc2V0LnRvdGFsKSwKICAgIC8vICAgICBoYXNfZnJlZXplPWFyYzQuQm9vbChhc3NldC5mcmVlemUgIT0gR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgaGFzX2NsYXdiYWNrPWFyYzQuQm9vbChhc3NldC5jbGF3YmFjayAhPSBHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDAxMAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDUKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHB1c2hpbnQgMTA1IC8vIDEwNQogICAgc3dhcAogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NwogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgYiBfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9zbWFsbChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3NtYWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwMi00MDMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRfc21hbGwoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRTbWFsbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwNAogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X3NtYWxsCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX3NtYWxsKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDA2LTQwNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldHNfc21hbGwoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDgKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpnZXRfYXNzZXRzX3NtYWxsX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDgKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwOQogICAgLy8gbG9nKHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9zbWFsbAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfc21hbGxfZm9yX2hlYWRlckAxCgpnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuX2dldF9hc3NldF9mdWxsKGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X2Z1bGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEzLTQxNAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X2Z1bGwoc2VsZiwgYXNzZXRfaWQ6IFVJbnQ2NCkgLT4gQXNzZXRGdWxsOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxNgogICAgLy8gcmVzZXJ2ZV9hY2N0ID0gQWNjb3VudChhc3NldC5yZXNlcnZlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTkKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTgtNDIwCiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIC8vIGVsc2UgVUludDY0KDApCiAgICBieiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDE4CiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIGZyYW1lX2RpZyAxMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKCl9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIzCiAgICAvLyBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDI0CiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjUKICAgIC8vIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjYKICAgIC8vIHRvdGFsPWFyYzQuVUludDY0KGFzc2V0LnRvdGFsKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBmcmFtZV9idXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjcKICAgIC8vIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzMgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyOAogICAgLy8gbWFuYWdlcj1hcmM0LkFkZHJlc3MoYXNzZXQubWFuYWdlciksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNYW5hZ2VyCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDkKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjkKICAgIC8vIGZyZWV6ZT1hcmM0LkFkZHJlc3MoYXNzZXQuZnJlZXplKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldEZyZWV6ZQogICAgc3dhcAogICAgZnJhbWVfYnVyeSAxMAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMAogICAgLy8gY2xhd2JhY2s9YXJjNC5BZGRyZXNzKGFzc2V0LmNsYXdiYWNrKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENsYXdiYWNrCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDExCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMxCiAgICAvLyByZXNlcnZlPWFyYzQuQWRkcmVzcyhhc3NldC5yZXNlcnZlKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFJlc2VydmUKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgOAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMwogICAgLy8gbWV0YWRhdGFfaGFzaD1hcmM0LkR5bmFtaWNCeXRlcyhhc3NldC5tZXRhZGF0YV9oYXNoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE1ldGFkYXRhSGFzaAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMgogICAgLy8gcmVzZXJ2ZV9iYWxhbmNlPWFyYzQuVUludDY0KHJlc2VydmVfYmFsYW5jZSksCiAgICBpdG9iCiAgICBmcmFtZV9idXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzQKICAgIC8vIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA1CiAgICBmcmFtZV9kaWcgNAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwoKX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfbWVyZ2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjItNDM1CiAgICAvLyByZXR1cm4gQXNzZXRGdWxsKAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICAvLyAgICAgdG90YWw9YXJjNC5VSW50NjQoYXNzZXQudG90YWwpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIG1hbmFnZXI9YXJjNC5BZGRyZXNzKGFzc2V0Lm1hbmFnZXIpLAogICAgLy8gICAgIGZyZWV6ZT1hcmM0LkFkZHJlc3MoYXNzZXQuZnJlZXplKSwKICAgIC8vICAgICBjbGF3YmFjaz1hcmM0LkFkZHJlc3MoYXNzZXQuY2xhd2JhY2spLAogICAgLy8gICAgIHJlc2VydmU9YXJjNC5BZGRyZXNzKGFzc2V0LnJlc2VydmUpLAogICAgLy8gICAgIHJlc2VydmVfYmFsYW5jZT1hcmM0LlVJbnQ2NChyZXNlcnZlX2JhbGFuY2UpLAogICAgLy8gICAgIG1ldGFkYXRhX2hhc2g9YXJjNC5EeW5hbWljQnl0ZXMoYXNzZXQubWV0YWRhdGFfaGFzaCksCiAgICAvLyAgICAgbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMTU1IC8vIDE1NQogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDA5YgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICBmcmFtZV9kaWcgNgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgOQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMTAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDExCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyA4CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDcKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X21lcmdlQDYKCl9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIwCiAgICAvLyBlbHNlIFVJbnQ2NCgwKQogICAgaW50Y18xIC8vIDAKICAgIGIgX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9mdWxsKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfZnVsbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzctNDM4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X2Z1bGwoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRGdWxsOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDM5CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X2Z1bGwoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF9mdWxsCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX2Z1bGwoYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c19mdWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MS00NDIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX2Z1bGwoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDMKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpnZXRfYXNzZXRzX2Z1bGxfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfZnVsbF9hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDQKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfZnVsbChhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9mdWxsCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19mdWxsX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c19mdWxsX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + }, + "state": { + "global": { + "num_byte_slices": 1, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": { + "admin": { + "type": "bytes", + "key": "admin" + } + }, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "AssetLabeling", + "methods": [ + { + "name": "change_admin", + "args": [ + { + "type": "account", + "name": "new_admin" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "add_label", + "args": [ + { + "type": "string", + "name": "id" + }, + { + "type": "string", + "name": "name" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "remove_label", + "args": [ + { + "type": "string", + "name": "id" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "get_label", + "args": [ + { + "type": "string", + "name": "id" + } + ], + "readonly": true, + "returns": { + "type": "(string,uint64,uint64)" + } + }, + { + "name": "log_labels", + "args": [ + { + "type": "string[]", + "name": "ids" + } + ], + "readonly": true, + "returns": { + "type": "void" + } + }, + { + "name": "add_operator_to_label", + "args": [ + { + "type": "account", + "name": "operator" + }, + { + "type": "string", + "name": "label" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "remove_operator_from_label", + "args": [ + { + "type": "account", + "name": "operator" + }, + { + "type": "string", + "name": "label" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "get_operator_labels", + "args": [ + { + "type": "account", + "name": "operator" + } + ], + "readonly": true, + "returns": { + "type": "string[]" + } + }, + { + "name": "add_label_to_asset", + "args": [ + { + "type": "string", + "name": "label" + }, + { + "type": "asset", + "name": "asset" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "remove_label_from_asset", + "args": [ + { + "type": "string", + "name": "label" + }, + { + "type": "asset", + "name": "asset" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "get_asset_labels", + "args": [ + { + "type": "asset", + "name": "asset" + } + ], + "readonly": true, + "returns": { + "type": "string[]" + } + }, + { + "name": "get_assets_labels", + "args": [ + { + "type": "uint64[]", + "name": "assets" + } + ], + "readonly": true, + "returns": { + "type": "string[][]" + } + }, + { + "name": "get_asset_micro", + "args": [ + { + "type": "uint64", + "name": "asset" + } + ], + "readonly": true, + "returns": { + "type": "(string,uint8)" + } + }, + { + "name": "get_assets_micro", + "args": [ + { + "type": "uint64[]", + "name": "assets" + } + ], + "readonly": true, + "returns": { + "type": "void" + } + }, + { + "name": "get_asset_micro_labels", + "args": [ + { + "type": "uint64", + "name": "asset" + } + ], + "readonly": true, + "returns": { + "type": "(string,uint8,string[])" + } + }, + { + "name": "get_assets_micro_labels", + "args": [ + { + "type": "uint64[]", + "name": "assets" + } + ], + "readonly": true, + "returns": { + "type": "void" + } + }, + { + "name": "get_asset_text", + "args": [ + { + "type": "uint64", + "name": "asset" + } + ], + "readonly": true, + "returns": { + "type": "(string,string,string,string[])" + } + }, + { + "name": "get_assets_text", + "args": [ + { + "type": "uint64[]", + "name": "assets" + } + ], + "readonly": true, + "returns": { + "type": "void" + } + }, + { + "name": "get_asset_text_labels", + "args": [ + { + "type": "uint64", + "name": "asset" + } + ], + "readonly": true, + "returns": { + "type": "(string,string,string)" + } + }, + { + "name": "get_assets_text_labels", + "args": [ + { + "type": "uint64[]", + "name": "assets" + } + ], + "readonly": true, + "returns": { + "type": "void" + } + }, + { + "name": "get_asset_small", + "args": [ + { + "type": "uint64", + "name": "asset" + } + ], + "readonly": true, + "returns": { + "type": "(string,string,uint8,uint64,bool,bool,string[])" + } + }, + { + "name": "get_assets_small", + "args": [ + { + "type": "uint64[]", + "name": "assets" + } + ], + "readonly": true, + "returns": { + "type": "void" + } + }, + { + "name": "get_asset_full", + "args": [ + { + "type": "uint64", + "name": "asset" + } + ], + "readonly": true, + "returns": { + "type": "(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])" + } + }, + { + "name": "get_assets_full", + "args": [ + { + "type": "uint64[]", + "name": "assets" + } + ], + "readonly": true, + "returns": { + "type": "void" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "update_application": "CALL", + "delete_application": "CALL", + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/projects/abel-sdk-v2/package-lock.json b/projects/abel-sdk-v2/package-lock.json new file mode 100644 index 0000000..bb07af8 --- /dev/null +++ b/projects/abel-sdk-v2/package-lock.json @@ -0,0 +1,1266 @@ +{ + "name": "abel-sdk-v2", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "abel-sdk-v2", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@algorandfoundation/algokit-client-generator": "^4.0.9", + "@types/node": "^22.13.17", + "buffer": "^6.0.3", + "tsx": "^4.19.3" + }, + "peerDependencies": { + "@algorandfoundation/algokit-utils": "^7.0.2", + "algosdk": "^2.8.0", + "p-map": "^7.0.3" + } + }, + "node_modules/@algorandfoundation/algokit-client-generator": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-client-generator/-/algokit-client-generator-4.0.9.tgz", + "integrity": "sha512-8s11VVO7+dumRctXUUME2aWpEOjEWZJZEPqMJt9ADIMrPMXw/3O0+Sc1fvLqX7vWIp22oqvuFGkGC7HleBvfEQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "change-case": "^5.4.4", + "commander": "^11.1.0", + "jsonschema": "^1.4.1" + }, + "bin": { + "algokit-client-generator": "bin/cli.mjs", + "algokitgen": "bin/cli.mjs" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@algorandfoundation/algokit-utils": "^7.0.1 || ^8.0.1", + "algosdk": "^2.9.0 || ^3.0.0" + } + }, + "node_modules/@algorandfoundation/algokit-utils": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-7.0.2.tgz", + "integrity": "sha512-lNsc7OCWYc9uFzXf055obxPr5oLi7Vcofzuk/XQeFWgvLlFHNhh22lcRoa3aS3bI5Qv9VkJU217bRU/L7N0cDQ==", + "peer": true, + "dependencies": { + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "algosdk": ">=2.9.0 <3.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@types/node": { + "version": "22.13.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.17.tgz", + "integrity": "sha512-nAJuQXoyPj04uLgu+obZcSmsfOenUg6DxPKogeUy6yNCFwWaj5sBF8/G/pNo8EtBJjAfSVgfIlugR/BCOleO+g==", + "dev": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/algo-msgpack-with-bigint": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", + "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/algosdk": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.11.0.tgz", + "integrity": "sha512-MJ9xrjBKqG6ItCAR0Z974DG7nvifXsQxlj7HbWkBat4+h/IygwKPEH/v0dQPOYWdTcf5/5lfu+OyEVOsjxvyRQ==", + "peer": true, + "dependencies": { + "algo-msgpack-with-bigint": "^2.1.1", + "buffer": "^6.0.3", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hi-base32": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==", + "peer": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "peer": true + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "peer": true + }, + "node_modules/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", + "peer": true + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "peer": true, + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsx": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", + "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", + "dev": true, + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "peer": true + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, + "node_modules/vlq": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", + "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", + "peer": true + } + }, + "dependencies": { + "@algorandfoundation/algokit-client-generator": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-client-generator/-/algokit-client-generator-4.0.9.tgz", + "integrity": "sha512-8s11VVO7+dumRctXUUME2aWpEOjEWZJZEPqMJt9ADIMrPMXw/3O0+Sc1fvLqX7vWIp22oqvuFGkGC7HleBvfEQ==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "change-case": "^5.4.4", + "commander": "^11.1.0", + "jsonschema": "^1.4.1" + } + }, + "@algorandfoundation/algokit-utils": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-7.0.2.tgz", + "integrity": "sha512-lNsc7OCWYc9uFzXf055obxPr5oLi7Vcofzuk/XQeFWgvLlFHNhh22lcRoa3aS3bI5Qv9VkJU217bRU/L7N0cDQ==", + "peer": true, + "requires": { + "buffer": "^6.0.3" + } + }, + "@esbuild/aix-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "dev": true, + "optional": true + }, + "@types/node": { + "version": "22.13.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.17.tgz", + "integrity": "sha512-nAJuQXoyPj04uLgu+obZcSmsfOenUg6DxPKogeUy6yNCFwWaj5sBF8/G/pNo8EtBJjAfSVgfIlugR/BCOleO+g==", + "dev": true, + "requires": { + "undici-types": "~6.20.0" + } + }, + "algo-msgpack-with-bigint": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", + "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", + "peer": true + }, + "algosdk": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.11.0.tgz", + "integrity": "sha512-MJ9xrjBKqG6ItCAR0Z974DG7nvifXsQxlj7HbWkBat4+h/IygwKPEH/v0dQPOYWdTcf5/5lfu+OyEVOsjxvyRQ==", + "peer": true, + "requires": { + "algo-msgpack-with-bigint": "^2.1.1", + "buffer": "^6.0.3", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "peer": true + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true + }, + "esbuild": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, + "requires": { + "resolve-pkg-maps": "^1.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hi-base32": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==", + "peer": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "peer": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "peer": true + }, + "js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", + "peer": true + }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "peer": true, + "requires": { + "bignumber.js": "^9.0.0" + } + }, + "jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "dev": true + }, + "p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "peer": true + }, + "resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tsx": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", + "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", + "dev": true, + "requires": { + "esbuild": "~0.25.0", + "fsevents": "~2.3.3", + "get-tsconfig": "^4.7.5" + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "peer": true + }, + "undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, + "vlq": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", + "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", + "peer": true + } + } +} diff --git a/projects/abel-sdk-v2/package.json b/projects/abel-sdk-v2/package.json new file mode 100644 index 0000000..fc65cd8 --- /dev/null +++ b/projects/abel-sdk-v2/package.json @@ -0,0 +1,49 @@ +{ + "name": "abel-sdk", + "version": "0.0.0-a", + "description": "", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "module": "./dist/index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/tasosbit/abel.git", + "directory": "projects/abel-sdk-v2" + }, + "files": [ + "dist", + "src" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./client": { + "types": "./dist/generated/abel-contract-client.d.ts", + "default": "./dist/generated/abel-contract-client.js" + }, + "./arc32.json": "./dist/artifacts/AssetLabeling.arc32.json" + }, + "scripts": { + "clean": "rm -rf dist/ artifacts/ src/generated/", + "prebuild": "npm run clean && scripts/update-artifacts.sh", + "build": "tsc", + "prepublishOnly": "npm run build", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "@algorandfoundation/algokit-client-generator": "^4.0.9", + "@types/node": "^22.13.17", + "buffer": "^6.0.3", + "tsx": "^4.19.3" + }, + "peerDependencies": { + "@algorandfoundation/algokit-utils": "^7.0.2", + "algosdk": "^2.8.0", + "p-map": "^7.0.3" + }, + "type": "module" +} diff --git a/projects/abel-sdk-v2/scripts/update-artifacts.sh b/projects/abel-sdk-v2/scripts/update-artifacts.sh new file mode 100755 index 0000000..3f6faf8 --- /dev/null +++ b/projects/abel-sdk-v2/scripts/update-artifacts.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +set -eo pipefail + +cd "$(realpath "$(dirname "$0")")" + +artifacts_dir=$(realpath ../artifacts) +src_dir=$(realpath ../src) + +cd ../../asset_labeling-contracts + +contract_file=$(realpath smart_contracts/asset_labeling/contract.py) + +set -o xtrace +algokit --no-color compile python "$contract_file" --out-dir="$artifacts_dir" --output-arc32 --no-output-arc56 --no-output-source-map --no-output-teal + +cd - + +npx --yes @algorandfoundation/algokit-client-generator generate -a "$artifacts_dir/AssetLabeling.arc32.json" -o "$src_dir/generated/abel-contract-client.ts" diff --git a/projects/abel-sdk-v2/src/generated/abel-contract-client.ts b/projects/abel-sdk-v2/src/generated/abel-contract-client.ts new file mode 100644 index 0000000..73313ef --- /dev/null +++ b/projects/abel-sdk-v2/src/generated/abel-contract-client.ts @@ -0,0 +1,2869 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^7 + */ +import { AlgorandClientInterface } from '@algorandfoundation/algokit-utils/types/algorand-client-interface' +import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app' +import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56' +import { + AppClient as _AppClient, + AppClientMethodCallParams, + AppClientParams, + AppClientBareCallParams, + CallOnComplete, + AppClientCompilationParams, + ResolveAppClientByCreatorAndName, + ResolveAppClientByNetwork, + CloneAppClientParams, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer' +import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' +import SimulateResponse = modelsv2.SimulateResponse + +export const APP_SPEC: Arc56Contract = {"arcs":[],"name":"AssetLabeling","structs":{"LabelDescriptor":[{"name":"name","type":"string"},{"name":"numAssets","type":"uint64"},{"name":"numOperators","type":"uint64"}],"AssetMicro":[{"name":"unitName","type":"string"},{"name":"decimals","type":"uint8"}],"AssetMicroLabels":[{"name":"unitName","type":"string"},{"name":"decimals","type":"uint8"},{"name":"labels","type":"string[]"}],"AssetText":[{"name":"name","type":"string"},{"name":"unitName","type":"string"},{"name":"url","type":"string"},{"name":"labels","type":"string[]"}],"AssetTextLabels":[{"name":"name","type":"string"},{"name":"unitName","type":"string"},{"name":"url","type":"string"}],"AssetSmall":[{"name":"name","type":"string"},{"name":"unitName","type":"string"},{"name":"decimals","type":"uint8"},{"name":"total","type":"uint64"},{"name":"hasFreeze","type":"bool"},{"name":"hasClawback","type":"bool"},{"name":"labels","type":"string[]"}],"AssetFull":[{"name":"name","type":"string"},{"name":"unitName","type":"string"},{"name":"url","type":"string"},{"name":"total","type":"uint64"},{"name":"decimals","type":"uint8"},{"name":"manager","type":"address"},{"name":"freeze","type":"address"},{"name":"clawback","type":"address"},{"name":"reserve","type":"address"},{"name":"metadataHash","type":"byte[]"},{"name":"reserveBalance","type":"uint64"},{"name":"labels","type":"string[]"}]},"methods":[{"name":"change_admin","args":[{"name":"new_admin","type":"account"}],"returns":{"type":"void"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"add_label","args":[{"name":"id","type":"string"},{"name":"name","type":"string"}],"returns":{"type":"void"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"remove_label","args":[{"name":"id","type":"string"}],"returns":{"type":"void"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"get_label","args":[{"name":"id","type":"string"}],"returns":{"type":"(string,uint64,uint64)","struct":"LabelDescriptor"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"log_labels","args":[{"name":"ids","type":"string[]"}],"returns":{"type":"void"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"add_operator_to_label","args":[{"name":"operator","type":"account"},{"name":"label","type":"string"}],"returns":{"type":"void"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"remove_operator_from_label","args":[{"name":"operator","type":"account"},{"name":"label","type":"string"}],"returns":{"type":"void"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"get_operator_labels","args":[{"name":"operator","type":"account"}],"returns":{"type":"string[]"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"add_label_to_asset","args":[{"name":"label","type":"string"},{"name":"asset","type":"asset"}],"returns":{"type":"void"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"remove_label_from_asset","args":[{"name":"label","type":"string"},{"name":"asset","type":"asset"}],"returns":{"type":"void"},"events":[],"actions":{"create":[],"call":["NoOp"]}},{"name":"get_asset_labels","args":[{"name":"asset","type":"asset"}],"returns":{"type":"string[]"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_assets_labels","args":[{"name":"assets","type":"uint64[]"}],"returns":{"type":"string[][]"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_asset_micro","args":[{"name":"asset","type":"uint64"}],"returns":{"type":"(string,uint8)","struct":"AssetMicro"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_assets_micro","args":[{"name":"assets","type":"uint64[]"}],"returns":{"type":"void"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_asset_micro_labels","args":[{"name":"asset","type":"uint64"}],"returns":{"type":"(string,uint8,string[])","struct":"AssetMicroLabels"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_assets_micro_labels","args":[{"name":"assets","type":"uint64[]"}],"returns":{"type":"void"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_asset_text","args":[{"name":"asset","type":"uint64"}],"returns":{"type":"(string,string,string,string[])","struct":"AssetText"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_assets_text","args":[{"name":"assets","type":"uint64[]"}],"returns":{"type":"void"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_asset_text_labels","args":[{"name":"asset","type":"uint64"}],"returns":{"type":"(string,string,string)","struct":"AssetTextLabels"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_assets_text_labels","args":[{"name":"assets","type":"uint64[]"}],"returns":{"type":"void"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_asset_small","args":[{"name":"asset","type":"uint64"}],"returns":{"type":"(string,string,uint8,uint64,bool,bool,string[])","struct":"AssetSmall"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_assets_small","args":[{"name":"assets","type":"uint64[]"}],"returns":{"type":"void"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_asset_full","args":[{"name":"asset","type":"uint64"}],"returns":{"type":"(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])","struct":"AssetFull"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}},{"name":"get_assets_full","args":[{"name":"assets","type":"uint64[]"}],"returns":{"type":"void"},"events":[],"readonly":true,"actions":{"create":[],"call":["NoOp"]}}],"state":{"schema":{"global":{"ints":0,"bytes":1},"local":{"ints":0,"bytes":0}},"keys":{"global":{"admin":{"key":"YWRtaW4=","keyType":"AVMString","valueType":"AVMBytes"}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA4IDQyOTQ5NjcyOTUgNDI5NDk2NzI5NgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJFUlI6Tk9FWElTVCIgMHgwMDAwICIiICJhZG1pbiIgIkVSUjpFWElTVFMiIDB4MDAwMiAiRVJSOlVOQVVUSCIgMHgwMDAwMDAwMDAwMDAwMDAwICJFUlI6Tk9FTVBUWSIgMHgwMDAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTcKICAgIC8vIHNlbGYuYWRtaW4gPSBUeG4uc2VuZGVyCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDI5CiAgICBwdXNoYnl0ZXNzIDB4OGYwZDdkOGUgMHg3YzFiMzJmNiAweDE3ZTY5MWFlIDB4MzNkMGZmZGMgMHg3MjU2MTZlNyAweGZhYzFjZjFiIDB4YjRjNTBiOWYgMHhhMmRkMjI0NyAweGEzN2RlYTExIDB4NjhmMThlZmEgMHhjMmVkNzQzZiAweGE2N2YwM2MyIDB4YWFlZTBjNjEgMHhiNmMzOWY2OCAweDYzNWJlMzYyIDB4NzA5M2IxMGQgMHhlMWJiOTVmYyAweDU1NDBiODBhIDB4OGE0MTJmOTMgMHg2ZjE3Y2RkNSAweDdhNGNlNGI5IDB4MzY2YzUxYWYgMHhkNWQzYmFkMyAweDAzYmE5OGRiIC8vIG1ldGhvZCAiY2hhbmdlX2FkbWluKGFjY291bnQpdm9pZCIsIG1ldGhvZCAiYWRkX2xhYmVsKHN0cmluZyxzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmVtb3ZlX2xhYmVsKHN0cmluZyl2b2lkIiwgbWV0aG9kICJnZXRfbGFiZWwoc3RyaW5nKShzdHJpbmcsdWludDY0LHVpbnQ2NCkiLCBtZXRob2QgImxvZ19sYWJlbHMoc3RyaW5nW10pdm9pZCIsIG1ldGhvZCAiYWRkX29wZXJhdG9yX3RvX2xhYmVsKGFjY291bnQsc3RyaW5nKXZvaWQiLCBtZXRob2QgInJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsKGFjY291bnQsc3RyaW5nKXZvaWQiLCBtZXRob2QgImdldF9vcGVyYXRvcl9sYWJlbHMoYWNjb3VudClzdHJpbmdbXSIsIG1ldGhvZCAiYWRkX2xhYmVsX3RvX2Fzc2V0KHN0cmluZyxhc3NldCl2b2lkIiwgbWV0aG9kICJyZW1vdmVfbGFiZWxfZnJvbV9hc3NldChzdHJpbmcsYXNzZXQpdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2xhYmVscyhhc3NldClzdHJpbmdbXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19sYWJlbHModWludDY0W10pc3RyaW5nW11bXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0X21pY3JvKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4KSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNybyh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfbWljcm9fbGFiZWxzKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4LHN0cmluZ1tdKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNyb19sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3RleHQodWludDY0KShzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmdbXSkiLCBtZXRob2QgImdldF9hc3NldHNfdGV4dCh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfdGV4dF9sYWJlbHModWludDY0KShzdHJpbmcsc3RyaW5nLHN0cmluZykiLCBtZXRob2QgImdldF9hc3NldHNfdGV4dF9sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3NtYWxsKHVpbnQ2NCkoc3RyaW5nLHN0cmluZyx1aW50OCx1aW50NjQsYm9vbCxib29sLHN0cmluZ1tdKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19zbWFsbCh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfZnVsbCh1aW50NjQpKHN0cmluZyxzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50OCxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLGJ5dGVbXSx1aW50NjQsc3RyaW5nW10pIiwgbWV0aG9kICJnZXRfYXNzZXRzX2Z1bGwodWludDY0W10pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY2hhbmdlX2FkbWluX3JvdXRlQDUgbWFpbl9hZGRfbGFiZWxfcm91dGVANiBtYWluX3JlbW92ZV9sYWJlbF9yb3V0ZUA3IG1haW5fZ2V0X2xhYmVsX3JvdXRlQDggbWFpbl9sb2dfbGFiZWxzX3JvdXRlQDkgbWFpbl9hZGRfb3BlcmF0b3JfdG9fbGFiZWxfcm91dGVAMTAgbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMSBtYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTIgbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTMgbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxNCBtYWluX2dldF9hc3NldF9sYWJlbHNfcm91dGVAMTUgbWFpbl9nZXRfYXNzZXRzX2xhYmVsc19yb3V0ZUAxNiBtYWluX2dldF9hc3NldF9taWNyb19yb3V0ZUAxNyBtYWluX2dldF9hc3NldHNfbWljcm9fcm91dGVAMTggbWFpbl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3JvdXRlQDE5IG1haW5fZ2V0X2Fzc2V0c19taWNyb19sYWJlbHNfcm91dGVAMjAgbWFpbl9nZXRfYXNzZXRfdGV4dF9yb3V0ZUAyMSBtYWluX2dldF9hc3NldHNfdGV4dF9yb3V0ZUAyMiBtYWluX2dldF9hc3NldF90ZXh0X2xhYmVsc19yb3V0ZUAyMyBtYWluX2dldF9hc3NldHNfdGV4dF9sYWJlbHNfcm91dGVAMjQgbWFpbl9nZXRfYXNzZXRfc21hbGxfcm91dGVAMjUgbWFpbl9nZXRfYXNzZXRzX3NtYWxsX3JvdXRlQDI2IG1haW5fZ2V0X2Fzc2V0X2Z1bGxfcm91dGVAMjcgbWFpbl9nZXRfYXNzZXRzX2Z1bGxfcm91dGVAMjgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAzMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRzX2Z1bGxfcm91dGVAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRzX2Z1bGwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2Z1bGxfcm91dGVAMjc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDM3CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfZnVsbAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRzX3NtYWxsX3JvdXRlQDI2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwNgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDYKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19zbWFsbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfc21hbGxfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwMgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfc21hbGwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19yb3V0ZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGV4dF9sYWJlbHMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X3RleHRfbGFiZWxzX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM3OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X3RleHRfbGFiZWxzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfdGV4dF9yb3V0ZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzYyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGV4dAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfdGV4dF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF90ZXh0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfbWljcm9fbGFiZWxzX3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19taWNyb19sYWJlbHMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVsc19yb3V0ZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMzcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM3CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF9taWNyb19sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c19taWNyb19yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzIxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfbWljcm8KICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX3JvdXRlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMTcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X21pY3JvCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfbGFiZWxzX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTAKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2xhYmVsc19yb3V0ZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsX3RvX2Fzc2V0CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZF9vcGVyYXRvcl90b19sYWJlbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sb2dfbGFiZWxzX3JvdXRlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTAzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBsb2dfbGFiZWxzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9sYWJlbF9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfbGFiZWwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlX2xhYmVsX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkX2xhYmVsX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NoYW5nZV9hZG1pbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2FkbWluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AyOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc3dpdGNoIG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMzIgbWFpbl9hZnRlcl9pZl9lbHNlQDMzIG1haW5fYWZ0ZXJfaWZfZWxzZUAzMyBtYWluX2FmdGVyX2lmX2Vsc2VAMzMgbWFpbl91cGRhdGVAMzAgbWFpbl9kZWxldGVAMzEKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDMzCgptYWluX2RlbGV0ZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2NwogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiRGVsZXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3VwZGF0ZUAzMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiVXBkYXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDMyOgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA1OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18zIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMSAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LmIyc3RyKGI6IGJ5dGVzKSAtPiBieXRlczoKYjJzdHI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTAtNTEKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYjJzdHIoYjogQnl0ZXMpIC0+IGFyYzQuU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTIKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZyhTdHJpbmcuZnJvbV9ieXRlcyhiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2NQogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjY5CiAgICAvLyBzZWxmLmFkbWluX29ubHkoKQogICAgY2FsbHN1YiBhZG1pbl9vbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZG1pbl9vbmx5KCkgLT4gdm9pZDoKYWRtaW5fb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDQgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRtaW5fb25seV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgYnl0ZWMgNyAvLyAiRVJSOlVOQVVUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZG1pbl9vbmx5X2FmdGVyX2lmX2Vsc2VAMzoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmNoYW5nZV9hZG1pbihuZXdfYWRtaW46IGJ5dGVzKSAtPiB2b2lkOgpjaGFuZ2VfYWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzUtNzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGNoYW5nZV9hZG1pbihzZWxmLCBuZXdfYWRtaW46IEFjY291bnQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3NwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBzZWxmLmFkbWluID0gbmV3X2FkbWluCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkZF9sYWJlbChpZDogYnl0ZXMsIG5hbWU6IGJ5dGVzKSAtPiB2b2lkOgphZGRfbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODAtODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbChzZWxmLCBpZDogU3RyaW5nLCBuYW1lOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MgogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBlbnN1cmUoaWQgbm90IGluIHNlbGYubGFiZWxzLCBTKCJFUlI6RVhJU1RTIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJ6IGFkZF9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MwogICAgLy8gZW5zdXJlKGlkIG5vdCBpbiBzZWxmLmxhYmVscywgUygiRVJSOkVYSVNUUyIpKQogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIHB1c2hieXRlcyAiRVJSOkxFTkdUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBhcmM0LlN0cmluZyhuYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4NS04OQogICAgLy8gc2VsZi5sYWJlbHNbaWRdID0gTGFiZWxEZXNjcmlwdG9yKAogICAgLy8gICAgIGFyYzQuU3RyaW5nKG5hbWUpLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4MDAxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbChpZDogYnl0ZXMpIC0+IHZvaWQ6CnJlbW92ZV9sYWJlbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MS05MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsKHNlbGYsIGlkOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBlbnN1cmUoaWQgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTQKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTUKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX2Fzc2V0cyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDggLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBlbnN1cmUoc2VsZi5sYWJlbHNbaWRdLm51bV9hc3NldHMgPT0gMCwgUygiRVJSOk5PRU1QVFkiKSkKICAgIGJ5dGVjIDkgLy8gIkVSUjpOT0VNUFRZIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTYKICAgIC8vIGRlbCBzZWxmLmxhYmVsc1tpZF0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfbGFiZWwoaWQ6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4LTk5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2xhYmVsKHNlbGYsIGlkOiBTdHJpbmcpIC0+IExhYmVsRGVzY3JpcHRvcjoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMSAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDEKICAgIC8vIHJldHVybiBzZWxmLmxhYmVsc1tpZF0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcubG9nX2xhYmVscyhpZHM6IGJ5dGVzKSAtPiB2b2lkOgpsb2dfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMy0xMDQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBsb2dfbGFiZWxzKHNlbGYsIGlkczogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA1CiAgICAvLyBmb3IgX2lkeCwgbGFiZWxfaWQgaW4gdWVudW1lcmF0ZShpZHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpsb2dfbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDUKICAgIC8vIGZvciBfaWR4LCBsYWJlbF9pZCBpbiB1ZW51bWVyYXRlKGlkcyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGxvZ19sYWJlbHNfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDYKICAgIC8vIGxvZyhzZWxmLmxhYmVsc1tsYWJlbF9pZC5uYXRpdmVdKQogICAgZXh0cmFjdCAyIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBsb2dfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKbG9nX2xhYmVsc19hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkbWluX29yX29wZXJhdG9yX29ubHkobGFiZWw6IGJ5dGVzKSAtPiB2b2lkOgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjExMi0xMTMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYWRtaW5fb3Jfb3BlcmF0b3Jfb25seShzZWxmLCBsYWJlbDogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTE0CiAgICAvLyBpZiBUeG4uc2VuZGVyID09IHNlbGYuYWRtaW46CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWRtaW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRtaW4gZXhpc3RzCiAgICA9PQogICAgYnogYWRtaW5fb3Jfb3BlcmF0b3Jfb25seV9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTUKICAgIC8vIHJldHVybgogICAgcmV0c3ViCgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTYKICAgIC8vIHNlbGYub3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBvcGVyYXRvcl9vbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5vcGVyYXRvcl9vbmx5KGxhYmVsOiBieXRlcykgLT4gdm9pZDoKb3BlcmF0b3Jfb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTgtMTE5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIG9wZXJhdG9yX29ubHkoc2VsZiwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gb3BlcmF0b3JfaW5kZXggPSBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChUeG4uc2VuZGVyLCBsYWJlbCkKICAgIHR4biBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyMgogICAgLy8gb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjItMTIzCiAgICAvLyBvcGVyYXRvcl9pbmRleCAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSkKICAgIC8vIGFuZCBvcGVyYXRvcl9pbmRleCAhPSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGJ6IG9wZXJhdG9yX29ubHlfYm9vbF9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIzCiAgICAvLyBhbmQgb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBmcmFtZV9kaWcgMAogICAgaW50YyA0IC8vIDQyOTQ5NjcyOTUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIyLTEyMwogICAgLy8gb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICAvLyBhbmQgb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBieiBvcGVyYXRvcl9vbmx5X2Jvb2xfZmFsc2VAMwogICAgaW50Y18wIC8vIDEKCm9wZXJhdG9yX29ubHlfYm9vbF9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBvcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyNAogICAgLy8gUygiRVJSOlVOQVVUSCIpLAogICAgYnl0ZWMgNyAvLyAiRVJSOlVOQVVUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpvcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VANzoKICAgIHJldHN1YgoKb3BlcmF0b3Jfb25seV9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzEgLy8gMAogICAgYiBvcGVyYXRvcl9vbmx5X2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdWludDY0OgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI3LTEyOAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gaWYgb3BlcmF0b3Igbm90IGluIHNlbGYub3BlcmF0b3JzOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMwCiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMxCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9mb3JfaGVhZGVyQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMxCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzIKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCA9PSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMzCiAgICAvLyByZXR1cm4gaWR4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDY6CiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfZm9yX2hlYWRlckAzCgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM0CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkZF9vcGVyYXRvcl90b19sYWJlbChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdm9pZDoKYWRkX29wZXJhdG9yX3RvX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNi0xMzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9vcGVyYXRvcl90b19sYWJlbChzZWxmLCBvcGVyYXRvcjogQWNjb3VudCwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gc2VsZi5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGFkbWluX29yX29wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzkKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM5CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18xIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDAtMTQxCiAgICAvLyAjIGNoZWNrIGlmIG9wZXJhdG9yIGV4aXN0cyBhbHJlYWR5CiAgICAvLyBpZiBvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfb3BlcmF0b3JfdG9fbGFiZWxfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDQKICAgIC8vIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gPT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NC0xNDUKICAgIC8vIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIC8vID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0OS0xNTAKICAgIC8vICMgYWRkIGxhYmVsIHRvIG9wZXJhdG9yCiAgICAvLyBleGlzdGluZyA9IHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gZXhpc3RpbmcuYXBwZW5kKGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTIKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IGV4aXN0aW5nLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAoKYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTctMTU4CiAgICAvLyAjIGluY3JlbWVudCBsYWJlbCBvcGVyYXRvcnMKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IgPSBzZWxmLmxhYmVsc1tsYWJlbF0uY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjAKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgKyBVSW50NjQoMSkKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTU5LTE2MQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjIKICAgIC8vIHNlbGYubGFiZWxzW2xhYmVsXSA9IGxhYmVsX2Rlc2NyaXB0b3IuY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCmFkZF9vcGVyYXRvcl90b19sYWJlbF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTQtMTU1CiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICBiIGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdm9pZDoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY0LTE2NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWwoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXBuIDQKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gc2VsZi5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGFkbWluX29yX29wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjgKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjgKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY5CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY5CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18xIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3MS0xNzIKICAgIC8vICMgZW5zdXJlIGxhYmVsIGV4aXN0cyBpbiBvcGVyYXRvcgogICAgLy8gbGFiZWxfaWR4ID0gc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgob3BlcmF0b3IsIGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NQogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzQtMTc2CiAgICAvLyBsYWJlbF9pZHggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc1LTE3NgogICAgLy8gYW5kIGxhYmVsX2lkeAogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9LRVkpLCAgIyBrZXkgY2hlY2sgcmVkdW5kYW50LCBjaGVja2VkIGFib3ZlCiAgICBmcmFtZV9kaWcgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9LRVkpLCAgIyBrZXkgY2hlY2sgcmVkdW5kYW50LCBjaGVja2VkIGFib3ZlCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NS0xNzYKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzQtMTc2CiAgICAvLyBsYWJlbF9pZHggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzCiAgICBpbnRjXzAgLy8gMQoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc3CiAgICAvLyBTKCJFUlI6Tk9FWElTVCIpLAogICAgYnl0ZWNfMSAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODAtMTgxCiAgICAvLyAjIGVuc3VyZSBvbmx5IGVtcHR5IGxhYmVscyBjYW4gYmUgbGVmdCBvcGVyYXRvci1sZXNzCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID4gMSBvciBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPT0gMCwKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGI+CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDggLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VANwoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF90cnVlQDY6CiAgICBpbnRjXzAgLy8gMQoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg0CiAgICAvLyBTKCJFUlI6Tk9FTVBUWSIpLAogICAgYnl0ZWMgOSAvLyAiRVJSOk5PRU1QVFkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODgKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgLSBVSW50NjQoMSkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4Ni0xODkKICAgIC8vICMgZGVjciBvcGVyYXRvciBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzLm5hdGl2ZSAtIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTAKICAgIC8vIHNlbGYubGFiZWxzW2xhYmVsXSA9IGxhYmVsX2Rlc2NyaXB0b3IuY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTkyCiAgICAvLyBpZiBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0ubGVuZ3RoID09IDE6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBieiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9lbHNlX2JvZHlAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTMKICAgIC8vIGRlbCBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0KICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Vsc2VfYm9keUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTUKICAgIC8vIG5leHRfbGlzdCA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTk2LTE5OQogICAgLy8gIyB3YWxrLCBwdXNoIGV2ZXJ5dGhpbmcgZXhjZXB0IGluZGV4CiAgICAvLyAjIHRoaXMgaW1wbGVtZW50YXRpb24gd2Fsa3MgdHdpY2UgKG9uY2UgaW4gZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KQogICAgLy8gIyBjb3VsZCBiZSBtb3JlIGVmZmljaWVudAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdKToKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSA1CiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA2CgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9mb3JfaGVhZGVyQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5Ni0xOTkKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIGV4Y2VwdCBpbmRleAogICAgLy8gIyB0aGlzIGltcGxlbWVudGF0aW9uIHdhbGtzIHR3aWNlIChvbmNlIGluIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleCkKICAgIC8vICMgY291bGQgYmUgbW9yZSBlZmZpY2llbnQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSk6CiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDUKICAgIDwKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2ZvckAxNgogICAgZnJhbWVfZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBmcmFtZV9idXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDAKICAgIC8vIGlmIGxhYmVsX2lkeCAhPSBpZHg6CiAgICBmcmFtZV9kaWcgNwogICAgIT0KICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDMKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDEKICAgIC8vIG5leHRfbGlzdC5hcHBlbmQoc3RvcmVkX2xhYmVsKQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyA0CiAgICBpbnRjXzAgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICBmcmFtZV9idXJ5IDMKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTQ6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNgogICAgYiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9mb3JfaGVhZGVyQDExCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9mb3JAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjAzCiAgICAvLyBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0gPSBuZXh0X2xpc3QuY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgMgogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX2ZhbHNlQDc6CiAgICBpbnRjXzEgLy8gMAogICAgYiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX21lcmdlQDgKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMSAvLyAwCiAgICBiIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9vcGVyYXRvcl9sYWJlbHMob3BlcmF0b3I6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X29wZXJhdG9yX2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X29wZXJhdG9yX2xhYmVscyhzZWxmLCBvcGVyYXRvcjogQWNjb3VudCkgLT4gTGFiZWxMaXN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA3CiAgICAvLyBpZiBvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwOAogICAgLy8gcmV0dXJuIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbHNfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA5LTIxMAogICAgLy8gIyByZXR1cm4gZW1wdHkgbGlzdAogICAgLy8gcmV0dXJuIGVtcHR5X2xpc3QoKQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRkX2xhYmVsX3RvX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYWRkX2xhYmVsX3RvX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMS0yMjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbF90b19hc3NldChzZWxmLCBsYWJlbDogU3RyaW5nLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjMKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyNQogICAgLy8gc2VsZi5vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIG9wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjcKICAgIC8vIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfbGFiZWxfdG9fYXNzZXRfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTQKICAgIC8vIGlmIGFzc2V0IG5vdCBpbiBzZWxmLmFzc2V0czoKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE1CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMQogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzQtMjM1CiAgICAvLyAjIGFkZCBsYWJlbCB0byBvcGVyYXRvcgogICAgLy8gZXhpc3RpbmcgPSBzZWxmLmFzc2V0c1thc3NldF0uY29weSgpCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjM2CiAgICAvLyBleGlzdGluZy5hcHBlbmQoYXJjNC5TdHJpbmcobGFiZWwpKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzNwogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gZXhpc3RpbmcuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0Mi0yNDMKICAgIC8vICMgaW5jciBhc3NldCBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ0LTI0NgogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NwogICAgLy8gc2VsZi5sYWJlbHNbbGFiZWxdID0gbGFiZWxfZGVzY3JpcHRvci5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTYKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgphZGRfbGFiZWxfdG9fYXNzZXRfZm9yX2hlYWRlckA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2ZvckAxMQogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxNwogICAgLy8gaWYgc3RvcmVkX2xhYmVsID09IGxhYmVsOgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IGFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDEwCiAgICBmcmFtZV9kaWcgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyAzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGFkZF9sYWJlbF90b19hc3NldF9mb3JfaGVhZGVyQDcKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9mb3JAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE5CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMwCiAgICAvLyBzZWxmLmdldF9hc3NldF9sYWJlbF9pbmRleChhc3NldCwgbGFiZWwpID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgYiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfbGFiZWxfaW5kZXhAMTIKCmFkZF9sYWJlbF90b19hc3NldF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzktMjQwCiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYuYXNzZXRzW2Fzc2V0XSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ5LTI1MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQoc2VsZiwgbGFiZWw6IFN0cmluZywgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18zIC8vICIiCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjUzCiAgICAvLyBzZWxmLm9wZXJhdG9yX29ubHkobGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgb3BlcmF0b3Jfb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NQogICAgLy8gZm91bmQgPSBGYWxzZQogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gaWYgc2VsZi5hc3NldHNbYXNzZXRdLmxlbmd0aCA9PSAxOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjU3CiAgICAvLyBpZiBzZWxmLmFzc2V0c1thc3NldF1bMF0gPT0gbGFiZWw6CiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBhc3NlcnQgLy8gSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTgKICAgIC8vIGRlbCBzZWxmLmFzc2V0c1thc3NldF0KICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTkKICAgIC8vIGZvdW5kID0gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIGZyYW1lX2J1cnkgNQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBmcmFtZV9kaWcgNQogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzQKICAgIC8vIGVuc3VyZShmb3VuZCwgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc2LTI3NwogICAgLy8gIyBkZWNyIGFzc2V0IGNvdW50CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc5CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzgtMjgwCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgxCiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjEKICAgIC8vIGZvdW5kID0gRmFsc2UKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMwoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjYzCiAgICAvLyBuZXh0X2xpc3QgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2NC0yNjYKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIHRvIG5ldyBib3ggZXhjZXB0IGxhYmVsCiAgICAvLyAjIHNhdmUgJGZvdW5kIHRvIHRocm93IGlmIG5vdCBmb3VuZAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDQKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDYKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Zvcl9oZWFkZXJANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjQtMjY2CiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyB0byBuZXcgYm94IGV4Y2VwdCBsYWJlbAogICAgLy8gIyBzYXZlICRmb3VuZCB0byB0aHJvdyBpZiBub3QgZm91bmQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDQKICAgIDwKICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2ZvckAxMgogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjcKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCAhPSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgICE9CiAgICBieiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2OAogICAgLy8gbmV4dF9saXN0LmFwcGVuZChzdG9yZWRfbGFiZWwpCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIGZyYW1lX2J1cnkgMQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyA2CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSA2CiAgICBiIHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Zvcl9oZWFkZXJANgoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcwCiAgICAvLyBmb3VuZCA9IFRydWUKICAgIGludGNfMCAvLyAxCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMAoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfZm9yQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gbmV4dF9saXN0LmNvcHkoKQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgMQogICAgYm94X3B1dAogICAgYiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVscyhhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMtMjg0CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X2xhYmVscyhzZWxmLCBhc3NldDogQXNzZXQpIC0+IExhYmVsTGlzdDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NQogICAgLy8gaWYgYXNzZXQgaW4gc2VsZi5hc3NldHM6CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRfYXNzZXRfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gcmV0dXJuIHNlbGYuYXNzZXRzW2Fzc2V0XQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIHN3YXAKICAgIHJldHN1YgoKZ2V0X2Fzc2V0X2xhYmVsc19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDcKICAgIC8vIHJldHVybiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODctMjg4CiAgICAvLyAjIHJldHVybiBlbXB0eQogICAgLy8gcmV0dXJuIGVtcHR5X2xpc3QoKQogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c19sYWJlbHMoYXNzZXRzOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hc3NldHNfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5MC0yOTMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX2xhYmVscygKICAgIC8vICAgICBzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XQogICAgLy8gKSAtPiBhcmM0LkR5bmFtaWNBcnJheVtMYWJlbExpc3RdOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5NAogICAgLy8gb3V0ID0gYXJjNC5EeW5hbWljQXJyYXlbTGFiZWxMaXN0XSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5NQogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTUKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX2xhYmVsc19hZnRlcl9mb3JANwogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk2CiAgICAvLyBhc3NldCA9IEFzc2V0KGFzc2V0X2lkLm5hdGl2ZSkKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk3CiAgICAvLyBpZiBhc3NldCBpbiBzZWxmLmFzc2V0czoKICAgIGl0b2IKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGdldF9hc3NldHNfbGFiZWxzX2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk4CiAgICAvLyBvdXQuYXBwZW5kKHNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkpCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgYnl0ZWMgNiAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGZyYW1lX2J1cnkgMQoKZ2V0X2Fzc2V0c19sYWJlbHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDMKICAgIGIgZ2V0X2Fzc2V0c19sYWJlbHNfZm9yX2hlYWRlckAxCgpnZXRfYXNzZXRzX2xhYmVsc19lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMDAKICAgIC8vIG91dC5hcHBlbmQoZW1wdHlfbGlzdCgpKQogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDEKICAgIHB1c2hieXRlcyAweDAwMDIwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfbGFiZWxzX2FmdGVyX2lmX2Vsc2VANQoKZ2V0X2Fzc2V0c19sYWJlbHNfYWZ0ZXJfZm9yQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzAxCiAgICAvLyByZXR1cm4gb3V0CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X21pY3JvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMwOS0zMTAKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgX2dldF9hc3NldF9taWNybyhzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldE1pY3JvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzEzCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE0CiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzEyLTMxNQogICAgLy8gcmV0dXJuIEFzc2V0TWljcm8oCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X21pY3JvKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfbWljcm86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE3LTMxOAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9taWNybyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldE1pY3JvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE5CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfbWljcm8KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfbWljcm8oYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c19taWNybzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjEtMzIyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c19taWNybyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbWljcm9fZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI0CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X21pY3JvCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19taWNyb19mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhhc3NldF9pZDogdWludDY0KSAtPiBieXRlczoKX2dldF9hc3NldF9taWNyb19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI4LTMyOQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldE1pY3JvTGFiZWxzOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzMyCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzMzCiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM0CiAgICAvLyBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IF9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKCl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMzEtMzM1CiAgICAvLyByZXR1cm4gQXNzZXRNaWNyb0xhYmVscygKICAgIC8vICAgICB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIC8vICAgICBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA1IC8vIDUKICAgICsKICAgIHB1c2hieXRlcyAweDAwMDUKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKX2dldF9hc3NldF9taWNyb19sYWJlbHNfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9taWNyb19sYWJlbHMoYXNzZXQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9hc3NldF9taWNyb19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM3LTMzOAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9taWNyb19sYWJlbHMoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRNaWNyb0xhYmVsczoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMzOQogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9taWNyb19sYWJlbHMoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF9taWNyb19sYWJlbHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfbWljcm9fbGFiZWxzKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfbWljcm9fbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MS0zNDIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX21pY3JvX2xhYmVscyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbWljcm9fbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDMKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX21pY3JvX2xhYmVsc19hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDQKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVscwogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfbWljcm9fbGFiZWxzX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c19taWNyb19sYWJlbHNfYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDgtMzQ5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIF9nZXRfYXNzZXRfdGV4dChzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldFRleHQ6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTIKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzUzCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU0CiAgICAvLyB1cmw9YjJzdHIoYXNzZXQudXJsKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVSTAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM1NQogICAgLy8gbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBfZ2V0X2Fzc2V0X3RleHRfdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwoKX2dldF9hc3NldF90ZXh0X3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTEtMzU2CiAgICAvLyByZXR1cm4gQXNzZXRUZXh0KAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICAvLyAgICAgbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBwdXNoYnl0ZXMgMHgwMDA4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3RleHRfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfdGV4dF90ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfdGV4dChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3RleHQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU4LTM1OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0KHNlbGYsIGFzc2V0OiBVSW50NjQpIC0+IEFzc2V0VGV4dDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM2MAogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF90ZXh0KGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0KGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjItMzYzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c190ZXh0KHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjQKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3RleHRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY1CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfdGV4dF9mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfdGV4dF9hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY5LTM3MAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0VGV4dExhYmVsczoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM3MwogICAgLy8gbmFtZT1iMnN0cihhc3NldC5uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzQKICAgIC8vIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzUKICAgIC8vIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzcyLTM3NgogICAgLy8gcmV0dXJuIEFzc2V0VGV4dExhYmVscygKICAgIC8vICAgICBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgLy8gKQogICAgZGlnIDIKICAgIGxlbgogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweDAwMDYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzc4LTM3OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0X2xhYmVscyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldFRleHRMYWJlbHM6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODAKICAgIC8vIHJldHVybiBzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF90ZXh0X2xhYmVscwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0X2xhYmVscyhhc3NldHM6IGJ5dGVzKSAtPiB2b2lkOgpnZXRfYXNzZXRzX3RleHRfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4Mi0zODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODUKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dF9sYWJlbHMKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfc21hbGwoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg5LTM5MAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3NtYWxsKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0U21hbGw6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTMKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk0CiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk1CiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk2CiAgICAvLyB0b3RhbD1hcmM0LlVJbnQ2NChhc3NldC50b3RhbCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM5NwogICAgLy8gaGFzX2ZyZWV6ZT1hcmM0LkJvb2woYXNzZXQuZnJlZXplICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RnJlZXplCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk4CiAgICAvLyBoYXNfY2xhd2JhY2s9YXJjNC5Cb29sKGFzc2V0LmNsYXdiYWNrICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q2xhd2JhY2sKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTkKICAgIC8vIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogX2dldF9hc3NldF9zbWFsbF90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyA2CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTItNDAwCiAgICAvLyByZXR1cm4gQXNzZXRTbWFsbCgKICAgIC8vICAgICBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIHRvdGFsPWFyYzQuVUludDY0KGFzc2V0LnRvdGFsKSwKICAgIC8vICAgICBoYXNfZnJlZXplPWFyYzQuQm9vbChhc3NldC5mcmVlemUgIT0gR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgaGFzX2NsYXdiYWNrPWFyYzQuQm9vbChhc3NldC5jbGF3YmFjayAhPSBHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDAxMAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDUKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHB1c2hpbnQgMTA1IC8vIDEwNQogICAgc3dhcAogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NwogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgYiBfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9zbWFsbChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3NtYWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwMi00MDMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRfc21hbGwoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRTbWFsbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwNAogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X3NtYWxsCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX3NtYWxsKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDA2LTQwNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldHNfc21hbGwoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDgKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpnZXRfYXNzZXRzX3NtYWxsX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDgKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwOQogICAgLy8gbG9nKHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9zbWFsbAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfc21hbGxfZm9yX2hlYWRlckAxCgpnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuX2dldF9hc3NldF9mdWxsKGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X2Z1bGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEzLTQxNAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X2Z1bGwoc2VsZiwgYXNzZXRfaWQ6IFVJbnQ2NCkgLT4gQXNzZXRGdWxsOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxNgogICAgLy8gcmVzZXJ2ZV9hY2N0ID0gQWNjb3VudChhc3NldC5yZXNlcnZlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTkKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTgtNDIwCiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIC8vIGVsc2UgVUludDY0KDApCiAgICBieiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDE4CiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIGZyYW1lX2RpZyAxMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKCl9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIzCiAgICAvLyBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDI0CiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjUKICAgIC8vIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjYKICAgIC8vIHRvdGFsPWFyYzQuVUludDY0KGFzc2V0LnRvdGFsKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBmcmFtZV9idXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjcKICAgIC8vIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzMgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyOAogICAgLy8gbWFuYWdlcj1hcmM0LkFkZHJlc3MoYXNzZXQubWFuYWdlciksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNYW5hZ2VyCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDkKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjkKICAgIC8vIGZyZWV6ZT1hcmM0LkFkZHJlc3MoYXNzZXQuZnJlZXplKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldEZyZWV6ZQogICAgc3dhcAogICAgZnJhbWVfYnVyeSAxMAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMAogICAgLy8gY2xhd2JhY2s9YXJjNC5BZGRyZXNzKGFzc2V0LmNsYXdiYWNrKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENsYXdiYWNrCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDExCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMxCiAgICAvLyByZXNlcnZlPWFyYzQuQWRkcmVzcyhhc3NldC5yZXNlcnZlKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFJlc2VydmUKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgOAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMwogICAgLy8gbWV0YWRhdGFfaGFzaD1hcmM0LkR5bmFtaWNCeXRlcyhhc3NldC5tZXRhZGF0YV9oYXNoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE1ldGFkYXRhSGFzaAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMgogICAgLy8gcmVzZXJ2ZV9iYWxhbmNlPWFyYzQuVUludDY0KHJlc2VydmVfYmFsYW5jZSksCiAgICBpdG9iCiAgICBmcmFtZV9idXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzQKICAgIC8vIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA1CiAgICBmcmFtZV9kaWcgNAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwoKX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfbWVyZ2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjItNDM1CiAgICAvLyByZXR1cm4gQXNzZXRGdWxsKAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICAvLyAgICAgdG90YWw9YXJjNC5VSW50NjQoYXNzZXQudG90YWwpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIG1hbmFnZXI9YXJjNC5BZGRyZXNzKGFzc2V0Lm1hbmFnZXIpLAogICAgLy8gICAgIGZyZWV6ZT1hcmM0LkFkZHJlc3MoYXNzZXQuZnJlZXplKSwKICAgIC8vICAgICBjbGF3YmFjaz1hcmM0LkFkZHJlc3MoYXNzZXQuY2xhd2JhY2spLAogICAgLy8gICAgIHJlc2VydmU9YXJjNC5BZGRyZXNzKGFzc2V0LnJlc2VydmUpLAogICAgLy8gICAgIHJlc2VydmVfYmFsYW5jZT1hcmM0LlVJbnQ2NChyZXNlcnZlX2JhbGFuY2UpLAogICAgLy8gICAgIG1ldGFkYXRhX2hhc2g9YXJjNC5EeW5hbWljQnl0ZXMoYXNzZXQubWV0YWRhdGFfaGFzaCksCiAgICAvLyAgICAgbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMTU1IC8vIDE1NQogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDA5YgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICBmcmFtZV9kaWcgNgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgOQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMTAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDExCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyA4CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDcKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X21lcmdlQDYKCl9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIwCiAgICAvLyBlbHNlIFVJbnQ2NCgwKQogICAgaW50Y18xIC8vIDAKICAgIGIgX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9mdWxsKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfZnVsbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzctNDM4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X2Z1bGwoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRGdWxsOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDM5CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X2Z1bGwoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF9mdWxsCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX2Z1bGwoYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c19mdWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MS00NDIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX2Z1bGwoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDMKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpnZXRfYXNzZXRzX2Z1bGxfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfZnVsbF9hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDQKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfZnVsbChhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9mdWxsCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19mdWxsX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c19mdWxsX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"},"bareActions":{"create":["NoOp"],"call":["DeleteApplication","UpdateApplication"]}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +// Type definitions for ARC-56 structs + +export type LabelDescriptor = { + name: string, + numAssets: bigint, + numOperators: bigint +} + + +/** + * Converts the ABI tuple representation of a LabelDescriptor to the struct representation + */ +export function LabelDescriptorFromTuple(abiTuple: [string, bigint, bigint]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.LabelDescriptor, APP_SPEC.structs) as LabelDescriptor +} + +export type AssetMicro = { + unitName: string, + decimals: number +} + + +/** + * Converts the ABI tuple representation of a AssetMicro to the struct representation + */ +export function AssetMicroFromTuple(abiTuple: [string, number]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetMicro, APP_SPEC.structs) as AssetMicro +} + +export type AssetMicroLabels = { + unitName: string, + decimals: number, + labels: string[] +} + + +/** + * Converts the ABI tuple representation of a AssetMicroLabels to the struct representation + */ +export function AssetMicroLabelsFromTuple(abiTuple: [string, number, string[]]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetMicroLabels, APP_SPEC.structs) as AssetMicroLabels +} + +export type AssetText = { + name: string, + unitName: string, + url: string, + labels: string[] +} + + +/** + * Converts the ABI tuple representation of a AssetText to the struct representation + */ +export function AssetTextFromTuple(abiTuple: [string, string, string, string[]]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetText, APP_SPEC.structs) as AssetText +} + +export type AssetTextLabels = { + name: string, + unitName: string, + url: string +} + + +/** + * Converts the ABI tuple representation of a AssetTextLabels to the struct representation + */ +export function AssetTextLabelsFromTuple(abiTuple: [string, string, string]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetTextLabels, APP_SPEC.structs) as AssetTextLabels +} + +export type AssetSmall = { + name: string, + unitName: string, + decimals: number, + total: bigint, + hasFreeze: boolean, + hasClawback: boolean, + labels: string[] +} + + +/** + * Converts the ABI tuple representation of a AssetSmall to the struct representation + */ +export function AssetSmallFromTuple(abiTuple: [string, string, number, bigint, boolean, boolean, string[]]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetSmall, APP_SPEC.structs) as AssetSmall +} + +export type AssetFull = { + name: string, + unitName: string, + url: string, + total: bigint, + decimals: number, + manager: string, + freeze: string, + clawback: string, + reserve: string, + metadataHash: Uint8Array, + reserveBalance: bigint, + labels: string[] +} + + +/** + * Converts the ABI tuple representation of a AssetFull to the struct representation + */ +export function AssetFullFromTuple(abiTuple: [string, string, string, bigint, number, string, string, string, string, Uint8Array, bigint, string[]]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetFull, APP_SPEC.structs) as AssetFull +} + +/** + * The argument types for the AssetLabeling contract + */ +export type AssetLabelingArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'change_admin(account)void': { + newAdmin: Uint8Array | string + } + 'add_label(string,string)void': { + id: string + name: string + } + 'remove_label(string)void': { + id: string + } + 'get_label(string)(string,uint64,uint64)': { + id: string + } + 'log_labels(string[])void': { + ids: string[] + } + 'add_operator_to_label(account,string)void': { + operator: Uint8Array | string + label: string + } + 'remove_operator_from_label(account,string)void': { + operator: Uint8Array | string + label: string + } + 'get_operator_labels(account)string[]': { + operator: Uint8Array | string + } + 'add_label_to_asset(string,asset)void': { + label: string + asset: bigint + } + 'remove_label_from_asset(string,asset)void': { + label: string + asset: bigint + } + 'get_asset_labels(asset)string[]': { + asset: bigint + } + 'get_assets_labels(uint64[])string[][]': { + assets: bigint[] | number[] + } + 'get_asset_micro(uint64)(string,uint8)': { + asset: bigint | number + } + 'get_assets_micro(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_micro_labels(uint64)(string,uint8,string[])': { + asset: bigint | number + } + 'get_assets_micro_labels(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_text(uint64)(string,string,string,string[])': { + asset: bigint | number + } + 'get_assets_text(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_text_labels(uint64)(string,string,string)': { + asset: bigint | number + } + 'get_assets_text_labels(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])': { + asset: bigint | number + } + 'get_assets_small(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])': { + asset: bigint | number + } + 'get_assets_full(uint64[])void': { + assets: bigint[] | number[] + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'change_admin(account)void': [newAdmin: Uint8Array | string] + 'add_label(string,string)void': [id: string, name: string] + 'remove_label(string)void': [id: string] + 'get_label(string)(string,uint64,uint64)': [id: string] + 'log_labels(string[])void': [ids: string[]] + 'add_operator_to_label(account,string)void': [operator: Uint8Array | string, label: string] + 'remove_operator_from_label(account,string)void': [operator: Uint8Array | string, label: string] + 'get_operator_labels(account)string[]': [operator: Uint8Array | string] + 'add_label_to_asset(string,asset)void': [label: string, asset: bigint] + 'remove_label_from_asset(string,asset)void': [label: string, asset: bigint] + 'get_asset_labels(asset)string[]': [asset: bigint] + 'get_assets_labels(uint64[])string[][]': [assets: bigint[] | number[]] + 'get_asset_micro(uint64)(string,uint8)': [asset: bigint | number] + 'get_assets_micro(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_micro_labels(uint64)(string,uint8,string[])': [asset: bigint | number] + 'get_assets_micro_labels(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_text(uint64)(string,string,string,string[])': [asset: bigint | number] + 'get_assets_text(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_text_labels(uint64)(string,string,string)': [asset: bigint | number] + 'get_assets_text_labels(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])': [asset: bigint | number] + 'get_assets_small(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])': [asset: bigint | number] + 'get_assets_full(uint64[])void': [assets: bigint[] | number[]] + } +} + +/** + * The return type for each method + */ +export type AssetLabelingReturns = { + 'change_admin(account)void': void + 'add_label(string,string)void': void + 'remove_label(string)void': void + 'get_label(string)(string,uint64,uint64)': LabelDescriptor + 'log_labels(string[])void': void + 'add_operator_to_label(account,string)void': void + 'remove_operator_from_label(account,string)void': void + 'get_operator_labels(account)string[]': string[] + 'add_label_to_asset(string,asset)void': void + 'remove_label_from_asset(string,asset)void': void + 'get_asset_labels(asset)string[]': string[] + 'get_assets_labels(uint64[])string[][]': string[][] + 'get_asset_micro(uint64)(string,uint8)': AssetMicro + 'get_assets_micro(uint64[])void': void + 'get_asset_micro_labels(uint64)(string,uint8,string[])': AssetMicroLabels + 'get_assets_micro_labels(uint64[])void': void + 'get_asset_text(uint64)(string,string,string,string[])': AssetText + 'get_assets_text(uint64[])void': void + 'get_asset_text_labels(uint64)(string,string,string)': AssetTextLabels + 'get_assets_text_labels(uint64[])void': void + 'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])': AssetSmall + 'get_assets_small(uint64[])void': void + 'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])': AssetFull + 'get_assets_full(uint64[])void': void +} + +/** + * Defines the types of available calls and state of the AssetLabeling smart contract. + */ +export type AssetLabelingTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'change_admin(account)void' | 'change_admin', { + argsObj: AssetLabelingArgs['obj']['change_admin(account)void'] + argsTuple: AssetLabelingArgs['tuple']['change_admin(account)void'] + returns: AssetLabelingReturns['change_admin(account)void'] + }> + & Record<'add_label(string,string)void' | 'add_label', { + argsObj: AssetLabelingArgs['obj']['add_label(string,string)void'] + argsTuple: AssetLabelingArgs['tuple']['add_label(string,string)void'] + returns: AssetLabelingReturns['add_label(string,string)void'] + }> + & Record<'remove_label(string)void' | 'remove_label', { + argsObj: AssetLabelingArgs['obj']['remove_label(string)void'] + argsTuple: AssetLabelingArgs['tuple']['remove_label(string)void'] + returns: AssetLabelingReturns['remove_label(string)void'] + }> + & Record<'get_label(string)(string,uint64,uint64)' | 'get_label', { + argsObj: AssetLabelingArgs['obj']['get_label(string)(string,uint64,uint64)'] + argsTuple: AssetLabelingArgs['tuple']['get_label(string)(string,uint64,uint64)'] + returns: AssetLabelingReturns['get_label(string)(string,uint64,uint64)'] + }> + & Record<'log_labels(string[])void' | 'log_labels', { + argsObj: AssetLabelingArgs['obj']['log_labels(string[])void'] + argsTuple: AssetLabelingArgs['tuple']['log_labels(string[])void'] + returns: AssetLabelingReturns['log_labels(string[])void'] + }> + & Record<'add_operator_to_label(account,string)void' | 'add_operator_to_label', { + argsObj: AssetLabelingArgs['obj']['add_operator_to_label(account,string)void'] + argsTuple: AssetLabelingArgs['tuple']['add_operator_to_label(account,string)void'] + returns: AssetLabelingReturns['add_operator_to_label(account,string)void'] + }> + & Record<'remove_operator_from_label(account,string)void' | 'remove_operator_from_label', { + argsObj: AssetLabelingArgs['obj']['remove_operator_from_label(account,string)void'] + argsTuple: AssetLabelingArgs['tuple']['remove_operator_from_label(account,string)void'] + returns: AssetLabelingReturns['remove_operator_from_label(account,string)void'] + }> + & Record<'get_operator_labels(account)string[]' | 'get_operator_labels', { + argsObj: AssetLabelingArgs['obj']['get_operator_labels(account)string[]'] + argsTuple: AssetLabelingArgs['tuple']['get_operator_labels(account)string[]'] + returns: AssetLabelingReturns['get_operator_labels(account)string[]'] + }> + & Record<'add_label_to_asset(string,asset)void' | 'add_label_to_asset', { + argsObj: AssetLabelingArgs['obj']['add_label_to_asset(string,asset)void'] + argsTuple: AssetLabelingArgs['tuple']['add_label_to_asset(string,asset)void'] + returns: AssetLabelingReturns['add_label_to_asset(string,asset)void'] + }> + & Record<'remove_label_from_asset(string,asset)void' | 'remove_label_from_asset', { + argsObj: AssetLabelingArgs['obj']['remove_label_from_asset(string,asset)void'] + argsTuple: AssetLabelingArgs['tuple']['remove_label_from_asset(string,asset)void'] + returns: AssetLabelingReturns['remove_label_from_asset(string,asset)void'] + }> + & Record<'get_asset_labels(asset)string[]' | 'get_asset_labels', { + argsObj: AssetLabelingArgs['obj']['get_asset_labels(asset)string[]'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_labels(asset)string[]'] + returns: AssetLabelingReturns['get_asset_labels(asset)string[]'] + }> + & Record<'get_assets_labels(uint64[])string[][]' | 'get_assets_labels', { + argsObj: AssetLabelingArgs['obj']['get_assets_labels(uint64[])string[][]'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_labels(uint64[])string[][]'] + returns: AssetLabelingReturns['get_assets_labels(uint64[])string[][]'] + }> + & Record<'get_asset_micro(uint64)(string,uint8)' | 'get_asset_micro', { + argsObj: AssetLabelingArgs['obj']['get_asset_micro(uint64)(string,uint8)'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_micro(uint64)(string,uint8)'] + returns: AssetLabelingReturns['get_asset_micro(uint64)(string,uint8)'] + }> + & Record<'get_assets_micro(uint64[])void' | 'get_assets_micro', { + argsObj: AssetLabelingArgs['obj']['get_assets_micro(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_micro(uint64[])void'] + returns: AssetLabelingReturns['get_assets_micro(uint64[])void'] + }> + & Record<'get_asset_micro_labels(uint64)(string,uint8,string[])' | 'get_asset_micro_labels', { + argsObj: AssetLabelingArgs['obj']['get_asset_micro_labels(uint64)(string,uint8,string[])'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_micro_labels(uint64)(string,uint8,string[])'] + returns: AssetLabelingReturns['get_asset_micro_labels(uint64)(string,uint8,string[])'] + }> + & Record<'get_assets_micro_labels(uint64[])void' | 'get_assets_micro_labels', { + argsObj: AssetLabelingArgs['obj']['get_assets_micro_labels(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_micro_labels(uint64[])void'] + returns: AssetLabelingReturns['get_assets_micro_labels(uint64[])void'] + }> + & Record<'get_asset_text(uint64)(string,string,string,string[])' | 'get_asset_text', { + argsObj: AssetLabelingArgs['obj']['get_asset_text(uint64)(string,string,string,string[])'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_text(uint64)(string,string,string,string[])'] + returns: AssetLabelingReturns['get_asset_text(uint64)(string,string,string,string[])'] + }> + & Record<'get_assets_text(uint64[])void' | 'get_assets_text', { + argsObj: AssetLabelingArgs['obj']['get_assets_text(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_text(uint64[])void'] + returns: AssetLabelingReturns['get_assets_text(uint64[])void'] + }> + & Record<'get_asset_text_labels(uint64)(string,string,string)' | 'get_asset_text_labels', { + argsObj: AssetLabelingArgs['obj']['get_asset_text_labels(uint64)(string,string,string)'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_text_labels(uint64)(string,string,string)'] + returns: AssetLabelingReturns['get_asset_text_labels(uint64)(string,string,string)'] + }> + & Record<'get_assets_text_labels(uint64[])void' | 'get_assets_text_labels', { + argsObj: AssetLabelingArgs['obj']['get_assets_text_labels(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_text_labels(uint64[])void'] + returns: AssetLabelingReturns['get_assets_text_labels(uint64[])void'] + }> + & Record<'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])' | 'get_asset_small', { + argsObj: AssetLabelingArgs['obj']['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] + returns: AssetLabelingReturns['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] + }> + & Record<'get_assets_small(uint64[])void' | 'get_assets_small', { + argsObj: AssetLabelingArgs['obj']['get_assets_small(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_small(uint64[])void'] + returns: AssetLabelingReturns['get_assets_small(uint64[])void'] + }> + & Record<'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])' | 'get_asset_full', { + argsObj: AssetLabelingArgs['obj']['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] + returns: AssetLabelingReturns['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] + }> + & Record<'get_assets_full(uint64[])void' | 'get_assets_full', { + argsObj: AssetLabelingArgs['obj']['get_assets_full(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_full(uint64[])void'] + returns: AssetLabelingReturns['get_assets_full(uint64[])void'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + admin: BinaryState + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type AssetLabelingSignatures = keyof AssetLabelingTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type AssetLabelingNonVoidMethodSignatures = keyof AssetLabelingTypes['methods'] extends infer T ? T extends keyof AssetLabelingTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the AssetLabeling smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = AssetLabelingTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the AssetLabeling smart contract to the method's return type + */ +export type MethodReturn = AssetLabelingTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = AssetLabelingTypes['state']['global']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type AssetLabelingCreateCallParams = + | Expand +/** + * Defines supported update method params for this smart contract + */ +export type AssetLabelingUpdateCallParams = + | Expand & {method?: never} +/** + * Defines supported delete method params for this smart contract + */ +export type AssetLabelingDeleteCallParams = + | Expand & {method?: never} +/** + * Defines arguments required for the deploy method. + */ +export type AssetLabelingDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: AssetLabelingCreateCallParams + /** + * Update transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + updateParams?: AssetLabelingUpdateCallParams + /** + * Delete transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + deleteParams?: AssetLabelingDeleteCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the AssetLabeling smart contract + */ +export abstract class AssetLabelingParamsFactory { + /** + * Constructs a no op call for the change_admin(account)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static changeAdmin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'change_admin(account)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.newAdmin], + } + } + /** + * Constructs a no op call for the add_label(string,string)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static addLabel(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'add_label(string,string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.id, params.args.name], + } + } + /** + * Constructs a no op call for the remove_label(string)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static removeLabel(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'remove_label(string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.id], + } + } + /** + * Constructs a no op call for the get_label(string)(string,uint64,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getLabel(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_label(string)(string,uint64,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.id], + } + } + /** + * Constructs a no op call for the log_labels(string[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static logLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'log_labels(string[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.ids], + } + } + /** + * Constructs a no op call for the add_operator_to_label(account,string)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static addOperatorToLabel(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'add_operator_to_label(account,string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.operator, params.args.label], + } + } + /** + * Constructs a no op call for the remove_operator_from_label(account,string)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static removeOperatorFromLabel(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'remove_operator_from_label(account,string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.operator, params.args.label], + } + } + /** + * Constructs a no op call for the get_operator_labels(account)string[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getOperatorLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_operator_labels(account)string[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.operator], + } + } + /** + * Constructs a no op call for the add_label_to_asset(string,asset)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static addLabelToAsset(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'add_label_to_asset(string,asset)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.label, params.args.asset], + } + } + /** + * Constructs a no op call for the remove_label_from_asset(string,asset)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static removeLabelFromAsset(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'remove_label_from_asset(string,asset)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.label, params.args.asset], + } + } + /** + * Constructs a no op call for the get_asset_labels(asset)string[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_labels(asset)string[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_labels(uint64[])string[][] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_labels(uint64[])string[][]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_micro(uint64)(string,uint8) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetMicro(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_micro(uint64)(string,uint8)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_micro(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsMicro(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_micro(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_micro_labels(uint64)(string,uint8,string[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetMicroLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_micro_labels(uint64)(string,uint8,string[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_micro_labels(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsMicroLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_micro_labels(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_text(uint64)(string,string,string,string[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetText(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_text(uint64)(string,string,string,string[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_text(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsText(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_text(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_text_labels(uint64)(string,string,string) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetTextLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_text_labels(uint64)(string,string,string)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_text_labels(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsTextLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_text_labels(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetSmall(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_small(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsSmall(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_small(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetFull(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_full(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsFull(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_full(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } +} + +/** + * A factory to create and deploy one or more instance of the AssetLabeling smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class AssetLabelingFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `AssetLabelingFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClientInterface { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new AssetLabelingClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new AssetLabelingClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the AssetLabeling smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: AssetLabelingDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new AssetLabelingClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + /** + * Gets available deployUpdate methods + */ + deployUpdate: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a deployUpdate call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.deployUpdate(params) + }, + }, + + /** + * Gets available deployDelete methods + */ + deployDelete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a deployDelete call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.deployDelete(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new AssetLabelingClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the AssetLabeling smart contract + */ +export class AssetLabelingClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `AssetLabelingClient` + * + * @param appClient An `AppClient` instance which has been created with the AssetLabeling app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `AssetLabelingClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Checks for decode errors on the given return value and maps the return value to the return type for the given method + * @returns The typed return value or undefined if there was no value + */ + decodeReturnValue(method: TSignature, returnValue: ABIReturn | undefined) { + return returnValue !== undefined ? getArc56ReturnValue>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined + } + + /** + * Returns a new `AssetLabelingClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new AssetLabelingClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `AssetLabelingClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new AssetLabelingClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClientInterface { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available update methods + */ + update: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The update result + */ + bare: (params?: Expand) => { + return this.appClient.params.bare.update(params) + }, + }, + + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The delete result + */ + bare: (params?: Expand) => { + return this.appClient.params.bare.delete(params) + }, + }, + + /** + * Makes a clear_state call to an existing instance of the AssetLabeling smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `change_admin(account)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + changeAdmin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.changeAdmin(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_label(string,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + addLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.addLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_label(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + removeLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.removeLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_label(string)(string,uint64,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `log_labels(string[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + logLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.logLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_operator_to_label(account,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + addOperatorToLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.addOperatorToLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_operator_from_label(account,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + removeOperatorFromLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.removeOperatorFromLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_operator_labels(account)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getOperatorLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getOperatorLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_label_to_asset(string,asset)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + addLabelToAsset: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.addLabelToAsset(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_label_from_asset(string,asset)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + removeLabelFromAsset: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.removeLabelFromAsset(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_labels(asset)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_labels(uint64[])string[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro(uint64)(string,uint8)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetMicro: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetMicro(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsMicro: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsMicro(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro_labels(uint64)(string,uint8,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetMicroLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetMicroLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsMicroLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsMicroLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text(uint64)(string,string,string,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetText: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetText(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsText: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsText(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text_labels(uint64)(string,string,string)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetTextLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetTextLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsTextLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsTextLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetSmall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetSmall(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_small(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsSmall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsSmall(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetFull: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetFull(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_full(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsFull: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsFull(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available update methods + */ + update: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The update result + */ + bare: (params?: Expand) => { + return this.appClient.createTransaction.bare.update(params) + }, + }, + + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The delete result + */ + bare: (params?: Expand) => { + return this.appClient.createTransaction.bare.delete(params) + }, + }, + + /** + * Makes a clear_state call to an existing instance of the AssetLabeling smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `change_admin(account)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + changeAdmin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.changeAdmin(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_label(string,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + addLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.addLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_label(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + removeLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.removeLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_label(string)(string,uint64,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `log_labels(string[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + logLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.logLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_operator_to_label(account,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + addOperatorToLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.addOperatorToLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_operator_from_label(account,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + removeOperatorFromLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.removeOperatorFromLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_operator_labels(account)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getOperatorLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getOperatorLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_label_to_asset(string,asset)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + addLabelToAsset: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.addLabelToAsset(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_label_from_asset(string,asset)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + removeLabelFromAsset: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.removeLabelFromAsset(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_labels(asset)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_labels(uint64[])string[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro(uint64)(string,uint8)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetMicro: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetMicro(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsMicro: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsMicro(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro_labels(uint64)(string,uint8,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetMicroLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetMicroLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsMicroLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsMicroLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text(uint64)(string,string,string,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetText: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetText(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsText: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsText(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text_labels(uint64)(string,string,string)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetTextLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetTextLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsTextLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsTextLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetSmall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetSmall(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_small(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsSmall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsSmall(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetFull: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetFull(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_full(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsFull: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsFull(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available update methods + */ + update: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The update result + */ + bare: (params?: Expand) => { + return this.appClient.send.bare.update(params) + }, + }, + + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The delete result + */ + bare: (params?: Expand) => { + return this.appClient.send.bare.delete(params) + }, + }, + + /** + * Makes a clear_state call to an existing instance of the AssetLabeling smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `change_admin(account)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + changeAdmin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.changeAdmin(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['change_admin(account)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_label(string,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + addLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.addLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['add_label(string,string)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_label(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + removeLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.removeLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['remove_label(string)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_label(string)(string,uint64,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_label(string)(string,uint64,uint64)'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `log_labels(string[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + logLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.logLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['log_labels(string[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_operator_to_label(account,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + addOperatorToLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.addOperatorToLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['add_operator_to_label(account,string)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_operator_from_label(account,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + removeOperatorFromLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.removeOperatorFromLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['remove_operator_from_label(account,string)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_operator_labels(account)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getOperatorLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getOperatorLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_operator_labels(account)string[]'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_label_to_asset(string,asset)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + addLabelToAsset: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.addLabelToAsset(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['add_label_to_asset(string,asset)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_label_from_asset(string,asset)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + removeLabelFromAsset: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.removeLabelFromAsset(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['remove_label_from_asset(string,asset)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_labels(asset)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_labels(asset)string[]'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_labels(uint64[])string[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_labels(uint64[])string[][]'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro(uint64)(string,uint8)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetMicro: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetMicro(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_micro(uint64)(string,uint8)'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsMicro: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsMicro(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_micro(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro_labels(uint64)(string,uint8,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetMicroLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetMicroLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_micro_labels(uint64)(string,uint8,string[])'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsMicroLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsMicroLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_micro_labels(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text(uint64)(string,string,string,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetText: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetText(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_text(uint64)(string,string,string,string[])'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsText: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsText(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_text(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text_labels(uint64)(string,string,string)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetTextLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetTextLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_text_labels(uint64)(string,string,string)'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsTextLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsTextLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_text_labels(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetSmall: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetSmall(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_small(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsSmall: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsSmall(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_small(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetFull: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetFull(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_full(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsFull: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsFull(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_full(uint64[])void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new AssetLabelingClient(this.appClient.clone(params)) + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_label(string)(string,uint64,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getLabel(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getLabel(params)) + return result.return as unknown as AssetLabelingReturns['get_label(string)(string,uint64,uint64)'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `log_labels(string[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async logLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.logLabels(params)) + return result.return as unknown as AssetLabelingReturns['log_labels(string[])void'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_operator_labels(account)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getOperatorLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getOperatorLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_operator_labels(account)string[]'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_labels(asset)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_labels(asset)string[]'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_labels(uint64[])string[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_labels(uint64[])string[][]'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_micro(uint64)(string,uint8)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetMicro(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetMicro(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_micro(uint64)(string,uint8)'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_micro(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsMicro(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsMicro(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_micro(uint64[])void'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_micro_labels(uint64)(string,uint8,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetMicroLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetMicroLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_micro_labels(uint64)(string,uint8,string[])'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_micro_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsMicroLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsMicroLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_micro_labels(uint64[])void'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_text(uint64)(string,string,string,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetText(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetText(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_text(uint64)(string,string,string,string[])'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_text(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsText(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsText(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_text(uint64[])void'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_text_labels(uint64)(string,string,string)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetTextLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetTextLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_text_labels(uint64)(string,string,string)'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_text_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsTextLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsTextLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_text_labels(uint64[])void'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetSmall(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetSmall(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_small(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsSmall(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsSmall(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_small(uint64[])void'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetFull(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetFull(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_full(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsFull(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsFull(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_full(uint64[])void'] + } + + /** + * Methods to access state for the current AssetLabeling app + */ + state = { + /** + * Methods to access global state for the current AssetLabeling app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + admin: new BinaryStateValue(result.admin), + } + }, + /** + * Get the current value of the admin key in global state + */ + admin: async (): Promise => { return new BinaryStateValue((await this.appClient.state.global.getValue("admin")) as Uint8Array | undefined) }, + }, + } + + public newGroup(): AssetLabelingComposer { + const client = this + const composer = this.algorand.newGroup() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + /** + * Add a change_admin(account)void method call against the AssetLabeling contract + */ + changeAdmin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.changeAdmin(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a add_label(string,string)void method call against the AssetLabeling contract + */ + addLabel(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.addLabel(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a remove_label(string)void method call against the AssetLabeling contract + */ + removeLabel(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.removeLabel(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_label(string)(string,uint64,uint64) method call against the AssetLabeling contract + */ + getLabel(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getLabel(params))) + resultMappers.push((v) => client.decodeReturnValue('get_label(string)(string,uint64,uint64)', v)) + return this + }, + /** + * Add a log_labels(string[])void method call against the AssetLabeling contract + */ + logLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.logLabels(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a add_operator_to_label(account,string)void method call against the AssetLabeling contract + */ + addOperatorToLabel(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.addOperatorToLabel(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a remove_operator_from_label(account,string)void method call against the AssetLabeling contract + */ + removeOperatorFromLabel(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.removeOperatorFromLabel(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_operator_labels(account)string[] method call against the AssetLabeling contract + */ + getOperatorLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getOperatorLabels(params))) + resultMappers.push((v) => client.decodeReturnValue('get_operator_labels(account)string[]', v)) + return this + }, + /** + * Add a add_label_to_asset(string,asset)void method call against the AssetLabeling contract + */ + addLabelToAsset(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.addLabelToAsset(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a remove_label_from_asset(string,asset)void method call against the AssetLabeling contract + */ + removeLabelFromAsset(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.removeLabelFromAsset(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_labels(asset)string[] method call against the AssetLabeling contract + */ + getAssetLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetLabels(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_labels(asset)string[]', v)) + return this + }, + /** + * Add a get_assets_labels(uint64[])string[][] method call against the AssetLabeling contract + */ + getAssetsLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsLabels(params))) + resultMappers.push((v) => client.decodeReturnValue('get_assets_labels(uint64[])string[][]', v)) + return this + }, + /** + * Add a get_asset_micro(uint64)(string,uint8) method call against the AssetLabeling contract + */ + getAssetMicro(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetMicro(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_micro(uint64)(string,uint8)', v)) + return this + }, + /** + * Add a get_assets_micro(uint64[])void method call against the AssetLabeling contract + */ + getAssetsMicro(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsMicro(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_micro_labels(uint64)(string,uint8,string[]) method call against the AssetLabeling contract + */ + getAssetMicroLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetMicroLabels(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_micro_labels(uint64)(string,uint8,string[])', v)) + return this + }, + /** + * Add a get_assets_micro_labels(uint64[])void method call against the AssetLabeling contract + */ + getAssetsMicroLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsMicroLabels(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_text(uint64)(string,string,string,string[]) method call against the AssetLabeling contract + */ + getAssetText(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetText(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_text(uint64)(string,string,string,string[])', v)) + return this + }, + /** + * Add a get_assets_text(uint64[])void method call against the AssetLabeling contract + */ + getAssetsText(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsText(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_text_labels(uint64)(string,string,string) method call against the AssetLabeling contract + */ + getAssetTextLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetTextLabels(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_text_labels(uint64)(string,string,string)', v)) + return this + }, + /** + * Add a get_assets_text_labels(uint64[])void method call against the AssetLabeling contract + */ + getAssetsTextLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsTextLabels(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]) method call against the AssetLabeling contract + */ + getAssetSmall(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetSmall(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])', v)) + return this + }, + /** + * Add a get_assets_small(uint64[])void method call against the AssetLabeling contract + */ + getAssetsSmall(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsSmall(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]) method call against the AssetLabeling contract + */ + getAssetFull(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetFull(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])', v)) + return this + }, + /** + * Add a get_assets_full(uint64[])void method call against the AssetLabeling contract + */ + getAssetsFull(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsFull(params))) + resultMappers.push(undefined) + return this + }, + get update() { + return { + bare: (params?: AppClientBareCallParams & AppClientCompilationParams ) => { + promiseChain = promiseChain.then(async () => composer.addAppUpdate(await client.params.update.bare(params))) + return this + }, + } + }, + get delete() { + return { + bare: (params?: AppClientBareCallParams ) => { + promiseChain = promiseChain.then(() => composer.addAppDelete(client.params.delete.bare(params))) + return this + }, + } + }, + /** + * Add a clear state call to the AssetLabeling contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + } + } as unknown as AssetLabelingComposer + } +} +export type AssetLabelingComposer = { + /** + * Calls the change_admin(account)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + changeAdmin(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['change_admin(account)void'] | undefined]> + + /** + * Calls the add_label(string,string)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + addLabel(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['add_label(string,string)void'] | undefined]> + + /** + * Calls the remove_label(string)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + removeLabel(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['remove_label(string)void'] | undefined]> + + /** + * Calls the get_label(string)(string,uint64,uint64) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getLabel(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_label(string)(string,uint64,uint64)'] | undefined]> + + /** + * Calls the log_labels(string[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + logLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['log_labels(string[])void'] | undefined]> + + /** + * Calls the add_operator_to_label(account,string)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + addOperatorToLabel(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['add_operator_to_label(account,string)void'] | undefined]> + + /** + * Calls the remove_operator_from_label(account,string)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + removeOperatorFromLabel(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['remove_operator_from_label(account,string)void'] | undefined]> + + /** + * Calls the get_operator_labels(account)string[] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getOperatorLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_operator_labels(account)string[]'] | undefined]> + + /** + * Calls the add_label_to_asset(string,asset)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + addLabelToAsset(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['add_label_to_asset(string,asset)void'] | undefined]> + + /** + * Calls the remove_label_from_asset(string,asset)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + removeLabelFromAsset(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['remove_label_from_asset(string,asset)void'] | undefined]> + + /** + * Calls the get_asset_labels(asset)string[] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_labels(asset)string[]'] | undefined]> + + /** + * Calls the get_assets_labels(uint64[])string[][] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_labels(uint64[])string[][]'] | undefined]> + + /** + * Calls the get_asset_micro(uint64)(string,uint8) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetMicro(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_micro(uint64)(string,uint8)'] | undefined]> + + /** + * Calls the get_assets_micro(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsMicro(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_micro(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_micro_labels(uint64)(string,uint8,string[]) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetMicroLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_micro_labels(uint64)(string,uint8,string[])'] | undefined]> + + /** + * Calls the get_assets_micro_labels(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsMicroLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_micro_labels(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_text(uint64)(string,string,string,string[]) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetText(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_text(uint64)(string,string,string,string[])'] | undefined]> + + /** + * Calls the get_assets_text(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsText(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_text(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_text_labels(uint64)(string,string,string) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetTextLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_text_labels(uint64)(string,string,string)'] | undefined]> + + /** + * Calls the get_assets_text_labels(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsTextLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_text_labels(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetSmall(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] | undefined]> + + /** + * Calls the get_assets_small(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsSmall(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_small(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetFull(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] | undefined]> + + /** + * Calls the get_assets_full(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsFull(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_full(uint64[])void'] | undefined]> + + /** + * Gets available delete methods + */ + readonly delete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(params?: AppClientBareCallParams ): AssetLabelingComposer<[...TReturns, undefined]> + } + + /** + * Gets available update methods + */ + readonly update: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(params?: AppClientBareCallParams ): AssetLabelingComposer<[...TReturns, undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the AssetLabeling smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): AssetLabelingComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): AssetLabelingComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type AssetLabelingComposerResults = Expand + diff --git a/projects/abel-sdk-v2/src/index.ts b/projects/abel-sdk-v2/src/index.ts new file mode 100644 index 0000000..c19c4ab --- /dev/null +++ b/projects/abel-sdk-v2/src/index.ts @@ -0,0 +1,408 @@ +import { AlgorandClient } from "@algorandfoundation/algokit-utils"; +import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/types/account"; +import { BoxName } from "@algorandfoundation/algokit-utils/types/app"; +import { decodeAddress, decodeUint64, encodeAddress, encodeUint64, makeEmptyTransactionSigner } from "algosdk"; +import pMap from "p-map"; +import { + AssetFull, + AssetFullFromTuple, + AssetLabelingClient, + AssetLabelingFactory, + AssetMicro, + AssetMicroFromTuple, + AssetMicroLabels, + AssetMicroLabelsFromTuple, + AssetSmall, + AssetSmallFromTuple, + AssetText, + AssetTextFromTuple, + AssetTextLabels, + AssetTextLabelsFromTuple, + LabelDescriptorFromTuple as LabelDescriptorBoxValueFromTuple, +} from "./generated/abel-contract-client.js"; +import { AnyFn, FirstArgument, LabelDescriptor } from "./types.js"; +import { chunk, mergeMapsArr, wrapErrors } from "./util.js"; + +export * from "./types.js"; +export { AssetLabelingClient, AssetLabelingFactory }; + +const DEFAULT_READ_ACCOUNT = "A7NMWS3NT3IUDMLVO26ULGXGIIOUQ3ND2TXSER6EBGRZNOBOUIQXHIBGDE"; +const SIMULATE_PARAMS = { + allowMoreLogging: true, + allowUnnamedResources: true, + extraOpcodeBudget: 130013, + fixSigners: true, + allowEmptySignatures: true, +}; + +export class AbelSDK { + readClient: AssetLabelingClient; + writeClient: AssetLabelingClient | undefined; + writeAccount?: TransactionSignerAccount | undefined; + private concurrency: number = 2; + + constructor({ + algorand, + appId, + readAccount = DEFAULT_READ_ACCOUNT, + writeAccount, + concurrency, + }: { + algorand: AlgorandClient; + appId: bigint; + writeAccount?: TransactionSignerAccount; + readAccount?: string; + concurrency?: number; + }) { + // Client used for read queries. Sender can be any funded address. + // Default read is the A7N.. fee sink which is funded on all public ALGO networks + // (localnet may be zero or at min balance though) + this.readClient = algorand.client.getTypedAppClientById(AssetLabelingClient, { + appId, + defaultSender: readAccount, + defaultSigner: makeEmptyTransactionSigner(), + }); + + // tranascting requires a writeAccount + if (writeAccount) { + this.writeClient = algorand.client.getTypedAppClientById(AssetLabelingClient, { + appId, + defaultSender: writeAccount.addr, + defaultSigner: writeAccount.signer, + }); + this.writeAccount = writeAccount; + } + + if (concurrency !== undefined) { + this.concurrency = concurrency; + } + } + + get appId() { + return this.readClient.appId; + } + + // Box bead wrappers + + async getAllLabels(): Promise { + return (await this.getBoxesByLength(2)).map((boxName) => boxName.name); + } + + async getAllOperators(): Promise { + return (await this.getBoxesByLength(32)).map((boxName) => encodeAddress(boxName.nameRaw)); + } + + async getAllAssetIDs(): Promise { + return (await this.getBoxesByLength(8)).map((boxName) => decodeUint64(boxName.nameRaw, "bigint")); + } + + /* + * Registry Readers + * + * We simulate from a client configured with a (theoretically) known-good account on all networks, default dev fee sink + */ + + async getLabelDescriptor(labelId: string): Promise { + try { + const { + returns: [labelDescriptorValue], + } = await wrapErrors( + this.readClient + .newGroup() + .getLabel({ args: { id: labelId } }) + .simulate(SIMULATE_PARAMS) + ); + return { id: labelId, ...labelDescriptorValue! }; + } catch (e) { + if ((e as Error).message === "ERR:NOEXIST") { + return null; + } else { + throw e; + } + } + } + + async getLabelDescriptors(labelIds: string[]): Promise> { + const { confirmations } = await wrapErrors( + this.readClient + .newGroup() + .logLabels({ args: { ids: labelIds } }) + .simulate(SIMULATE_PARAMS) + ); + + const logs = confirmations[0]!.logs ?? []; + const descriptorValues = this.parseLogsAs(logs, LabelDescriptorBoxValueFromTuple, "get_label"); + + const labelDescriptors: Map = new Map(); + descriptorValues.forEach((descriptorValue, idx) => { + const id = labelIds[idx]; + labelDescriptors.set(id, { id, ...descriptorValue }); + }); + + return labelDescriptors; + } + + async getOperatorLabels(operator: string): Promise { + const { + returns: [operatorLabels], + } = await wrapErrors(this.readClient.newGroup().getOperatorLabels({ args: { operator } }).simulate(SIMULATE_PARAMS)); + + return operatorLabels!; + } + + async getAssetLabels(assetId: bigint): Promise { + const { + returns: [assetLabels], + } = await wrapErrors( + this.readClient + .newGroup() + .getAssetLabels({ args: { asset: assetId } }) + .simulate(SIMULATE_PARAMS) + ); + + return assetLabels!; + } + + async getAssetsLabels(assetIds: bigint[]): Promise> { + const { + returns: [assetsLabels], + } = await wrapErrors( + this.readClient + .newGroup() + .getAssetsLabels({ args: { assets: assetIds } }) + .simulate(SIMULATE_PARAMS) + ); + + const map: Map = new Map(); + assetsLabels?.forEach((assetLabels, idx) => { + map.set(assetIds[idx], assetLabels); + }); + + return map; + } + + /* + * Write methods = transactions + */ + + async addLabel(labelId: string, name: string) { + this.requireWriteClient(); + + const query = this.writeClient + .newGroup() + .addTransaction( + await this.writeClient.algorand.createTransaction.payment({ + sender: this.writeAccount.addr, + receiver: this.writeClient.appAddress, + amount: (0.2).algos(), + }), + this.writeAccount.signer + ) + .addLabel({ args: { id: labelId, name }, boxReferences: [labelId] }) + .send(); + + return wrapErrors(query); + } + + async removeLabel(labelId: string) { + this.requireWriteClient(); + + const query = this.writeClient.send.removeLabel({ + args: { + id: labelId, + }, + boxReferences: [labelId], + }); + return wrapErrors(query); + } + + async addOperatorToLabel(operator: string, labelId: string) { + this.requireWriteClient(); + + const query = this.writeClient.send.addOperatorToLabel({ + args: { + operator, + label: labelId, + }, + boxReferences: [decodeAddress(operator).publicKey, labelId], + }); + + return wrapErrors(query); + } + + async removeOperatorFromLabel(operator: string, labelId: string) { + this.requireWriteClient(); + + const query = await this.writeClient.send.removeOperatorFromLabel({ + args: { operator, label: labelId }, + boxReferences: [decodeAddress(operator).publicKey, labelId], + }); + + return wrapErrors(query); + } + + async addLabelToAsset(assetId: bigint, labelId: string) { + this.requireWriteClient(); + + const query = this.writeClient.send.addLabelToAsset({ + args: { + asset: assetId, + label: labelId, + }, + boxReferences: [labelId, encodeUint64(assetId), decodeAddress(this.writeAccount.addr).publicKey], + }); + return wrapErrors(query); + } + + async removeLabelFromAsset(assetId: bigint, labelId: string) { + this.requireWriteClient(); + + const query = this.writeClient.send.removeLabelFromAsset({ + args: { + asset: assetId, + label: labelId, + }, + boxReferences: [labelId, encodeUint64(assetId), decodeAddress(this.writeAccount.addr).publicKey], + }); + + return wrapErrors(query); + } + + /* Batch fetch asset views */ + + getAssetsMicro = async (assetIds: bigint[]): Promise> => { + const METHOD_MAX = 128; + if (assetIds.length > METHOD_MAX) return this.batchCall(this.getAssetsMicro, assetIds, METHOD_MAX); + + const { confirmations } = await wrapErrors( + this.readClient + .newGroup() + .getAssetsMicro({ args: { assets: assetIds } }) + .simulate(SIMULATE_PARAMS) + ); + + const assetValues = this.parseLogsAs(confirmations[0]!.logs ?? [], AssetMicroFromTuple, "get_asset_micro"); + return new Map(assetValues.map((descriptorValue, idx) => [assetIds[idx], { id: assetIds[idx], ...descriptorValue }])); + }; + + getAssetsMicroLabels = async (assetIds: bigint[]): Promise> => { + const METHOD_MAX = 64; + if (assetIds.length > METHOD_MAX) return this.batchCall(this.getAssetsMicroLabels, assetIds, METHOD_MAX); + + const { confirmations } = await wrapErrors( + this.readClient + .newGroup() + .getAssetsMicroLabels({ args: { assets: assetIds } }) + .simulate(SIMULATE_PARAMS) + ); + + const assetValues = this.parseLogsAs(confirmations[0]!.logs ?? [], AssetMicroLabelsFromTuple, "get_asset_micro_labels"); + return new Map(assetValues.map((descriptorValue, idx) => [assetIds[idx], { id: assetIds[idx], ...descriptorValue }])); + }; + + getAssetsText = async (assetIds: bigint[]): Promise> => { + const METHOD_MAX = 128; + if (assetIds.length > METHOD_MAX) return this.batchCall(this.getAssetsText, assetIds, METHOD_MAX); + + const { confirmations } = await wrapErrors( + this.readClient + .newGroup() + .getAssetsText({ args: { assets: assetIds } }) + .simulate(SIMULATE_PARAMS) + ); + + const assetValues = this.parseLogsAs(confirmations[0]!.logs ?? [], AssetTextFromTuple, "get_asset_text"); + return new Map(assetValues.map((descriptorValue, idx) => [assetIds[idx], { id: assetIds[idx], ...descriptorValue }])); + }; + + getAssetsTextLabels = async (assetIds: bigint[]): Promise> => { + const METHOD_MAX = 64; + if (assetIds.length > METHOD_MAX) return this.batchCall(this.getAssetsTextLabels, assetIds, METHOD_MAX); + + const { confirmations } = await wrapErrors( + this.readClient + .newGroup() + .getAssetsTextLabels({ args: { assets: assetIds } }) + .simulate(SIMULATE_PARAMS) + ); + + const assetValues = this.parseLogsAs(confirmations[0]!.logs ?? [], AssetTextLabelsFromTuple, "get_asset_text_labels"); + return new Map(assetValues.map((descriptorValue, idx) => [assetIds[idx], { id: assetIds[idx], ...descriptorValue }])); + }; + + getAssetsSmall = async (assetIds: bigint[]): Promise> => { + const METHOD_MAX = 64; + if (assetIds.length > METHOD_MAX) return this.batchCall(this.getAssetsSmall, assetIds, METHOD_MAX); + + const { confirmations } = await wrapErrors( + this.readClient + .newGroup() + .getAssetsSmall({ args: { assets: assetIds } }) + .simulate(SIMULATE_PARAMS) + ); + + const assetValues = this.parseLogsAs(confirmations[0]!.logs ?? [], AssetSmallFromTuple, "get_asset_small"); + return new Map(assetValues.map((descriptorValue, idx) => [assetIds[idx], { id: assetIds[idx], ...descriptorValue }])); + }; + + getAssetsFull = async (assetIds: bigint[]): Promise> => { + const METHOD_MAX = 42; + if (assetIds.length > METHOD_MAX) return this.batchCall(this.getAssetsFull, assetIds, METHOD_MAX); + + const { confirmations } = await wrapErrors( + this.readClient + .newGroup() + .getAssetsFull({ args: { assets: assetIds } }) + .simulate(SIMULATE_PARAMS) + ); + + const assetValues = this.parseLogsAs(confirmations[0]!.logs ?? [], AssetFullFromTuple, "get_asset_full"); + return new Map(assetValues.map((descriptorValue, idx) => [assetIds[idx], { id: assetIds[idx], ...descriptorValue }])); + }; + + /* Utils */ + + private async getBoxesByLength(length: number): Promise { + const boxNames = await this.readClient.algorand.app.getBoxNames(this.appId); + return boxNames.filter((boxName) => boxName.nameRaw.length === length); + } + + /* + * parse typed arc4 structs from logs + * + * tupleParser is like generated clients' xyzArcStructFromTuple + * abiDecodingMethod is a method name that returns the same avi return type as we are logging + * e.g. if we are parsing log_label_descriptors() logs that logs LabelDescriptor, abiDecodingMethod can be get_label_descriptor that has ABI return LabelDescriptor + */ + parseLogsAs(logs: Uint8Array[], tupleParser: T, abiDecodingMethodName: string): ReturnType[] { + const decodingMethod = this.readClient.appClient.getABIMethod(abiDecodingMethodName); + const parsed = logs.map((logValue) => + tupleParser( + // @ts-ignore TODO fixable? + decodingMethod.returns.type.decode(logValue) + ) + ); + return parsed; + } + + /* + * ts guard for write clients only + */ + requireWriteClient(): asserts this is this & { writeAccount: TransactionSignerAccount } & { writeClient: AssetLabelingClient } { + if (this.writeAccount === undefined || this.writeClient === undefined) { + throw new Error(`A transaction operation was issued on a read-only client`); + } + } + + /* + * pMap batcher, merge maps after + * + * decorator pattern instead would be nice but ... eh + */ + async batchCall(method: T, args: FirstArgument, methodMax: number): Promise> { + const chunked = chunk(args, methodMax); + const res = (await pMap(chunked, (arg) => method(arg), { concurrency: this.concurrency })); + // @ts-ignore + return mergeMapsArr(res); + } +} diff --git a/projects/abel-sdk-v2/src/types.ts b/projects/abel-sdk-v2/src/types.ts new file mode 100644 index 0000000..5f47fbd --- /dev/null +++ b/projects/abel-sdk-v2/src/types.ts @@ -0,0 +1,16 @@ +import { + LabelDescriptor as LabelDescriptorBoxValue, + AssetMicro as AssetMicroValue, +} from "./generated/abel-contract-client.js"; + +export interface LabelDescriptor extends LabelDescriptorBoxValue { + id: string; +} + +export type AnyFn = (...args: any[]) => any; + +export interface AssetMicro extends AssetMicroValue { + id: bigint; +} + +export type FirstArgument any> = T extends (arg1: infer U, ...args: any[]) => any ? U : never; diff --git a/projects/abel-sdk-v2/src/util.ts b/projects/abel-sdk-v2/src/util.ts new file mode 100644 index 0000000..a1dd069 --- /dev/null +++ b/projects/abel-sdk-v2/src/util.ts @@ -0,0 +1,41 @@ +export async function wrapErrors(a: T) { + try { + return await a; + } catch (_e) { + // TODO fallback for non-dev-mode nodes: iterate logs and find `ERR:` + const e = _e as Error; + let m: RegExpExecArray | null; + if ((m = /"(ERR:[^"]+)"/.exec(e.message))) { + // @ts-ignore remove? + e.originalMessage = e.message; + e.message = m[1]; + } + throw e; + } +} + +export function chunk(array: T[], chunkSize: number): T[][] { + if (chunkSize <= 0) { + throw new Error("Chunk size must be greater than 0"); + } + + const result: T[][] = []; + + for (let i = 0; i < array.length; i += chunkSize) { + result.push(array.slice(i, i + chunkSize)); + } + + return result; +} + +export function mergeMapsArr(maps: Map[]): Map { + const mergedMap = new Map(maps[0]); + + for (const map of maps.slice(1)) { + map.forEach((value, key) => { + mergedMap.set(key, value); // Overwrites or adds new key-value pairs + }); + } + + return mergedMap; +} diff --git a/projects/abel-sdk-v2/tsconfig.json b/projects/abel-sdk-v2/tsconfig.json new file mode 100644 index 0000000..5c3d146 --- /dev/null +++ b/projects/abel-sdk-v2/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "nodenext", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "declaration": true, + "outDir": "dist/" + }, + "include": [ + "src/" + ] +} diff --git a/projects/asset_labeling-contracts/smart_contracts/__main__.py b/projects/asset_labeling-contracts/smart_contracts/__main__.py index d45c561..23026d0 100644 --- a/projects/asset_labeling-contracts/smart_contracts/__main__.py +++ b/projects/asset_labeling-contracts/smart_contracts/__main__.py @@ -91,18 +91,20 @@ def build(output_dir: Path, contract_path: Path) -> Path: output_dir.mkdir(exist_ok=True, parents=True) logger.info(f"Exporting {contract_path} to {output_dir}") + cmd_list = [ + "algokit", + "--no-color", + "compile", + "python", + str(contract_path.resolve()), + f"--out-dir={output_dir}", + "--no-output-arc32", + "--output-arc56", + "--output-source-map", + ] + logger.debug(f"Running {" ".join(cmd_list)}") build_result = subprocess.run( - [ - "algokit", - "--no-color", - "compile", - "python", - str(contract_path.resolve()), - f"--out-dir={output_dir}", - "--no-output-arc32", - "--output-arc56", - "--output-source-map", - ], + cmd_list, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, diff --git a/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.approval.puya.map b/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.approval.puya.map index 1fca3a6..fc01a6e 100644 --- a/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.approval.puya.map +++ b/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../asset_labeling/contract.py" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCQ;AAAa;;AAAb;AAFR;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAmNK;;AAAA;AAAA;AAAA;;AAAA;AAnNL;;;AAAA;AAAA;;AAmNK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAlCA;;AAAA;AAAA;AAAA;;AAAA;AAjLL;;;AAAA;;;AAAA;;;AAAA;AAAA;;AAiLK;;;AAAA;;AA5BA;;AAAA;AAAA;AAAA;;AAAA;AArJL;;;AAAA;;;AAAA;;;AAAA;AAAA;;AAqJK;;;AAAA;;AAdA;;AAAA;AAAA;AAAA;;AAAA;AAvIL;;;AAAA;AAAA;;AAuIK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAzCA;;AAAA;AAAA;AAAA;;AAAA;AA9FL;;;AAAA;AAAA;;AAAA;;;AAAA;;;AA8FK;;;AAAA;;AA5BA;;AAAA;AAAA;AAAA;;AAAA;AAlEL;;;AAAA;AAAA;;AAAA;;;AAAA;;;AAkEK;;;AAAA;;AA/BA;;AAAA;AAAA;AAAA;;AAAA;AAnCL;;;AAAA;;;AAmCK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AA3BL;;;AAAA;;;AA2BK;;;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AAhBL;;;AAAA;;;AAAA;;;AAAA;;;AAgBK;;;AAAA;;AALA;;AAAA;AAAA;AAAA;;AAAA;AAXL;;;AAAA;AAAA;;AAWK;;;AAAA;;AAXL;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASe;;AAAc;AAAA;AAAA;AAAA;AAAd;AApBR;;;AAoBkC;;AAnBjC;AACA;;AAoBR;;;AAEQ;;;AACA;AAAA;;AAAA;;AAER;;;AAEQ;;;AACO;;AAAA;AAAA;;AA9BR;;;AA8B+B;;AA7B9B;AACA;AA6BO;;AAAA;AAAmB;AAAnB;AA/BR;;;AA+B8B;;AA9B7B;AACA;AA+BI;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AADc;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAlB;;AAAA;;AAAA;;AAAA;AAAA;;AAMR;;;AAEQ;;;AACO;;AAAA;AAAA;;AAzCR;;;AAyC2B;AAxC1B;AACA;AAwCO;;AAAA;AAAmB;AAAnB;AA1CR;;;AA0C8B;;AAzC7B;AACA;AAyCO;;AAAA;AAAA;AAAA;;;AAA8B;;AAA9B;AA3CR;;;AA2CyC;;AA1CxC;AACA;AA0CA;;AAAA;;;AAER;;;AAEe;;AAAA;AAAA;;AAhDR;;;AAgD2B;AA/C1B;AACA;AA+CO;;AAAA;AAAA;AAAP;AAIR;;;AAEW;;AAAc;AAAA;AAAA;AAAA;AAAd;AAAX;;;AACY;AACJ;;AAAA;;;;AAER;;;AAG0C;;AAA9B;;AAAA;;;AAAoD;;AAApD;AAAA;;;AACkC;;AAA9B;;AAAA;;;AACD;AADC;AADJ;;;;AA9DL;;;AAiEK;;AAhEJ;AACA;;;;;;AAkER;;;;;;AAEW;;AAAA;AAAA;;AAAA;;;AACQ;;AAAP;;AAAA;AACgC;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAA5C;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACe;;;AAAA;;AAAA;AAAf;;;AACgB;;AAAA;;AAAA;;;;;;;;;;AACD;AAAP;;AAAA;AAER;;;AAEQ;;AAAA;;;AACO;;AAAA;AAAA;;AAhFR;;;AAgF8B;AA/E7B;AACA;AAgFG;;AAAA;AAAA;;AAAX;;;AAGgB;;AAAA;;AAAA;;;AACG;AADH;AArFT;;;AAuFS;;AAtFR;AACA;AAyFe;;AAAA;AAAA;AACK;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAhB;AAAA;;;AACA;;AAAA;;AAAA;;AAAA;AAAA;AAMe;;AAAA;AAAA;AAEf;AAAA;;AAAA;AAAwC;AAAxC;AAD6B;AAAjC;;AAGA;;AAAA;;AAAA;;AAAA;AAAA;;AAPiD;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAlB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAA3B;;AAAA;;AAAA;;AAAA;AAAA;;;;AASZ;;;;;;;;;AAEQ;;AAAA;;;AAEO;;AAAA;AAAA;;AA7GR;;;AA6G8B;AA5G7B;AACA;AA4GO;;AAAA;AAAA;;AA9GR;;;AA8GoC;AA7GnC;AACA;AA+GA;;AAAA;;AAAY;;;AAAZ;AAAA;;AAEiB;AAAb;AAAA;;;AACI;;AACD;;AADC;AADJ;;;;AAnHL;;;AAsHK;AArHJ;AACA;AAwHmB;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAEf;;;AAAiC;;;;;;;;;;AAAjC;AAAA;;;AAAsC;;AAAA;;;AAA+B;;AAA/B;AAAtC;;;;AA5HL;;;AA6HK;;AA5HJ;AACA;AA+HI;;AAAA;AAAA;;AAAA;AAAwC;AAAxC;AAD6B;AAAjC;;AAGA;;AAAA;;AAAA;;AAAA;AAAA;AAEG;;AAAA;AAAA;AAAA;AAAA;AAAmC;AAAnC;AAAX;;;AACY;;AAAA;;;AAEY;;AAAA;;AAIwB;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAhD;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;;AACG;;AAAA;;;;;AAAnB;;;AACoB;;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;AAER;;AAAA;;AAAA;;AAAA;;AAAA;;;;;;;;;;AAEZ;;;AAEe;;AAAA;AAAA;;AApJR;;;AAoJoC;AAnJnC;AACA;AAmJO;;AAAA;AAAA;AAAP;AAWR;;;;;;;AAEe;;AAAA;AAAA;;AAlKR;;;AAkK8B;AAjK7B;AACA;AAkKA;;AAAA;;;AAEG;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAX;;;AAbW;;AAAA;AAAA;;AAAA;;;AACQ;;AAeyC;AAA5C;AAzKT;;;AA0KS;;AAzKR;AACA;AA4Ke;;AAAA;AAAA;AAAA;AACK;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAhB;AAAA;;;AACA;;AAAA;;AAAA;AAMe;;AAAA;AAAA;AAEf;AAAA;AAAA;AAAqC;AAArC;AAD0B;AAA9B;;AAGA;;AAAA;;AAAA;;AAAA;AAAA;;AA/BoC;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAA5C;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACe;;;AAAA;;AAAA;AAAf;;;;;AAagB;;;;;;;;;;;;AAXD;AAWC;;;AAUmC;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAlB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAArB;;AAAA;AAAA;;AAAA;AAAA;;;;AASZ;;;;;;;;;AAEe;;AAAA;AAAA;;AA9LR;;;AA8L8B;AA7L7B;AACA;AA8LA;;AAAA;;;AAEQ;AAAR;;AACG;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAA6B;AAA7B;AAAX;;;AACe;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAf;;;AACgB;;AAAA;;AACQ;AAAR;;AAtMT;;AAAA;;;AAqNe;AApNd;AACA;AAsNmB;;AAAA;AAAA;AAEf;AAAA;AAAA;AAAqC;AAArC;AAD0B;AAA9B;;AAGA;;AAAA;;AAAA;;AAAA;AAAA;;AApBgB;AAAR;;;;;AAEQ;;AAAA;;AAGwB;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAhD;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;AAAA;;AACG;;;AAAA;;AAAA;AAAnB;;;AACoB;;AAAA;;AAAA;AAAA;;;AAAA;;;;;;;;;;;AAEQ;AAAR;;;;;AAER;;AAAA;AAAA;;AAAA;;AAAA;;;;AAWZ;;;AAEe;;AAAA;AAAA;AAAA;AAAA;;AAhOR;;;AAgO8B;AA/N7B;AACA;AA+NO;;AAAA;AAAA;AAAP;AAAA", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDQ;;AAAa;;AAAb;AAFR;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAkYK;;AAAA;AAAA;AAAA;;AAAA;AAlYL;;;AAkYK;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA9XL;;;AAAA;AA8XK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AA/BA;;AAAA;AAAA;AAAA;;AAAA;AA/VL;;;AA+VK;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA3VL;;;AAAA;AA2VK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AApBA;;AAAA;AAAA;AAAA;;AAAA;AAvUL;;;AAuUK;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAnUL;;;AAAA;AAmUK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AAnTL;;;AAmTK;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA/SL;;;AAAA;AA+SK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAjBA;;AAAA;AAAA;AAAA;;AAAA;AA9RL;;;AA8RK;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA1RL;;;AAAA;AA0RK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AA1QL;;;AA0QK;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAtQL;;;AAAA;AAsQK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AA3BA;;AAAA;AAAA;AAAA;;AAAA;AA3OL;;;AA2OK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AApOL;;;AAAA;AAAA;;AAoOK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAlCA;;AAAA;AAAA;AAAA;;AAAA;AAlML;;;AAAA;;;AAAA;;;AAAA;AAAA;;AAkMK;;;AAAA;;AA5BA;;AAAA;AAAA;AAAA;;AAAA;AAtKL;;;AAAA;;;AAAA;;;AAAA;AAAA;;AAsKK;;;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AAtJL;;;AAAA;AAAA;;AAsJK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAzCA;;AAAA;AAAA;AAAA;;AAAA;AA7GL;;;AAAA;AAAA;;AAAA;;;AAAA;;;AA6GK;;;AAAA;;AA5BA;;AAAA;AAAA;AAAA;;AAAA;AAjFL;;;AAAA;AAAA;;AAAA;;;AAAA;;;AAiFK;;;AAAA;;AAjCA;;AAAA;AAAA;AAAA;;AAAA;AAhDL;;;AAgDK;;;AAAA;;AALA;;AAAA;AAAA;AAAA;;AAAA;AA3CL;;;AAAA;;;AA2CK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AApCL;;;AAAA;;;AAoCK;;;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AAzBL;;;AAAA;;;AAAA;;;AAAA;;;AAyBK;;;AAAA;;AALA;;AAAA;AAAA;AAAA;;AAAA;AApBL;;;AAAA;AAAA;;AAoBK;;;AAAA;;AApBL;;AAAA;;;;;;;;;;;;;;AAAA;;;AAYK;;AAAA;AAAA;;;AAAA;;AAJA;;AAAA;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAbL;;;AAEW;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAP;AAaI;;;;AAIA;;;;AAIO;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAjCR;;;AAiCkC;;AAhCjC;AACA;;AAiCR;;;AAEQ;;;AACA;;AAAA;;AAAA;;AAER;;;AAEQ;;;AACO;;AAAA;AAAA;;AA3CR;;;AA2C+B;;AA1C9B;AACA;AA0CO;;AAAA;AAAmB;AAAnB;AA5CR;;;AA4C8B;;;;;;;;;;;;AA3C7B;AACA;AA4CI;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AADc;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAlB;;AAAA;;AAAA;;AAAA;AAAA;;AAMR;;;AAEQ;;;AACO;;AAAA;AAAA;;AAtDR;;;AAsD2B;AArD1B;AACA;AAqDO;;AAAA;AAAA;AAAA;;;AAA8B;;AAA9B;AAvDR;;;AAuDyC;;AAtDxC;AACA;AAsDA;;AAAA;;;AAER;;;AAEe;;AAAA;AAAA;;AA5DR;;;AA4D2B;AA3D1B;AACA;AA2DO;;AAAA;AAAA;AAAP;AAER;;;AAEA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC4B;;;AAAZ;AAAA;AAAJ;;;;;;;;;AAMZ;;;AAEW;;AAAc;AAAA;;AAAA;AAAA;AAAd;AAAX;;;AACY;AACJ;;AAAA;;;;AAER;;;AAEuD;;AAA/C;;AAAiB;;;AAAjB;AAEsB;;AAAlB;AAAA;;;AACI;;AAAkB;;AAAlB;AADJ;;;;AAlFL;;;AAoFK;;AAnFJ;AACA;;;;;;AAqFR;;;;;;AAEW;;AAAA;AAAA;;AAAA;;;AACQ;;AAAP;;AAAA;AACgC;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAA5C;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACe;;;AAAA;;AAAA;AAAf;;;AACgB;;AAAA;;AAAA;;;;;;;;;;AACD;;AAAP;;AAAA;AAER;;;AAEQ;;AAAA;;;AACO;;AAAA;AAAA;;AAnGR;;;AAmG8B;AAlG7B;AACA;AAmGG;;AAAA;AAAA;;AAAX;;;AAGgB;;AAAA;;AAAA;;;AACG;;AADH;AAxGT;;;AA0GS;;AAzGR;AACA;AA4Ge;;AAAA;AAAA;AACK;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAhB;AAAA;;;AACA;;AAAA;;AAAA;;AAAA;AAAA;AAMe;;AAAA;AAAA;AAEf;AAAA;;AAAA;AAAwC;AAAxC;AAD6B;AAAjC;;AAGA;;AAAA;;AAAA;;AAAA;AAAA;;AAPiD;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAlB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAA3B;;AAAA;;AAAA;;AAAA;AAAA;;;;AASZ;;;;;;;;;AAEQ;;AAAA;;;AAEO;;AAAA;AAAA;;AAhIR;;;AAgI8B;AA/H7B;AACA;AA+HO;;AAAA;AAAA;;AAjIR;;;AAiIoC;AAhInC;AACA;AAkIA;;AAAA;;AAAY;;;AAAZ;AAAA;;AAEiB;;AAAb;AAAA;;;AACI;;AACD;;AADC;AADJ;;;;AAtIL;;;AAyIK;AAxIJ;AACA;AA2ImB;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAEf;;;AAAiC;;;;;;;;;;AAAjC;AAAA;;;AAAsC;;AAAA;;;AAA+B;;AAA/B;AAAtC;;;;AA/IL;;;AAgJK;;AA/IJ;AACA;AAkJI;;AAAA;AAAA;;AAAA;AAAwC;AAAxC;AAD6B;AAAjC;;AAGA;;AAAA;;AAAA;;AAAA;AAAA;AAEG;;AAAA;AAAA;AAAA;AAAA;AAAmC;AAAnC;AAAX;;;AACY;;AAAA;;;AAEY;AAAA;;AAIwB;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAhD;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;;AACG;;AAAA;;;;;AAAnB;;;AACoB;;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;AAER;;AAAA;;AAAA;;AAAA;;AAAA;;;;;;;;;;AAEZ;;;AAEW;;AAAA;AAAA;;AAAX;;;AACmB;;AAAA;AAAA;AAAP;AAjKD;AAmKH;AAWR;;;;;;;AAEe;;AAAA;AAAA;;AAvLR;;;AAuL8B;AAtL7B;AACA;AAuLA;;AAAA;;;AAEG;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAX;;;AAbW;;AAAA;AAAA;;AAAA;;;AACQ;;AAeyC;;AAA5C;AA9LT;;;AA+LS;;AA9LR;AACA;AAiMe;;AAAA;AAAA;AAAA;AACK;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAhB;AAAA;;;AACA;;AAAA;;AAAA;AAMe;;AAAA;AAAA;AAEf;AAAA;AAAA;AAAqC;AAArC;AAD0B;AAA9B;;AAGA;;AAAA;;AAAA;;AAAA;AAAA;;AA/BoC;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAA5C;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACe;;;AAAA;;AAAA;AAAf;;;;;AAagB;;;;;;;;;;;;AAXD;;AAWC;;;AAUmC;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAlB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAArB;;AAAA;AAAA;;AAAA;AAAA;;;;AASZ;;;;;;;;;AAEe;;AAAA;AAAA;;AAnNR;;;AAmN8B;AAlN7B;AACA;AAmNA;;AAAA;;;AAEQ;AAAR;;AACG;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAA6B;AAA7B;AAAX;;;AACe;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAf;;;AACgB;;AAAA;;AACQ;AAAR;;AA3NT;;AAAA;;;AA0Oe;AAzOd;AACA;AA2OmB;;AAAA;AAAA;AAEf;AAAA;AAAA;AAAqC;AAArC;AAD0B;AAA9B;;AAGA;;AAAA;;AAAA;;AAAA;AAAA;;AApBgB;AAAR;;;;;AAEQ;AAAA;;AAGwB;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAhD;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;AAAA;;AACG;;;AAAA;;AAAA;AAAnB;;;AACoB;;AAAA;;AAAA;AAAA;;;AAAA;;;;;;;;;;;AAEQ;AAAR;;;;;AAER;;AAAA;AAAA;;AAAA;;AAAA;;;;AAWZ;;;AAEW;;AAAA;AAAA;AAAA;AAAA;;AAAX;;;AACmB;;AAAA;AAAA;AAAP;AAAA;AA/OD;AAiPH;AAAA;AAER;;;;AAIc;AACd;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;AAC0B;AACX;AAAA;AAAA;;AAAA;AAAA;;AAAf;;;AAC2B;;AAAA;AAAA;AAAX;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;;;;;;;;;;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;;;;AAAA;;;AAAA;;;;;AACR;;AAAA;;AAAA;AAQR;;;AAI4B;;AAAA;;AAAA;AAAN;;;AACU;;AAAA;;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAFN;;;;AAAA;AAAA;AAAA;AAAA;AAAP;AAKR;;;AAEe;;AAAA;;;AAAP;AAER;;;AAEA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACsC;AAAtB;;;AAAJ;;;;;;;;;AAIZ;;;AAI4B;;AAAA;;AAAA;AAAN;;;AACU;;AAAA;;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAC2B;;AAAA;AAAA;AAAA;AAAA;;AAA7B;;;AAAA;;AAAA;AAAA;AAHJ;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;;AAAA;AA5RG;;;;AAkSX;;;AAEe;;AAAA;;;AAAP;AAER;;;AAEA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAC6C;AAA7B;;;AAAJ;;;;;;;;;AAIZ;;;AAIuB;;AAAA;;AAAA;AAAN;;;AACW;;AAAA;;AAAA;AAAN;;;AACA;;AAAA;;AAAA;AAAN;;;AACgC;;AAAA;AAAA;AAAA;AAAA;;AAA7B;;;AAAA;;AAAA;AAAA;AAJJ;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;;AAAA;AAhTG;;;;AAuTX;;;AAEe;;AAAA;;;AAAP;AAER;;;AAEA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACqC;AAArB;;;AAAJ;;;;;;;;;AAIZ;;;AAIuB;;AAAA;;AAAA;AAAN;;;AACW;;AAAA;;AAAA;AAAN;;;AACA;;AAAA;;AAAA;AAAN;;;AAHD;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAP;AAMR;;;AAEe;;AAAA;;;AAAP;AAER;;;AAEA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAC4C;AAA5B;;;AAAJ;;;;;;;;;AAIZ;;;AAIuB;;AAAA;;AAAA;AAAN;;;AACW;;AAAA;;AAAA;AAAN;;;AACU;;AAAA;;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AACS;;AAAA;;AAAA;AAAZ;AACe;;AAAA;;AAAA;AAAgB;;AAAhB;AAAV;;;AAAA;AAAA;;AAAA;AACY;;AAAA;;AAAA;AAAkB;;AAAlB;AAAV;;;AAAA;AAAA;;AAAA;AACuB;;AAAA;AAAA;AAAA;AAAA;;AAA7B;;;AAAA;;AAAA;AAAA;AAPJ;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;;AAAA;AAzVG;;;;AAmWX;;;AAEe;;AAAA;;;AAAP;AAER;;;AAEA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACsC;AAAtB;;;AAAJ;;;;;;;;;AAIZ;;;;;;AAG+B;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAGhB;;AAAA;;AAAA;;AADH;;;AAAA;;AAAA;;AAAA;;AAAA;AAKW;;AAAA;;AAAA;AAAN;;;AAAA;;AACW;;AAAA;;AAAA;AAAN;;;AAAA;;AACA;;AAAA;;AAAA;AAAN;;;AAAA;;AACc;;AAAA;;AAAA;AAAZ;AAAA;;AACc;;AAAA;;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AACY;;AAAA;;AAAA;AAAA;;AAAA;AACD;;AAAA;;AAAA;AAAA;;AAAA;AACE;;AAAA;;AAAA;AAAA;;AAAA;AACD;;AAAA;;AAAA;AAAA;;AAAA;AAEW;;AAAA;;AAAA;AAAlB;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AADE;AAAA;;AAEoB;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAA7B;;;AAAA;;AAAA;AAAA;AAZJ;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;;AAAA;AAvXG;;;;AAqXM;;;;AAiBjB;;;AAEe;;AAAA;;;AAAP;AAER;;;AAEA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AACqC;AAArB;;;AAAJ;;;;;;;;", "op_pc_offset": 0, "pc_events": { "1": { @@ -11,12 +11,12 @@ "params": {}, "block": "main", "stack_in": [], - "op": "intcblock 1 0 2 4294967295 4294967296" + "op": "intcblock 1 0 2 8 4294967295 4294967296" }, - "16": { - "op": "bytecblock \"ERR:NOEXIST\" \"admin\" \"\" 0x151f7c75 \"ERR:EXISTS\" \"ERR:UNAUTH\" \"ERR:LENGTH\" 0x0000000000000000 \"ERR:NOEMPTY\" 0x0002 0x0001 0x0000" + "17": { + "op": "bytecblock 0x151f7c75 \"ERR:NOEXIST\" 0x0000 \"\" \"admin\" \"ERR:EXISTS\" 0x0002 \"ERR:UNAUTH\" 0x0000000000000000 \"ERR:NOEMPTY\" 0x0001" }, - "105": { + "95": { "op": "txn ApplicationID", "defined_out": [ "tmp%0#0" @@ -25,12 +25,12 @@ "tmp%0#0" ] }, - "107": { + "97": { "op": "bnz main_after_if_else@2", "stack_out": [] }, - "110": { - "op": "bytec_1 // \"admin\"", + "100": { + "op": "bytec 4 // \"admin\"", "defined_out": [ "\"admin\"" ], @@ -38,7 +38,7 @@ "\"admin\"" ] }, - "111": { + "102": { "op": "txn Sender", "defined_out": [ "\"admin\"", @@ -49,11 +49,11 @@ "new_state_value%0#0" ] }, - "113": { + "104": { "op": "app_global_put", "stack_out": [] }, - "114": { + "105": { "block": "main_after_if_else@2", "stack_in": [], "op": "txn NumAppArgs", @@ -64,20 +64,34 @@ "tmp%0#2" ] }, - "116": { - "op": "bz main_bare_routing@15", + "107": { + "op": "bz main_bare_routing@29", "stack_out": [] }, - "119": { - "op": "pushbytess 0x8f0d7d8e 0x7c1b32f6 0x17e691ae 0x33d0ffdc 0xfac1cf1b 0xb4c50b9f 0xa2dd2247 0xa37dea11 0x68f18efa 0xc2ed743f // method \"change_admin(account)void\", method \"add_label(string,string)void\", method \"remove_label(string)void\", method \"get_label(string)(string,uint64,uint64)\", method \"add_operator_to_label(account,string)void\", method \"remove_operator_from_label(account,string)void\", method \"get_operator_labels(account)string[]\", method \"add_label_to_asset(string,asset)void\", method \"remove_label_from_asset(string,asset)void\", method \"get_asset_labels(asset)string[]\"", + "110": { + "op": "pushbytess 0x8f0d7d8e 0x7c1b32f6 0x17e691ae 0x33d0ffdc 0x725616e7 0xfac1cf1b 0xb4c50b9f 0xa2dd2247 0xa37dea11 0x68f18efa 0xc2ed743f 0xa67f03c2 0xaaee0c61 0xb6c39f68 0x635be362 0x7093b10d 0xe1bb95fc 0x5540b80a 0x8a412f93 0x6f17cdd5 0x7a4ce4b9 0x366c51af 0xd5d3bad3 0x03ba98db // method \"change_admin(account)void\", method \"add_label(string,string)void\", method \"remove_label(string)void\", method \"get_label(string)(string,uint64,uint64)\", method \"log_labels(string[])void\", method \"add_operator_to_label(account,string)void\", method \"remove_operator_from_label(account,string)void\", method \"get_operator_labels(account)string[]\", method \"add_label_to_asset(string,asset)void\", method \"remove_label_from_asset(string,asset)void\", method \"get_asset_labels(asset)string[]\", method \"get_assets_labels(uint64[])string[][]\", method \"get_asset_micro(uint64)(string,uint8)\", method \"get_assets_micro(uint64[])void\", method \"get_asset_micro_labels(uint64)(string,uint8,string[])\", method \"get_assets_micro_labels(uint64[])void\", method \"get_asset_text(uint64)(string,string,string,string[])\", method \"get_assets_text(uint64[])void\", method \"get_asset_text_labels(uint64)(string,string,string)\", method \"get_assets_text_labels(uint64[])void\", method \"get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])\", method \"get_assets_small(uint64[])void\", method \"get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])\", method \"get_assets_full(uint64[])void\"", "defined_out": [ "Method(add_label(string,string)void)", "Method(add_label_to_asset(string,asset)void)", "Method(add_operator_to_label(account,string)void)", "Method(change_admin(account)void)", + "Method(get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]))", "Method(get_asset_labels(asset)string[])", + "Method(get_asset_micro(uint64)(string,uint8))", + "Method(get_asset_micro_labels(uint64)(string,uint8,string[]))", + "Method(get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]))", + "Method(get_asset_text(uint64)(string,string,string,string[]))", + "Method(get_asset_text_labels(uint64)(string,string,string))", + "Method(get_assets_full(uint64[])void)", + "Method(get_assets_labels(uint64[])string[][])", + "Method(get_assets_micro(uint64[])void)", + "Method(get_assets_micro_labels(uint64[])void)", + "Method(get_assets_small(uint64[])void)", + "Method(get_assets_text(uint64[])void)", + "Method(get_assets_text_labels(uint64[])void)", "Method(get_label(string)(string,uint64,uint64))", "Method(get_operator_labels(account)string[])", + "Method(log_labels(string[])void)", "Method(remove_label(string)void)", "Method(remove_label_from_asset(string,asset)void)", "Method(remove_operator_from_label(account,string)void)" @@ -87,24 +101,52 @@ "Method(add_label(string,string)void)", "Method(remove_label(string)void)", "Method(get_label(string)(string,uint64,uint64))", + "Method(log_labels(string[])void)", "Method(add_operator_to_label(account,string)void)", "Method(remove_operator_from_label(account,string)void)", "Method(get_operator_labels(account)string[])", "Method(add_label_to_asset(string,asset)void)", "Method(remove_label_from_asset(string,asset)void)", - "Method(get_asset_labels(asset)string[])" - ] - }, - "171": { + "Method(get_asset_labels(asset)string[])", + "Method(get_assets_labels(uint64[])string[][])", + "Method(get_asset_micro(uint64)(string,uint8))", + "Method(get_assets_micro(uint64[])void)", + "Method(get_asset_micro_labels(uint64)(string,uint8,string[]))", + "Method(get_assets_micro_labels(uint64[])void)", + "Method(get_asset_text(uint64)(string,string,string,string[]))", + "Method(get_assets_text(uint64[])void)", + "Method(get_asset_text_labels(uint64)(string,string,string))", + "Method(get_assets_text_labels(uint64[])void)", + "Method(get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]))", + "Method(get_assets_small(uint64[])void)", + "Method(get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]))", + "Method(get_assets_full(uint64[])void)" + ] + }, + "232": { "op": "txna ApplicationArgs 0", "defined_out": [ "Method(add_label(string,string)void)", "Method(add_label_to_asset(string,asset)void)", "Method(add_operator_to_label(account,string)void)", "Method(change_admin(account)void)", + "Method(get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]))", "Method(get_asset_labels(asset)string[])", + "Method(get_asset_micro(uint64)(string,uint8))", + "Method(get_asset_micro_labels(uint64)(string,uint8,string[]))", + "Method(get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]))", + "Method(get_asset_text(uint64)(string,string,string,string[]))", + "Method(get_asset_text_labels(uint64)(string,string,string))", + "Method(get_assets_full(uint64[])void)", + "Method(get_assets_labels(uint64[])string[][])", + "Method(get_assets_micro(uint64[])void)", + "Method(get_assets_micro_labels(uint64[])void)", + "Method(get_assets_small(uint64[])void)", + "Method(get_assets_text(uint64[])void)", + "Method(get_assets_text_labels(uint64[])void)", "Method(get_label(string)(string,uint64,uint64))", "Method(get_operator_labels(account)string[])", + "Method(log_labels(string[])void)", "Method(remove_label(string)void)", "Method(remove_label_from_asset(string,asset)void)", "Method(remove_operator_from_label(account,string)void)", @@ -115,21 +157,35 @@ "Method(add_label(string,string)void)", "Method(remove_label(string)void)", "Method(get_label(string)(string,uint64,uint64))", + "Method(log_labels(string[])void)", "Method(add_operator_to_label(account,string)void)", "Method(remove_operator_from_label(account,string)void)", "Method(get_operator_labels(account)string[])", "Method(add_label_to_asset(string,asset)void)", "Method(remove_label_from_asset(string,asset)void)", "Method(get_asset_labels(asset)string[])", + "Method(get_assets_labels(uint64[])string[][])", + "Method(get_asset_micro(uint64)(string,uint8))", + "Method(get_assets_micro(uint64[])void)", + "Method(get_asset_micro_labels(uint64)(string,uint8,string[]))", + "Method(get_assets_micro_labels(uint64[])void)", + "Method(get_asset_text(uint64)(string,string,string,string[]))", + "Method(get_assets_text(uint64[])void)", + "Method(get_asset_text_labels(uint64)(string,string,string))", + "Method(get_assets_text_labels(uint64[])void)", + "Method(get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]))", + "Method(get_assets_small(uint64[])void)", + "Method(get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]))", + "Method(get_assets_full(uint64[])void)", "tmp%2#0" ] }, - "174": { - "op": "match main_change_admin_route@5 main_add_label_route@6 main_remove_label_route@7 main_get_label_route@8 main_add_operator_to_label_route@9 main_remove_operator_from_label_route@10 main_get_operator_labels_route@11 main_add_label_to_asset_route@12 main_remove_label_from_asset_route@13 main_get_asset_labels_route@14", + "235": { + "op": "match main_change_admin_route@5 main_add_label_route@6 main_remove_label_route@7 main_get_label_route@8 main_log_labels_route@9 main_add_operator_to_label_route@10 main_remove_operator_from_label_route@11 main_get_operator_labels_route@12 main_add_label_to_asset_route@13 main_remove_label_from_asset_route@14 main_get_asset_labels_route@15 main_get_assets_labels_route@16 main_get_asset_micro_route@17 main_get_assets_micro_route@18 main_get_asset_micro_labels_route@19 main_get_assets_micro_labels_route@20 main_get_asset_text_route@21 main_get_assets_text_route@22 main_get_asset_text_labels_route@23 main_get_assets_text_labels_route@24 main_get_asset_small_route@25 main_get_assets_small_route@26 main_get_asset_full_route@27 main_get_assets_full_route@28", "stack_out": [] }, - "196": { - "block": "main_after_if_else@17", + "285": { + "block": "main_after_if_else@33", "stack_in": [], "op": "intc_1 // 0", "defined_out": [ @@ -139,118 +195,64 @@ "tmp%0#0" ] }, - "197": { + "286": { "op": "return", "stack_out": [] }, - "198": { - "block": "main_get_asset_labels_route@14", + "287": { + "block": "main_get_assets_full_route@28", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%71#0" + "tmp%158#0" ], "stack_out": [ - "tmp%71#0" + "tmp%158#0" ] }, - "200": { + "289": { "op": "!", "defined_out": [ - "tmp%72#0" + "tmp%159#0" ], "stack_out": [ - "tmp%72#0" + "tmp%159#0" ] }, - "201": { + "290": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "202": { + "291": { "op": "txn ApplicationID", "defined_out": [ - "tmp%73#0" + "tmp%160#0" ], "stack_out": [ - "tmp%73#0" + "tmp%160#0" ] }, - "204": { + "293": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "205": { + "294": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[1]%6#0" - ], - "stack_out": [ - "reinterpret_bytes[1]%6#0" - ] - }, - "208": { - "op": "btoi", - "defined_out": [ - "tmp%75#0" - ], - "stack_out": [ - "tmp%75#0" - ] - }, - "209": { - "op": "txnas Assets", - "defined_out": [ - "tmp%76#0" - ], - "stack_out": [ - "tmp%76#0" - ] - }, - "211": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_labels", - "op": "callsub get_asset_labels", - "defined_out": [ - "tmp%77#0" - ], - "stack_out": [ - "tmp%77#0" - ] - }, - "214": { - "op": "bytec_3 // 0x151f7c75", - "defined_out": [ - "0x151f7c75", - "tmp%77#0" - ], - "stack_out": [ - "tmp%77#0", - "0x151f7c75" - ] - }, - "215": { - "op": "swap", - "stack_out": [ - "0x151f7c75", - "tmp%77#0" - ] - }, - "216": { - "op": "concat", - "defined_out": [ - "tmp%78#0" + "tmp%162#0" ], "stack_out": [ - "tmp%78#0" + "tmp%162#0" ] }, - "217": { - "op": "log", + "297": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_full", + "op": "callsub get_assets_full", "stack_out": [] }, - "218": { + "300": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -259,106 +261,109 @@ "tmp%0#0" ] }, - "219": { + "301": { "op": "return", "stack_out": [] }, - "220": { - "block": "main_remove_label_from_asset_route@13", + "302": { + "block": "main_get_asset_full_route@27", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%63#0" + "tmp%151#0" ], "stack_out": [ - "tmp%63#0" + "tmp%151#0" ] }, - "222": { + "304": { "op": "!", "defined_out": [ - "tmp%64#0" + "tmp%152#0" ], "stack_out": [ - "tmp%64#0" + "tmp%152#0" ] }, - "223": { + "305": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "224": { + "306": { "op": "txn ApplicationID", "defined_out": [ - "tmp%65#0" + "tmp%153#0" ], "stack_out": [ - "tmp%65#0" + "tmp%153#0" ] }, - "226": { + "308": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "227": { + "309": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%67#0" + "reinterpret_bytes[8]%5#0" ], "stack_out": [ - "tmp%67#0" + "reinterpret_bytes[8]%5#0" ] }, - "230": { - "op": "extract 2 0", + "312": { + "op": "btoi", "defined_out": [ - "tmp%68#0" + "tmp%155#0" ], "stack_out": [ - "tmp%68#0" + "tmp%155#0" ] }, - "233": { - "op": "txna ApplicationArgs 2", + "313": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_full", + "op": "callsub get_asset_full", "defined_out": [ - "reinterpret_bytes[1]%5#0", - "tmp%68#0" + "tmp%156#0" ], "stack_out": [ - "tmp%68#0", - "reinterpret_bytes[1]%5#0" + "tmp%156#0" ] }, - "236": { - "op": "btoi", + "316": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "tmp%68#0", - "tmp%69#0" + "0x151f7c75", + "tmp%156#0" ], "stack_out": [ - "tmp%68#0", - "tmp%69#0" + "tmp%156#0", + "0x151f7c75" ] }, - "237": { - "op": "txnas Assets", + "317": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "tmp%156#0" + ] + }, + "318": { + "op": "concat", "defined_out": [ - "tmp%68#0", - "tmp%70#0" + "tmp%157#0" ], "stack_out": [ - "tmp%68#0", - "tmp%70#0" + "tmp%157#0" ] }, - "239": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_label_from_asset", - "op": "callsub remove_label_from_asset", + "319": { + "op": "log", "stack_out": [] }, - "242": { + "320": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -367,106 +372,64 @@ "tmp%0#0" ] }, - "243": { + "321": { "op": "return", "stack_out": [] }, - "244": { - "block": "main_add_label_to_asset_route@12", + "322": { + "block": "main_get_assets_small_route@26", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%55#0" + "tmp%146#0" ], "stack_out": [ - "tmp%55#0" + "tmp%146#0" ] }, - "246": { + "324": { "op": "!", "defined_out": [ - "tmp%56#0" + "tmp%147#0" ], "stack_out": [ - "tmp%56#0" + "tmp%147#0" ] }, - "247": { + "325": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "248": { + "326": { "op": "txn ApplicationID", "defined_out": [ - "tmp%57#0" + "tmp%148#0" ], "stack_out": [ - "tmp%57#0" + "tmp%148#0" ] }, - "250": { + "328": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "251": { + "329": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%59#0" - ], - "stack_out": [ - "tmp%59#0" - ] - }, - "254": { - "op": "extract 2 0", - "defined_out": [ - "tmp%60#0" - ], - "stack_out": [ - "tmp%60#0" - ] - }, - "257": { - "op": "txna ApplicationArgs 2", - "defined_out": [ - "reinterpret_bytes[1]%4#0", - "tmp%60#0" - ], - "stack_out": [ - "tmp%60#0", - "reinterpret_bytes[1]%4#0" - ] - }, - "260": { - "op": "btoi", - "defined_out": [ - "tmp%60#0", - "tmp%61#0" - ], - "stack_out": [ - "tmp%60#0", - "tmp%61#0" - ] - }, - "261": { - "op": "txnas Assets", - "defined_out": [ - "tmp%60#0", - "tmp%62#0" + "tmp%150#0" ], "stack_out": [ - "tmp%60#0", - "tmp%62#0" + "tmp%150#0" ] }, - "263": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.add_label_to_asset", - "op": "callsub add_label_to_asset", + "332": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_small", + "op": "callsub get_assets_small", "stack_out": [] }, - "266": { + "335": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -475,118 +438,109 @@ "tmp%0#0" ] }, - "267": { + "336": { "op": "return", "stack_out": [] }, - "268": { - "block": "main_get_operator_labels_route@11", + "337": { + "block": "main_get_asset_small_route@25", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%47#0" + "tmp%139#0" ], "stack_out": [ - "tmp%47#0" + "tmp%139#0" ] }, - "270": { + "339": { "op": "!", "defined_out": [ - "tmp%48#0" + "tmp%140#0" ], "stack_out": [ - "tmp%48#0" + "tmp%140#0" ] }, - "271": { + "340": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "272": { + "341": { "op": "txn ApplicationID", "defined_out": [ - "tmp%49#0" + "tmp%141#0" ], "stack_out": [ - "tmp%49#0" + "tmp%141#0" ] }, - "274": { + "343": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "275": { + "344": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[1]%3#0" + "reinterpret_bytes[8]%4#0" ], "stack_out": [ - "reinterpret_bytes[1]%3#0" + "reinterpret_bytes[8]%4#0" ] }, - "278": { + "347": { "op": "btoi", "defined_out": [ - "tmp%51#0" - ], - "stack_out": [ - "tmp%51#0" - ] - }, - "279": { - "op": "txnas Accounts", - "defined_out": [ - "tmp%52#0" + "tmp%143#0" ], "stack_out": [ - "tmp%52#0" + "tmp%143#0" ] }, - "281": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_labels", - "op": "callsub get_operator_labels", + "348": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_small", + "op": "callsub get_asset_small", "defined_out": [ - "tmp%53#0" + "tmp%144#0" ], "stack_out": [ - "tmp%53#0" + "tmp%144#0" ] }, - "284": { - "op": "bytec_3 // 0x151f7c75", + "351": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "tmp%53#0" + "tmp%144#0" ], "stack_out": [ - "tmp%53#0", + "tmp%144#0", "0x151f7c75" ] }, - "285": { + "352": { "op": "swap", "stack_out": [ "0x151f7c75", - "tmp%53#0" + "tmp%144#0" ] }, - "286": { + "353": { "op": "concat", "defined_out": [ - "tmp%54#0" + "tmp%145#0" ], "stack_out": [ - "tmp%54#0" + "tmp%145#0" ] }, - "287": { + "354": { "op": "log", "stack_out": [] }, - "288": { + "355": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -595,210 +549,241 @@ "tmp%0#0" ] }, - "289": { + "356": { "op": "return", "stack_out": [] }, - "290": { - "block": "main_remove_operator_from_label_route@10", + "357": { + "block": "main_get_assets_text_labels_route@24", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%39#0" + "tmp%134#0" ], "stack_out": [ - "tmp%39#0" + "tmp%134#0" ] }, - "292": { + "359": { "op": "!", "defined_out": [ - "tmp%40#0" + "tmp%135#0" ], "stack_out": [ - "tmp%40#0" + "tmp%135#0" ] }, - "293": { + "360": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "294": { + "361": { "op": "txn ApplicationID", "defined_out": [ - "tmp%41#0" + "tmp%136#0" ], "stack_out": [ - "tmp%41#0" + "tmp%136#0" ] }, - "296": { + "363": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "297": { + "364": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[1]%2#0" + "tmp%138#0" ], "stack_out": [ - "reinterpret_bytes[1]%2#0" + "tmp%138#0" ] }, - "300": { - "op": "btoi", + "367": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_text_labels", + "op": "callsub get_assets_text_labels", + "stack_out": [] + }, + "370": { + "op": "intc_0 // 1", "defined_out": [ - "tmp%43#0" + "tmp%0#0" ], "stack_out": [ - "tmp%43#0" + "tmp%0#0" ] }, - "301": { - "op": "txnas Accounts", + "371": { + "op": "return", + "stack_out": [] + }, + "372": { + "block": "main_get_asset_text_labels_route@23", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "tmp%44#0" + "tmp%127#0" ], "stack_out": [ - "tmp%44#0" + "tmp%127#0" ] }, - "303": { - "op": "txna ApplicationArgs 2", + "374": { + "op": "!", "defined_out": [ - "tmp%44#0", - "tmp%45#0" + "tmp%128#0" ], "stack_out": [ - "tmp%44#0", - "tmp%45#0" + "tmp%128#0" ] }, - "306": { - "op": "extract 2 0", + "375": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "376": { + "op": "txn ApplicationID", "defined_out": [ - "tmp%44#0", - "tmp%46#0" + "tmp%129#0" ], "stack_out": [ - "tmp%44#0", - "tmp%46#0" + "tmp%129#0" ] }, - "309": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_operator_from_label", - "op": "callsub remove_operator_from_label", + "378": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", "stack_out": [] }, - "312": { - "op": "intc_0 // 1", + "379": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%0#0" + "reinterpret_bytes[8]%3#0" ], "stack_out": [ - "tmp%0#0" + "reinterpret_bytes[8]%3#0" ] }, - "313": { - "op": "return", - "stack_out": [] + "382": { + "op": "btoi", + "defined_out": [ + "tmp%131#0" + ], + "stack_out": [ + "tmp%131#0" + ] }, - "314": { - "block": "main_add_operator_to_label_route@9", - "stack_in": [], - "op": "txn OnCompletion", + "383": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_text_labels", + "op": "callsub get_asset_text_labels", "defined_out": [ - "tmp%31#0" + "tmp%132#0" ], "stack_out": [ - "tmp%31#0" + "tmp%132#0" ] }, - "316": { - "op": "!", + "386": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "tmp%32#0" + "0x151f7c75", + "tmp%132#0" ], "stack_out": [ - "tmp%32#0" + "tmp%132#0", + "0x151f7c75" ] }, - "317": { - "error": "OnCompletion is not NoOp", - "op": "assert // OnCompletion is not NoOp", - "stack_out": [] + "387": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "tmp%132#0" + ] }, - "318": { - "op": "txn ApplicationID", + "388": { + "op": "concat", "defined_out": [ - "tmp%33#0" + "tmp%133#0" ], "stack_out": [ - "tmp%33#0" + "tmp%133#0" ] }, - "320": { - "error": "can only call when not creating", - "op": "assert // can only call when not creating", + "389": { + "op": "log", "stack_out": [] }, - "321": { - "op": "txna ApplicationArgs 1", + "390": { + "op": "intc_0 // 1", "defined_out": [ - "reinterpret_bytes[1]%1#0" + "tmp%0#0" ], "stack_out": [ - "reinterpret_bytes[1]%1#0" + "tmp%0#0" ] }, - "324": { - "op": "btoi", + "391": { + "op": "return", + "stack_out": [] + }, + "392": { + "block": "main_get_assets_text_route@22", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "tmp%35#0" + "tmp%122#0" ], "stack_out": [ - "tmp%35#0" + "tmp%122#0" ] }, - "325": { - "op": "txnas Accounts", + "394": { + "op": "!", "defined_out": [ - "tmp%36#0" + "tmp%123#0" ], "stack_out": [ - "tmp%36#0" + "tmp%123#0" ] }, - "327": { - "op": "txna ApplicationArgs 2", + "395": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "396": { + "op": "txn ApplicationID", "defined_out": [ - "tmp%36#0", - "tmp%37#0" + "tmp%124#0" ], "stack_out": [ - "tmp%36#0", - "tmp%37#0" + "tmp%124#0" ] }, - "330": { - "op": "extract 2 0", + "398": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "399": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%36#0", - "tmp%38#0" + "tmp%126#0" ], "stack_out": [ - "tmp%36#0", - "tmp%38#0" + "tmp%126#0" ] }, - "333": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.add_operator_to_label", - "op": "callsub add_operator_to_label", + "402": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_text", + "op": "callsub get_assets_text", "stack_out": [] }, - "336": { + "405": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -807,109 +792,109 @@ "tmp%0#0" ] }, - "337": { + "406": { "op": "return", "stack_out": [] }, - "338": { - "block": "main_get_label_route@8", + "407": { + "block": "main_get_asset_text_route@21", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%23#0" + "tmp%115#0" ], "stack_out": [ - "tmp%23#0" + "tmp%115#0" ] }, - "340": { + "409": { "op": "!", "defined_out": [ - "tmp%24#0" + "tmp%116#0" ], "stack_out": [ - "tmp%24#0" + "tmp%116#0" ] }, - "341": { + "410": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "342": { + "411": { "op": "txn ApplicationID", "defined_out": [ - "tmp%25#0" + "tmp%117#0" ], "stack_out": [ - "tmp%25#0" + "tmp%117#0" ] }, - "344": { + "413": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "345": { + "414": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%27#0" + "reinterpret_bytes[8]%2#0" ], "stack_out": [ - "tmp%27#0" + "reinterpret_bytes[8]%2#0" ] }, - "348": { - "op": "extract 2 0", + "417": { + "op": "btoi", "defined_out": [ - "tmp%28#0" + "tmp%119#0" ], "stack_out": [ - "tmp%28#0" + "tmp%119#0" ] }, - "351": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_label", - "op": "callsub get_label", + "418": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_text", + "op": "callsub get_asset_text", "defined_out": [ - "tmp%29#0" + "tmp%120#0" ], "stack_out": [ - "tmp%29#0" + "tmp%120#0" ] }, - "354": { - "op": "bytec_3 // 0x151f7c75", + "421": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "tmp%29#0" + "tmp%120#0" ], "stack_out": [ - "tmp%29#0", + "tmp%120#0", "0x151f7c75" ] }, - "355": { + "422": { "op": "swap", "stack_out": [ "0x151f7c75", - "tmp%29#0" + "tmp%120#0" ] }, - "356": { + "423": { "op": "concat", "defined_out": [ - "tmp%30#0" + "tmp%121#0" ], "stack_out": [ - "tmp%30#0" + "tmp%121#0" ] }, - "357": { + "424": { "op": "log", "stack_out": [] }, - "358": { + "425": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -918,73 +903,64 @@ "tmp%0#0" ] }, - "359": { + "426": { "op": "return", "stack_out": [] }, - "360": { - "block": "main_remove_label_route@7", + "427": { + "block": "main_get_assets_micro_labels_route@20", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%17#0" + "tmp%110#0" ], "stack_out": [ - "tmp%17#0" + "tmp%110#0" ] }, - "362": { + "429": { "op": "!", "defined_out": [ - "tmp%18#0" + "tmp%111#0" ], "stack_out": [ - "tmp%18#0" + "tmp%111#0" ] }, - "363": { + "430": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "364": { + "431": { "op": "txn ApplicationID", "defined_out": [ - "tmp%19#0" + "tmp%112#0" ], "stack_out": [ - "tmp%19#0" + "tmp%112#0" ] }, - "366": { + "433": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "367": { + "434": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%21#0" - ], - "stack_out": [ - "tmp%21#0" - ] - }, - "370": { - "op": "extract 2 0", - "defined_out": [ - "tmp%22#0" + "tmp%114#0" ], "stack_out": [ - "tmp%22#0" + "tmp%114#0" ] }, - "373": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_label", - "op": "callsub remove_label", + "437": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_micro_labels", + "op": "callsub get_assets_micro_labels", "stack_out": [] }, - "376": { + "440": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -993,95 +969,109 @@ "tmp%0#0" ] }, - "377": { + "441": { "op": "return", "stack_out": [] }, - "378": { - "block": "main_add_label_route@6", + "442": { + "block": "main_get_asset_micro_labels_route@19", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%9#0" + "tmp%103#0" ], "stack_out": [ - "tmp%9#0" + "tmp%103#0" ] }, - "380": { + "444": { "op": "!", "defined_out": [ - "tmp%10#0" + "tmp%104#0" ], "stack_out": [ - "tmp%10#0" + "tmp%104#0" ] }, - "381": { + "445": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "382": { + "446": { "op": "txn ApplicationID", "defined_out": [ - "tmp%11#0" + "tmp%105#0" ], "stack_out": [ - "tmp%11#0" + "tmp%105#0" ] }, - "384": { + "448": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "385": { + "449": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%13#0" + "reinterpret_bytes[8]%1#0" ], "stack_out": [ - "tmp%13#0" + "reinterpret_bytes[8]%1#0" ] }, - "388": { - "op": "extract 2 0", + "452": { + "op": "btoi", "defined_out": [ - "tmp%14#0" + "tmp%107#0" ], "stack_out": [ - "tmp%14#0" + "tmp%107#0" ] }, - "391": { - "op": "txna ApplicationArgs 2", + "453": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_micro_labels", + "op": "callsub get_asset_micro_labels", "defined_out": [ - "tmp%14#0", - "tmp%15#0" + "tmp%108#0" ], "stack_out": [ - "tmp%14#0", - "tmp%15#0" + "tmp%108#0" ] }, - "394": { - "op": "extract 2 0", + "456": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "tmp%14#0", - "tmp%16#0" + "0x151f7c75", + "tmp%108#0" ], "stack_out": [ - "tmp%14#0", - "tmp%16#0" + "tmp%108#0", + "0x151f7c75" ] }, - "397": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.add_label", - "op": "callsub add_label", + "457": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "tmp%108#0" + ] + }, + "458": { + "op": "concat", + "defined_out": [ + "tmp%109#0" + ], + "stack_out": [ + "tmp%109#0" + ] + }, + "459": { + "op": "log", "stack_out": [] }, - "400": { + "460": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -1090,82 +1080,64 @@ "tmp%0#0" ] }, - "401": { + "461": { "op": "return", "stack_out": [] }, - "402": { - "block": "main_change_admin_route@5", + "462": { + "block": "main_get_assets_micro_route@18", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%3#0" + "tmp%98#0" ], "stack_out": [ - "tmp%3#0" + "tmp%98#0" ] }, - "404": { + "464": { "op": "!", "defined_out": [ - "tmp%4#0" + "tmp%99#0" ], "stack_out": [ - "tmp%4#0" + "tmp%99#0" ] }, - "405": { + "465": { "error": "OnCompletion is not NoOp", "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "406": { + "466": { "op": "txn ApplicationID", "defined_out": [ - "tmp%5#0" + "tmp%100#0" ], "stack_out": [ - "tmp%5#0" + "tmp%100#0" ] }, - "408": { + "468": { "error": "can only call when not creating", "op": "assert // can only call when not creating", "stack_out": [] }, - "409": { + "469": { "op": "txna ApplicationArgs 1", "defined_out": [ - "reinterpret_bytes[1]%0#0" - ], - "stack_out": [ - "reinterpret_bytes[1]%0#0" - ] - }, - "412": { - "op": "btoi", - "defined_out": [ - "tmp%7#0" - ], - "stack_out": [ - "tmp%7#0" - ] - }, - "413": { - "op": "txnas Accounts", - "defined_out": [ - "tmp%8#0" + "tmp%102#0" ], "stack_out": [ - "tmp%8#0" + "tmp%102#0" ] }, - "415": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.change_admin", - "op": "callsub change_admin", + "472": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_micro", + "op": "callsub get_assets_micro", "stack_out": [] }, - "418": { + "475": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -1174,49 +1146,109 @@ "tmp%0#0" ] }, - "419": { + "476": { "op": "return", "stack_out": [] }, - "420": { - "block": "main_bare_routing@15", + "477": { + "block": "main_get_asset_micro_route@17", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%79#0" + "tmp%91#0" ], "stack_out": [ - "tmp%79#0" + "tmp%91#0" ] }, - "422": { - "op": "bnz main_after_if_else@17", - "stack_out": [] - }, - "425": { - "op": "txn ApplicationID", + "479": { + "op": "!", "defined_out": [ - "tmp%80#0" + "tmp%92#0" ], "stack_out": [ - "tmp%80#0" + "tmp%92#0" ] }, - "427": { - "op": "!", - "defined_out": [ - "tmp%81#0" + "480": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "481": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%93#0" ], "stack_out": [ - "tmp%81#0" + "tmp%93#0" ] }, - "428": { - "error": "can only call when creating", - "op": "assert // can only call when creating", + "483": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", "stack_out": [] }, - "429": { + "484": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[8]%0#0" + ], + "stack_out": [ + "reinterpret_bytes[8]%0#0" + ] + }, + "487": { + "op": "btoi", + "defined_out": [ + "tmp%95#0" + ], + "stack_out": [ + "tmp%95#0" + ] + }, + "488": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_micro", + "op": "callsub get_asset_micro", + "defined_out": [ + "tmp%96#0" + ], + "stack_out": [ + "tmp%96#0" + ] + }, + "491": { + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "tmp%96#0" + ], + "stack_out": [ + "tmp%96#0", + "0x151f7c75" + ] + }, + "492": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "tmp%96#0" + ] + }, + "493": { + "op": "concat", + "defined_out": [ + "tmp%97#0" + ], + "stack_out": [ + "tmp%97#0" + ] + }, + "494": { + "op": "log", + "stack_out": [] + }, + "495": { "op": "intc_0 // 1", "defined_out": [ "tmp%0#0" @@ -1225,9862 +1257,23793 @@ "tmp%0#0" ] }, - "430": { + "496": { "op": "return", "stack_out": [] }, - "431": { - "subroutine": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", - "params": { - "array#0": "bytes", - "new_items_bytes#0": "bytes", - "new_items_count#0": "uint64" - }, - "block": "dynamic_array_concat_byte_length_head", + "497": { + "block": "main_get_assets_labels_route@16", "stack_in": [], - "op": "proto 3 1" - }, - "434": { - "op": "frame_dig -3", + "op": "txn OnCompletion", "defined_out": [ - "array#0 (copy)" + "tmp%84#0" ], "stack_out": [ - "array#0 (copy)" + "tmp%84#0" ] }, - "436": { - "op": "intc_1 // 0", + "499": { + "op": "!", "defined_out": [ - "0", - "array#0 (copy)" + "tmp%85#0" ], "stack_out": [ - "array#0 (copy)", - "0" + "tmp%85#0" ] }, - "437": { - "op": "extract_uint16", + "500": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "501": { + "op": "txn ApplicationID", "defined_out": [ - "array_length#0" + "tmp%86#0" ], "stack_out": [ - "array_length#0" + "tmp%86#0" ] }, - "438": { - "op": "dup", + "503": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "504": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "array_length#0", - "array_length#0 (copy)" + "tmp%88#0" ], "stack_out": [ - "array_length#0", - "array_length#0 (copy)" + "tmp%88#0" ] }, - "439": { - "op": "frame_dig -1", + "507": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_labels", + "op": "callsub get_assets_labels", "defined_out": [ - "array_length#0", - "array_length#0 (copy)", - "new_items_count#0 (copy)" + "tmp%89#0" ], "stack_out": [ - "array_length#0", - "array_length#0 (copy)", - "new_items_count#0 (copy)" + "tmp%89#0" ] }, - "441": { - "op": "+", + "510": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "array_length#0", - "new_length#0" + "0x151f7c75", + "tmp%89#0" ], "stack_out": [ - "array_length#0", - "new_length#0" + "tmp%89#0", + "0x151f7c75" ] }, - "442": { + "511": { "op": "swap", "stack_out": [ - "new_length#0", - "array_length#0" + "0x151f7c75", + "tmp%89#0" ] }, - "443": { - "op": "intc_2 // 2", + "512": { + "op": "concat", "defined_out": [ - "2", - "array_length#0", - "new_length#0" + "tmp%90#0" ], "stack_out": [ - "new_length#0", - "array_length#0", - "2" + "tmp%90#0" ] }, - "444": { - "op": "*", + "513": { + "op": "log", + "stack_out": [] + }, + "514": { + "op": "intc_0 // 1", "defined_out": [ - "new_length#0", "tmp%0#0" ], "stack_out": [ - "new_length#0", "tmp%0#0" ] }, - "445": { - "op": "intc_2 // 2", - "stack_out": [ - "new_length#0", - "tmp%0#0", - "2" - ] + "515": { + "op": "return", + "stack_out": [] }, - "446": { - "op": "+", + "516": { + "block": "main_get_asset_labels_route@15", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "header_end#0", - "new_length#0" + "tmp%76#0" ], "stack_out": [ - "new_length#0", - "header_end#0" + "tmp%76#0" ] }, - "447": { - "op": "dig 1", + "518": { + "op": "!", "defined_out": [ - "header_end#0", - "new_length#0", - "new_length#0 (copy)" + "tmp%77#0" ], "stack_out": [ - "new_length#0", - "header_end#0", - "new_length#0 (copy)" + "tmp%77#0" ] }, - "449": { - "op": "itob", + "519": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "520": { + "op": "txn ApplicationID", "defined_out": [ - "header_end#0", - "new_length#0", - "tmp%1#0" + "tmp%78#0" ], "stack_out": [ - "new_length#0", - "header_end#0", - "tmp%1#0" + "tmp%78#0" ] }, - "450": { - "op": "extract 6 2", + "522": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "523": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "header_end#0", - "new_length#0", - "tmp%2#0" + "reinterpret_bytes[1]%6#0" ], "stack_out": [ - "new_length#0", - "header_end#0", - "tmp%2#0" + "reinterpret_bytes[1]%6#0" ] }, - "453": { - "op": "cover 2", + "526": { + "op": "btoi", "defined_out": [ - "header_end#0", - "new_length#0", - "tmp%2#0" + "tmp%80#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0" + "tmp%80#0" ] }, - "455": { - "op": "frame_dig -3", + "527": { + "op": "txnas Assets", + "defined_out": [ + "tmp%81#0" + ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "array#0 (copy)" + "tmp%81#0" ] }, - "457": { - "op": "intc_2 // 2", + "529": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_labels", + "op": "callsub get_asset_labels", + "defined_out": [ + "tmp%82#0" + ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "array#0 (copy)", - "2" + "tmp%82#0" ] }, - "458": { - "op": "dig 2", + "532": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "2", - "array#0 (copy)", - "header_end#0", - "header_end#0 (copy)", - "new_length#0", - "tmp%2#0" + "0x151f7c75", + "tmp%82#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "array#0 (copy)", - "2", - "header_end#0 (copy)" + "tmp%82#0", + "0x151f7c75" ] }, - "460": { - "op": "substring3", - "defined_out": [ - "header_end#0", - "new_length#0", - "tmp%2#0", - "tmp%3#0" - ], + "533": { + "op": "swap", "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "tmp%3#0" + "0x151f7c75", + "tmp%82#0" ] }, - "461": { - "op": "frame_dig -1", + "534": { + "op": "concat", + "defined_out": [ + "tmp%83#0" + ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "tmp%3#0", - "new_items_count#0 (copy)" + "tmp%83#0" ] }, - "463": { - "op": "intc_2 // 2", - "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "tmp%3#0", - "new_items_count#0 (copy)", - "2" - ] + "535": { + "op": "log", + "stack_out": [] }, - "464": { - "op": "*", + "536": { + "op": "intc_0 // 1", "defined_out": [ - "header_end#0", - "new_length#0", - "tmp%2#0", - "tmp%3#0", - "tmp%4#0" + "tmp%0#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "tmp%3#0", - "tmp%4#0" + "tmp%0#0" ] }, - "465": { - "op": "bzero", + "537": { + "op": "return", + "stack_out": [] + }, + "538": { + "block": "main_remove_label_from_asset_route@14", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "header_end#0", - "new_length#0", - "tmp%2#0", - "tmp%3#0", - "tmp%5#0" + "tmp%68#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "tmp%3#0", - "tmp%5#0" + "tmp%68#0" ] }, - "466": { - "op": "concat", + "540": { + "op": "!", "defined_out": [ - "header_end#0", - "new_length#0", - "tmp%2#0", - "tmp%6#0" + "tmp%69#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "tmp%6#0" + "tmp%69#0" ] }, - "467": { - "op": "frame_dig -3", - "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "tmp%6#0", - "array#0 (copy)" - ] + "541": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] }, - "469": { - "op": "len", + "542": { + "op": "txn ApplicationID", "defined_out": [ - "header_end#0", - "new_length#0", - "tmp%2#0", - "tmp%6#0", - "tmp%7#0" + "tmp%70#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "tmp%6#0", - "tmp%7#0" + "tmp%70#0" ] }, - "470": { - "op": "frame_dig -3", + "544": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "545": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%72#0" + ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "header_end#0", - "tmp%6#0", - "tmp%7#0", - "array#0 (copy)" + "tmp%72#0" ] }, - "472": { - "op": "uncover 3", + "548": { + "op": "extract 2 0", + "defined_out": [ + "tmp%73#0" + ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "tmp%6#0", - "tmp%7#0", - "array#0 (copy)", - "header_end#0" + "tmp%73#0" ] }, - "474": { - "op": "uncover 2", + "551": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "reinterpret_bytes[1]%5#0", + "tmp%73#0" + ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "tmp%6#0", - "array#0 (copy)", - "header_end#0", - "tmp%7#0" + "tmp%73#0", + "reinterpret_bytes[1]%5#0" ] }, - "476": { - "op": "substring3", + "554": { + "op": "btoi", "defined_out": [ - "new_length#0", - "tmp%2#0", - "tmp%6#0", - "tmp%8#0" + "tmp%73#0", + "tmp%74#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "tmp%6#0", - "tmp%8#0" + "tmp%73#0", + "tmp%74#0" ] }, - "477": { - "op": "concat", + "555": { + "op": "txnas Assets", "defined_out": [ - "new_length#0", - "tmp%2#0", - "tmp%9#0" + "tmp%73#0", + "tmp%75#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "tmp%9#0" + "tmp%73#0", + "tmp%75#0" ] }, - "478": { - "op": "frame_dig -2", + "557": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_label_from_asset", + "op": "callsub remove_label_from_asset", + "stack_out": [] + }, + "560": { + "op": "intc_0 // 1", "defined_out": [ - "new_items_bytes#0 (copy)", - "new_length#0", - "tmp%2#0", - "tmp%9#0" + "tmp%0#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "tmp%9#0", - "new_items_bytes#0 (copy)" + "tmp%0#0" ] }, - "480": { - "op": "concat", + "561": { + "op": "return", + "stack_out": [] + }, + "562": { + "block": "main_add_label_to_asset_route@13", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "array_head_and_tail#0", - "new_length#0", - "tmp%2#0" + "tmp%60#0" ], "stack_out": [ - "tmp%2#0", - "new_length#0", - "array_head_and_tail#0" + "tmp%60#0" ] }, - "481": { - "op": "swap", + "564": { + "op": "!", "defined_out": [ - "array_head_and_tail#0", - "new_length#0", - "tmp%2#0" + "tmp%61#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "new_length#0" + "tmp%61#0" ] }, - "482": { - "op": "intc_2 // 2", + "565": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "566": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%62#0" + ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "new_length#0", - "2" + "tmp%62#0" ] }, - "483": { - "op": "*", + "568": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "569": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "array_head_and_tail#0", - "tail_offset#0", - "tmp%2#0" + "tmp%64#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0" + "tmp%64#0" ] }, - "484": { - "op": "dup", + "572": { + "op": "extract 2 0", "defined_out": [ - "array_head_and_tail#0", - "tail_offset#0", - "tmp%2#0" + "tmp%65#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "tail_offset#0" + "tmp%65#0" ] }, - "485": { - "op": "intc_1 // 0", + "575": { + "op": "txna ApplicationArgs 2", "defined_out": [ - "array_head_and_tail#0", - "head_offset#0", - "tail_offset#0", - "tmp%2#0" + "reinterpret_bytes[1]%4#0", + "tmp%65#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "tail_offset#0", - "head_offset#0" + "tmp%65#0", + "reinterpret_bytes[1]%4#0" ] }, - "486": { - "op": "swap", + "578": { + "op": "btoi", "defined_out": [ - "array_head_and_tail#0", - "head_offset#0", - "tail_offset#0", - "tail_offset#1", - "tmp%2#0" + "tmp%65#0", + "tmp%66#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1" + "tmp%65#0", + "tmp%66#0" ] }, - "487": { - "block": "dynamic_array_concat_byte_length_head_for_header@2", - "stack_in": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1" + "579": { + "op": "txnas Assets", + "defined_out": [ + "tmp%65#0", + "tmp%67#0" ], - "op": "frame_dig 3", + "stack_out": [ + "tmp%65#0", + "tmp%67#0" + ] + }, + "581": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.add_label_to_asset", + "op": "callsub add_label_to_asset", + "stack_out": [] + }, + "584": { + "op": "intc_0 // 1", "defined_out": [ - "head_offset#0" + "tmp%0#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0" + "tmp%0#0" ] }, - "489": { - "op": "frame_dig 2", + "585": { + "op": "return", + "stack_out": [] + }, + "586": { + "block": "main_get_operator_labels_route@12", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "head_offset#0", - "tail_offset#0" + "tmp%52#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#0" + "tmp%52#0" ] }, - "491": { - "op": "<", + "588": { + "op": "!", "defined_out": [ - "continue_looping%0#0", - "head_offset#0", - "tail_offset#0" + "tmp%53#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "continue_looping%0#0" + "tmp%53#0" ] }, - "492": { - "op": "bz dynamic_array_concat_byte_length_head_after_for@5", + "589": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "590": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%54#0" + ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1" + "tmp%54#0" ] }, - "495": { - "op": "frame_dig 4", + "592": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "593": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "head_offset#0", - "tail_offset#0", - "tail_offset#1" + "reinterpret_bytes[1]%3#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tail_offset#1" + "reinterpret_bytes[1]%3#0" ] }, - "497": { - "op": "dup", + "596": { + "op": "btoi", "defined_out": [ - "head_offset#0", - "tail_offset#0", - "tail_offset#1", - "tail_offset#1 (copy)" + "tmp%56#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tail_offset#1", - "tail_offset#1 (copy)" + "tmp%56#0" ] }, - "498": { - "op": "itob", + "597": { + "op": "txnas Accounts", "defined_out": [ - "head_offset#0", - "tail_offset#0", - "tail_offset#1", - "tmp%5#0" + "tmp%57#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tail_offset#1", - "tmp%5#0" + "tmp%57#0" ] }, - "499": { - "op": "extract 6 2", + "599": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_labels", + "op": "callsub get_operator_labels", "defined_out": [ - "head_offset#0", - "tail_offset#0", - "tail_offset#1", - "tail_offset_bytes#0" + "tmp%58#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tail_offset#1", - "tail_offset_bytes#0" + "tmp%58#0" ] }, - "502": { - "op": "frame_dig 1", + "602": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "array_head_and_tail#0", - "head_offset#0", - "tail_offset#0", - "tail_offset#1", - "tail_offset_bytes#0" + "0x151f7c75", + "tmp%58#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tail_offset#1", - "tail_offset_bytes#0", - "array_head_and_tail#0" + "tmp%58#0", + "0x151f7c75" ] }, - "504": { - "op": "frame_dig 3", + "603": { + "op": "swap", "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tail_offset#1", - "tail_offset_bytes#0", - "array_head_and_tail#0", - "head_offset#0" + "0x151f7c75", + "tmp%58#0" ] }, - "506": { - "op": "dup", + "604": { + "op": "concat", "defined_out": [ - "array_head_and_tail#0", - "head_offset#0", - "head_offset#0 (copy)", - "tail_offset#0", - "tail_offset#1", - "tail_offset_bytes#0" + "tmp%59#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tail_offset#1", - "tail_offset_bytes#0", - "array_head_and_tail#0", - "head_offset#0 (copy)", - "head_offset#0 (copy)" + "tmp%59#0" ] }, - "507": { - "op": "cover 4", + "605": { + "op": "log", + "stack_out": [] + }, + "606": { + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1", - "tail_offset_bytes#0", - "array_head_and_tail#0", - "head_offset#0 (copy)" + "tmp%0#0" ] }, - "509": { - "op": "uncover 2", - "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1", - "array_head_and_tail#0", - "head_offset#0 (copy)", - "tail_offset_bytes#0" - ] + "607": { + "op": "return", + "stack_out": [] }, - "511": { - "op": "replace3", + "608": { + "block": "main_remove_operator_from_label_route@11", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%44#0" + ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1", - "array_head_and_tail#0" + "tmp%44#0" ] }, - "512": { - "op": "dup", + "610": { + "op": "!", + "defined_out": [ + "tmp%45#0" + ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1", - "array_head_and_tail#0", - "array_head_and_tail#0" + "tmp%45#0" ] }, - "513": { - "op": "frame_bury 1", + "611": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "612": { + "op": "txn ApplicationID", "defined_out": [ - "array_head_and_tail#0", - "head_offset#0", - "tail_offset#0", - "tail_offset#1" + "tmp%46#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1", - "array_head_and_tail#0" + "tmp%46#0" ] }, - "515": { - "op": "dig 1", - "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1", - "array_head_and_tail#0", - "tail_offset#1 (copy)" - ] + "614": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] }, - "517": { - "op": "extract_uint16", + "615": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "array_head_and_tail#0", - "head_offset#0", - "tail_offset#0", - "tail_offset#1", - "tmp%6#1" + "reinterpret_bytes[1]%2#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1", - "tmp%6#1" + "reinterpret_bytes[1]%2#0" ] }, - "518": { - "op": "intc_2 // 2", + "618": { + "op": "btoi", "defined_out": [ - "2", - "array_head_and_tail#0", - "head_offset#0", - "tail_offset#0", - "tail_offset#1", - "tmp%6#1" + "tmp%48#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1", - "tmp%6#1", - "2" + "tmp%48#0" ] }, - "519": { - "op": "+", + "619": { + "op": "txnas Accounts", "defined_out": [ - "array_head_and_tail#0", - "head_offset#0", - "tail_offset#0", - "tail_offset#1", - "tmp%7#0" + "tmp%49#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1", - "tmp%7#0" + "tmp%49#0" ] }, - "520": { - "op": "+", + "621": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "tmp%49#0", + "tmp%50#0" + ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "tail_offset#1" + "tmp%49#0", + "tmp%50#0" ] }, - "521": { - "op": "frame_bury 4", + "624": { + "op": "extract 2 0", "defined_out": [ - "array_head_and_tail#0", - "head_offset#0", - "tail_offset#0", - "tail_offset#1" + "tmp%49#0", + "tmp%51#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0" + "tmp%49#0", + "tmp%51#0" ] }, - "523": { - "op": "intc_2 // 2", + "627": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_operator_from_label", + "op": "callsub remove_operator_from_label", + "stack_out": [] + }, + "630": { + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0", - "2" + "tmp%0#0" ] }, - "524": { - "op": "+", + "631": { + "op": "return", + "stack_out": [] + }, + "632": { + "block": "main_add_operator_to_label_route@10", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%36#0" + ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "head_offset#0" + "tmp%36#0" ] }, - "525": { - "op": "frame_bury 3", + "634": { + "op": "!", + "defined_out": [ + "tmp%37#0" + ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1" + "tmp%37#0" ] }, - "527": { - "op": "b dynamic_array_concat_byte_length_head_for_header@2" + "635": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] }, - "530": { - "block": "dynamic_array_concat_byte_length_head_after_for@5", - "stack_in": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1" - ], - "op": "frame_dig 0", + "636": { + "op": "txn ApplicationID", "defined_out": [ - "tmp%2#0" + "tmp%38#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tmp%2#0" + "tmp%38#0" ] }, - "532": { - "op": "frame_dig 1", + "638": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "639": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "array_head_and_tail#0", - "tmp%2#0" + "reinterpret_bytes[1]%1#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tmp%2#0", - "array_head_and_tail#0" + "reinterpret_bytes[1]%1#0" ] }, - "534": { - "op": "concat", + "642": { + "op": "btoi", "defined_out": [ - "array_head_and_tail#0", - "tmp%12#0", - "tmp%2#0" + "tmp%40#0" ], "stack_out": [ - "tmp%2#0", - "array_head_and_tail#0", - "tail_offset#0", - "head_offset#0", - "tail_offset#1", - "tmp%12#0" + "tmp%40#0" ] }, - "535": { - "op": "frame_bury 0" - }, - "537": { - "retsub": true, - "op": "retsub" - }, - "538": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", - "params": {}, - "block": "admin_only", - "stack_in": [], - "op": "txn Sender", + "643": { + "op": "txnas Accounts", "defined_out": [ - "tmp%0#0" + "tmp%41#0" ], "stack_out": [ - "tmp%0#0" + "tmp%41#0" ] }, - "540": { - "op": "intc_1 // 0", + "645": { + "op": "txna ApplicationArgs 2", "defined_out": [ - "0", - "tmp%0#0" + "tmp%41#0", + "tmp%42#0" ], "stack_out": [ - "tmp%0#0", - "0" + "tmp%41#0", + "tmp%42#0" ] }, - "541": { - "op": "bytec_1 // \"admin\"", + "648": { + "op": "extract 2 0", "defined_out": [ - "\"admin\"", - "0", - "tmp%0#0" + "tmp%41#0", + "tmp%43#0" ], "stack_out": [ - "tmp%0#0", - "0", - "\"admin\"" + "tmp%41#0", + "tmp%43#0" ] }, - "542": { - "op": "app_global_get_ex", + "651": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.add_operator_to_label", + "op": "callsub add_operator_to_label", + "stack_out": [] + }, + "654": { + "op": "intc_0 // 1", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0", "tmp%0#0" ], "stack_out": [ - "tmp%0#0", - "maybe_value%0#0", - "maybe_exists%0#0" + "tmp%0#0" ] }, - "543": { - "error": "check self.admin exists", - "op": "assert // check self.admin exists", + "655": { + "op": "return", + "stack_out": [] + }, + "656": { + "block": "main_log_labels_route@9", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%31#0" + ], "stack_out": [ - "tmp%0#0", - "maybe_value%0#0" + "tmp%31#0" ] }, - "544": { - "op": "==", + "658": { + "op": "!", "defined_out": [ - "cond#0" + "tmp%32#0" ], "stack_out": [ - "cond#0" + "tmp%32#0" ] }, - "545": { - "op": "bnz admin_only_after_if_else@3", + "659": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "548": { - "op": "bytec 5 // \"ERR:UNAUTH\"", + "660": { + "op": "txn ApplicationID", "defined_out": [ - "\"ERR:UNAUTH\"" + "tmp%33#0" ], "stack_out": [ - "\"ERR:UNAUTH\"" + "tmp%33#0" ] }, - "550": { - "op": "log", + "662": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", "stack_out": [] }, - "551": { - "op": "err" - }, - "552": { - "block": "admin_only_after_if_else@3", - "stack_in": [], - "retsub": true, - "op": "retsub" - }, - "553": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.change_admin", - "params": { - "new_admin#0": "bytes" - }, - "block": "change_admin", - "stack_in": [], - "op": "proto 1 0" - }, - "556": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", - "op": "callsub admin_only" - }, - "559": { - "op": "bytec_1 // \"admin\"", + "663": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "\"admin\"" + "tmp%35#0" ], "stack_out": [ - "\"admin\"" + "tmp%35#0" ] }, - "560": { - "op": "frame_dig -1", + "666": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.log_labels", + "op": "callsub log_labels", + "stack_out": [] + }, + "669": { + "op": "intc_0 // 1", "defined_out": [ - "\"admin\"", - "new_admin#0 (copy)" + "tmp%0#0" ], "stack_out": [ - "\"admin\"", - "new_admin#0 (copy)" + "tmp%0#0" ] }, - "562": { - "op": "app_global_put", + "670": { + "op": "return", "stack_out": [] }, - "563": { - "retsub": true, - "op": "retsub" - }, - "564": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.add_label", - "params": { - "id#0": "bytes", - "name#0": "bytes" - }, - "block": "add_label", + "671": { + "block": "main_get_label_route@8", "stack_in": [], - "op": "proto 2 0" - }, - "567": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", - "op": "callsub admin_only" - }, - "570": { - "op": "frame_dig -2", + "op": "txn OnCompletion", "defined_out": [ - "id#0 (copy)" + "tmp%23#0" ], "stack_out": [ - "id#0 (copy)" + "tmp%23#0" ] }, - "572": { - "op": "box_len", + "673": { + "op": "!", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" + "tmp%24#0" ], "stack_out": [ - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "573": { - "op": "bury 1", - "stack_out": [ - "maybe_exists%0#0" + "tmp%24#0" ] }, - "575": { - "op": "bz add_label_after_if_else@3", + "674": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", "stack_out": [] }, - "578": { - "op": "bytec 4 // \"ERR:EXISTS\"", + "675": { + "op": "txn ApplicationID", "defined_out": [ - "\"ERR:EXISTS\"" + "tmp%25#0" ], "stack_out": [ - "\"ERR:EXISTS\"" + "tmp%25#0" ] }, - "580": { - "op": "log", + "677": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", "stack_out": [] }, - "581": { - "op": "err" - }, - "582": { - "block": "add_label_after_if_else@3", - "stack_in": [], - "op": "frame_dig -2", + "678": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "id#0 (copy)" + "tmp%27#0" ], "stack_out": [ - "id#0 (copy)" + "tmp%27#0" ] }, - "584": { - "op": "len", + "681": { + "op": "extract 2 0", "defined_out": [ - "tmp%2#0" + "tmp%28#0" ], "stack_out": [ - "tmp%2#0" + "tmp%28#0" ] }, - "585": { - "op": "intc_2 // 2", + "684": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_label", + "op": "callsub get_label", "defined_out": [ - "2", - "tmp%2#0" + "tmp%29#0" ], "stack_out": [ - "tmp%2#0", - "2" + "tmp%29#0" ] }, - "586": { - "op": "==", + "687": { + "op": "bytec_0 // 0x151f7c75", "defined_out": [ - "cond#1" + "0x151f7c75", + "tmp%29#0" ], "stack_out": [ - "cond#1" + "tmp%29#0", + "0x151f7c75" ] }, - "587": { - "op": "bnz add_label_after_if_else@7", - "stack_out": [] + "688": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "tmp%29#0" + ] }, - "590": { - "op": "bytec 6 // \"ERR:LENGTH\"", + "689": { + "op": "concat", "defined_out": [ - "\"ERR:LENGTH\"" + "tmp%30#0" ], "stack_out": [ - "\"ERR:LENGTH\"" + "tmp%30#0" ] }, - "592": { + "690": { "op": "log", "stack_out": [] }, - "593": { - "op": "err" - }, - "594": { - "block": "add_label_after_if_else@7", - "stack_in": [], - "op": "frame_dig -1", + "691": { + "op": "intc_0 // 1", "defined_out": [ - "name#0 (copy)" + "tmp%0#0" ], "stack_out": [ - "name#0 (copy)" + "tmp%0#0" ] }, - "596": { - "op": "len", + "692": { + "op": "return", + "stack_out": [] + }, + "693": { + "block": "main_remove_label_route@7", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "length%0#0" + "tmp%17#0" ], "stack_out": [ - "length%0#0" + "tmp%17#0" ] }, - "597": { - "op": "itob", + "695": { + "op": "!", "defined_out": [ - "as_bytes%0#0" + "tmp%18#0" ], "stack_out": [ - "as_bytes%0#0" + "tmp%18#0" ] }, - "598": { - "op": "extract 6 2", + "696": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "697": { + "op": "txn ApplicationID", "defined_out": [ - "length_uint16%0#0" + "tmp%19#0" ], "stack_out": [ - "length_uint16%0#0" + "tmp%19#0" ] }, - "601": { - "op": "frame_dig -1", - "stack_out": [ - "length_uint16%0#0", - "name#0 (copy)" - ] + "699": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] }, - "603": { - "op": "concat", + "700": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "encoded_value%0#0" + "tmp%21#0" ], "stack_out": [ - "encoded_value%0#0" + "tmp%21#0" ] }, - "604": { - "op": "pushbytes 0x001200000000000000000000000000000000", + "703": { + "op": "extract 2 0", "defined_out": [ - "0x001200000000000000000000000000000000", - "encoded_value%0#0" + "tmp%22#0" ], "stack_out": [ - "encoded_value%0#0", - "0x001200000000000000000000000000000000" + "tmp%22#0" ] }, - "624": { - "op": "swap", - "stack_out": [ - "0x001200000000000000000000000000000000", - "encoded_value%0#0" - ] + "706": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_label", + "op": "callsub remove_label", + "stack_out": [] }, - "625": { - "op": "concat", + "709": { + "op": "intc_0 // 1", "defined_out": [ - "encoded_tuple_buffer%4#0" + "tmp%0#0" ], "stack_out": [ - "encoded_tuple_buffer%4#0" + "tmp%0#0" ] }, - "626": { - "op": "frame_dig -2", + "710": { + "op": "return", + "stack_out": [] + }, + "711": { + "block": "main_add_label_route@6", + "stack_in": [], + "op": "txn OnCompletion", "defined_out": [ - "encoded_tuple_buffer%4#0", - "id#0 (copy)" + "tmp%9#0" ], "stack_out": [ - "encoded_tuple_buffer%4#0", - "id#0 (copy)" + "tmp%9#0" ] }, - "628": { - "op": "box_del", + "713": { + "op": "!", "defined_out": [ - "encoded_tuple_buffer%4#0", - "{box_del}" + "tmp%10#0" ], "stack_out": [ - "encoded_tuple_buffer%4#0", - "{box_del}" - ] - }, - "629": { - "op": "pop", - "stack_out": [ - "encoded_tuple_buffer%4#0" + "tmp%10#0" ] }, - "630": { - "op": "frame_dig -2", - "stack_out": [ - "encoded_tuple_buffer%4#0", - "id#0 (copy)" - ] + "714": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] }, - "632": { - "op": "swap", + "715": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%11#0" + ], "stack_out": [ - "id#0 (copy)", - "encoded_tuple_buffer%4#0" + "tmp%11#0" ] }, - "633": { - "op": "box_put", + "717": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", "stack_out": [] }, - "634": { - "retsub": true, - "op": "retsub" - }, - "635": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_label", - "params": { - "id#0": "bytes" - }, - "block": "remove_label", - "stack_in": [], - "op": "proto 1 0" - }, - "638": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", - "op": "callsub admin_only" + "718": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%13#0" + ], + "stack_out": [ + "tmp%13#0" + ] }, - "641": { - "op": "frame_dig -1", + "721": { + "op": "extract 2 0", "defined_out": [ - "id#0 (copy)" + "tmp%14#0" ], "stack_out": [ - "id#0 (copy)" + "tmp%14#0" ] }, - "643": { - "op": "box_len", + "724": { + "op": "txna ApplicationArgs 2", "defined_out": [ - "cond#0", - "maybe_value%0#0" + "tmp%14#0", + "tmp%15#0" ], "stack_out": [ - "maybe_value%0#0", - "cond#0" + "tmp%14#0", + "tmp%15#0" ] }, - "644": { - "op": "bury 1", + "727": { + "op": "extract 2 0", + "defined_out": [ + "tmp%14#0", + "tmp%16#0" + ], "stack_out": [ - "cond#0" + "tmp%14#0", + "tmp%16#0" ] }, - "646": { - "op": "bnz remove_label_after_if_else@3", + "730": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.add_label", + "op": "callsub add_label", "stack_out": [] }, - "649": { - "op": "bytec_0 // \"ERR:NOEXIST\"", + "733": { + "op": "intc_0 // 1", "defined_out": [ - "\"ERR:NOEXIST\"" + "tmp%0#0" ], "stack_out": [ - "\"ERR:NOEXIST\"" + "tmp%0#0" ] }, - "650": { - "op": "log", + "734": { + "op": "return", "stack_out": [] }, - "651": { - "op": "err" - }, - "652": { - "block": "remove_label_after_if_else@3", + "735": { + "block": "main_change_admin_route@5", "stack_in": [], - "op": "frame_dig -1", + "op": "txn OnCompletion", "defined_out": [ - "id#0 (copy)" + "tmp%3#0" ], "stack_out": [ - "id#0 (copy)" + "tmp%3#0" ] }, - "654": { - "op": "len", + "737": { + "op": "!", "defined_out": [ - "tmp%1#0" + "tmp%4#0" ], "stack_out": [ - "tmp%1#0" + "tmp%4#0" ] }, - "655": { - "op": "intc_2 // 2", + "738": { + "error": "OnCompletion is not NoOp", + "op": "assert // OnCompletion is not NoOp", + "stack_out": [] + }, + "739": { + "op": "txn ApplicationID", "defined_out": [ - "2", - "tmp%1#0" + "tmp%5#0" ], "stack_out": [ - "tmp%1#0", - "2" + "tmp%5#0" ] }, - "656": { - "op": "==", + "741": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "742": { + "op": "txna ApplicationArgs 1", "defined_out": [ - "cond#0" + "reinterpret_bytes[1]%0#0" ], "stack_out": [ - "cond#0" + "reinterpret_bytes[1]%0#0" ] }, - "657": { - "op": "bnz remove_label_after_if_else@7", - "stack_out": [] - }, - "660": { - "op": "bytec 6 // \"ERR:LENGTH\"", + "745": { + "op": "btoi", "defined_out": [ - "\"ERR:LENGTH\"" + "tmp%7#0" ], "stack_out": [ - "\"ERR:LENGTH\"" + "tmp%7#0" ] }, - "662": { - "op": "log", - "stack_out": [] - }, - "663": { - "op": "err" - }, - "664": { - "block": "remove_label_after_if_else@7", - "stack_in": [], - "op": "frame_dig -1", + "746": { + "op": "txnas Accounts", "defined_out": [ - "id#0 (copy)" + "tmp%8#0" ], "stack_out": [ - "id#0 (copy)" + "tmp%8#0" ] }, - "666": { - "op": "box_get", + "748": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.change_admin", + "op": "callsub change_admin", + "stack_out": [] + }, + "751": { + "op": "intc_0 // 1", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#0" + "tmp%0#0" ], "stack_out": [ - "maybe_value%1#0", - "maybe_exists%1#0" + "tmp%0#0" ] }, - "667": { - "error": "check self.labels entry exists", - "op": "assert // check self.labels entry exists", + "752": { + "op": "return", + "stack_out": [] + }, + "753": { + "block": "main_bare_routing@29", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%163#0" + ], "stack_out": [ - "maybe_value%1#0" + "tmp%163#0" ] }, - "668": { - "error": "Index access is out of bounds", - "op": "extract 2 8 // on error: Index access is out of bounds", + "755": { + "op": "switch main___algopy_default_create@32 main_after_if_else@33 main_after_if_else@33 main_after_if_else@33 main_update@30 main_delete@31", + "stack_out": [] + }, + "769": { + "op": "b main_after_if_else@33" + }, + "772": { + "block": "main_delete@31", + "stack_in": [], + "op": "txn ApplicationID", "defined_out": [ - "reinterpret_biguint%0#0" + "tmp%166#0" ], "stack_out": [ - "reinterpret_biguint%0#0" + "tmp%166#0" ] }, - "671": { - "op": "bytec 7 // 0x0000000000000000", + "774": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", + "stack_out": [] + }, + "775": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.delete", + "op": "callsub delete" + }, + "778": { + "op": "intc_0 // 1", "defined_out": [ - "0x0000000000000000", - "reinterpret_biguint%0#0" + "tmp%0#0" ], "stack_out": [ - "reinterpret_biguint%0#0", - "0x0000000000000000" + "tmp%0#0" ] }, - "673": { - "op": "b==", + "779": { + "op": "return", + "stack_out": [] + }, + "780": { + "block": "main_update@30", + "stack_in": [], + "op": "txn ApplicationID", "defined_out": [ - "cond#0" + "tmp%164#0" ], "stack_out": [ - "cond#0" + "tmp%164#0" ] }, - "674": { - "op": "bnz remove_label_after_if_else@11", + "782": { + "error": "can only call when not creating", + "op": "assert // can only call when not creating", "stack_out": [] }, - "677": { - "op": "bytec 8 // \"ERR:NOEMPTY\"", + "783": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.update", + "op": "callsub update" + }, + "786": { + "op": "intc_0 // 1", "defined_out": [ - "\"ERR:NOEMPTY\"" + "tmp%0#0" ], "stack_out": [ - "\"ERR:NOEMPTY\"" + "tmp%0#0" ] }, - "679": { - "op": "log", + "787": { + "op": "return", "stack_out": [] }, - "680": { - "op": "err" - }, - "681": { - "block": "remove_label_after_if_else@11", + "788": { + "block": "main___algopy_default_create@32", "stack_in": [], - "op": "frame_dig -1", + "op": "txn ApplicationID", "defined_out": [ - "id#0 (copy)" + "tmp%168#0" ], "stack_out": [ - "id#0 (copy)" + "tmp%168#0" ] }, - "683": { - "op": "box_del", + "790": { + "op": "!", "defined_out": [ - "{box_del}" + "tmp%169#0" ], "stack_out": [ - "{box_del}" + "tmp%169#0" ] }, - "684": { - "op": "pop", + "791": { + "error": "can only call when creating", + "op": "assert // can only call when creating", "stack_out": [] }, - "685": { - "retsub": true, - "op": "retsub" + "792": { + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, - "686": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_label", + "793": { + "op": "return", + "stack_out": [] + }, + "794": { + "subroutine": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", "params": { - "id#0": "bytes" + "array#0": "bytes", + "new_items_bytes#0": "bytes", + "new_items_count#0": "uint64" }, - "block": "get_label", + "block": "dynamic_array_concat_byte_length_head", "stack_in": [], - "op": "proto 1 1" + "op": "proto 3 1" }, - "689": { - "op": "frame_dig -1", + "797": { + "op": "frame_dig -3", "defined_out": [ - "id#0 (copy)" + "array#0 (copy)" ], "stack_out": [ - "id#0 (copy)" + "array#0 (copy)" ] }, - "691": { - "op": "box_len", + "799": { + "op": "intc_1 // 0", "defined_out": [ - "cond#0", - "maybe_value%0#0" + "0", + "array#0 (copy)" ], "stack_out": [ - "maybe_value%0#0", - "cond#0" + "array#0 (copy)", + "0" ] }, - "692": { - "op": "bury 1", + "800": { + "op": "extract_uint16", + "defined_out": [ + "array_length#0" + ], "stack_out": [ - "cond#0" + "array_length#0" ] }, - "694": { - "op": "bnz get_label_after_if_else@3", - "stack_out": [] - }, - "697": { - "op": "bytec_0 // \"ERR:NOEXIST\"", + "801": { + "op": "dup", "defined_out": [ - "\"ERR:NOEXIST\"" + "array_length#0", + "array_length#0 (copy)" ], "stack_out": [ - "\"ERR:NOEXIST\"" + "array_length#0", + "array_length#0 (copy)" ] }, - "698": { - "op": "log", - "stack_out": [] - }, - "699": { - "op": "err" - }, - "700": { - "block": "get_label_after_if_else@3", - "stack_in": [], + "802": { "op": "frame_dig -1", "defined_out": [ - "id#0 (copy)" + "array_length#0", + "array_length#0 (copy)", + "new_items_count#0 (copy)" ], "stack_out": [ - "id#0 (copy)" + "array_length#0", + "array_length#0 (copy)", + "new_items_count#0 (copy)" ] }, - "702": { - "op": "box_get", + "804": { + "op": "+", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#0" + "array_length#0", + "new_length#0" ], "stack_out": [ - "maybe_value%1#0", - "maybe_exists%1#0" + "array_length#0", + "new_length#0" ] }, - "703": { - "error": "check self.labels entry exists", - "op": "assert // check self.labels entry exists", + "805": { + "op": "swap", "stack_out": [ - "maybe_value%1#0" + "new_length#0", + "array_length#0" ] }, - "704": { - "retsub": true, - "op": "retsub" - }, - "705": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_or_operator_only", - "params": { - "label#0": "bytes" - }, - "block": "admin_or_operator_only", - "stack_in": [], - "op": "proto 1 0" - }, - "708": { - "op": "txn Sender", + "806": { + "op": "intc_2 // 2", "defined_out": [ - "tmp%0#0" + "2", + "array_length#0", + "new_length#0" ], "stack_out": [ - "tmp%0#0" + "new_length#0", + "array_length#0", + "2" ] }, - "710": { - "op": "intc_1 // 0", + "807": { + "op": "*", "defined_out": [ - "0", + "new_length#0", "tmp%0#0" ], "stack_out": [ - "tmp%0#0", - "0" + "new_length#0", + "tmp%0#0" ] }, - "711": { - "op": "bytec_1 // \"admin\"", - "defined_out": [ - "\"admin\"", - "0", - "tmp%0#0" - ], + "808": { + "op": "intc_2 // 2", "stack_out": [ + "new_length#0", "tmp%0#0", - "0", - "\"admin\"" + "2" ] }, - "712": { - "op": "app_global_get_ex", + "809": { + "op": "+", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0", - "tmp%0#0" + "header_end#0", + "new_length#0" ], "stack_out": [ - "tmp%0#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "713": { - "error": "check self.admin exists", - "op": "assert // check self.admin exists", - "stack_out": [ - "tmp%0#0", - "maybe_value%0#0" + "new_length#0", + "header_end#0" ] }, - "714": { - "op": "==", + "810": { + "op": "dig 1", "defined_out": [ - "tmp%1#0" + "header_end#0", + "new_length#0", + "new_length#0 (copy)" ], "stack_out": [ - "tmp%1#0" + "new_length#0", + "header_end#0", + "new_length#0 (copy)" ] }, - "715": { - "op": "bz admin_or_operator_only_after_if_else@2", - "stack_out": [] - }, - "718": { - "retsub": true, - "op": "retsub" - }, - "719": { - "block": "admin_or_operator_only_after_if_else@2", - "stack_in": [], - "op": "frame_dig -1", + "812": { + "op": "itob", "defined_out": [ - "label#0 (copy)" + "header_end#0", + "new_length#0", + "tmp%1#0" ], "stack_out": [ - "label#0 (copy)" + "new_length#0", + "header_end#0", + "tmp%1#0" ] }, - "721": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.operator_only", - "op": "callsub operator_only", - "stack_out": [] - }, - "724": { - "retsub": true, - "op": "retsub" - }, - "725": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.operator_only", - "params": { - "label#0": "bytes" - }, - "block": "operator_only", - "stack_in": [], - "op": "proto 1 0" - }, - "728": { - "op": "txn Sender", + "813": { + "op": "extract 6 2", "defined_out": [ - "tmp%0#0" + "header_end#0", + "new_length#0", + "tmp%2#0" ], "stack_out": [ - "tmp%0#0" + "new_length#0", + "header_end#0", + "tmp%2#0" ] }, - "730": { - "op": "frame_dig -1", + "816": { + "op": "cover 2", "defined_out": [ - "label#0 (copy)", - "tmp%0#0" + "header_end#0", + "new_length#0", + "tmp%2#0" ], "stack_out": [ - "tmp%0#0", - "label#0 (copy)" + "tmp%2#0", + "new_length#0", + "header_end#0" ] }, - "732": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index", - "op": "callsub get_operator_label_index", - "defined_out": [ - "tmp%1#0" - ], + "818": { + "op": "frame_dig -3", "stack_out": [ - "tmp%1#0" + "tmp%2#0", + "new_length#0", + "header_end#0", + "array#0 (copy)" ] }, - "735": { - "op": "intc 4 // 4294967296", - "defined_out": [ - "4294967296", - "tmp%1#0" - ], + "820": { + "op": "intc_2 // 2", "stack_out": [ - "tmp%1#0", - "4294967296" + "tmp%2#0", + "new_length#0", + "header_end#0", + "array#0 (copy)", + "2" ] }, - "737": { - "op": "!=", + "821": { + "op": "dig 2", "defined_out": [ + "2", + "array#0 (copy)", + "header_end#0", + "header_end#0 (copy)", + "new_length#0", "tmp%2#0" ], "stack_out": [ - "tmp%2#0" + "tmp%2#0", + "new_length#0", + "header_end#0", + "array#0 (copy)", + "2", + "header_end#0 (copy)" ] }, - "738": { - "op": "bz operator_only_bool_false@3", - "stack_out": [] - }, - "741": { - "op": "txn Sender", + "823": { + "op": "substring3", "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%2#0", "tmp%3#0" ], "stack_out": [ + "tmp%2#0", + "new_length#0", + "header_end#0", "tmp%3#0" ] }, - "743": { + "824": { "op": "frame_dig -1", "stack_out": [ + "tmp%2#0", + "new_length#0", + "header_end#0", "tmp%3#0", - "label#0 (copy)" + "new_items_count#0 (copy)" ] }, - "745": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index", - "op": "callsub get_operator_label_index", - "defined_out": [ - "tmp%4#0" - ], + "826": { + "op": "intc_2 // 2", "stack_out": [ - "tmp%4#0" + "tmp%2#0", + "new_length#0", + "header_end#0", + "tmp%3#0", + "new_items_count#0 (copy)", + "2" ] }, - "748": { - "op": "intc_3 // 4294967295", + "827": { + "op": "*", "defined_out": [ - "4294967295", + "header_end#0", + "new_length#0", + "tmp%2#0", + "tmp%3#0", "tmp%4#0" ], "stack_out": [ - "tmp%4#0", - "4294967295" + "tmp%2#0", + "new_length#0", + "header_end#0", + "tmp%3#0", + "tmp%4#0" ] }, - "749": { - "op": "!=", + "828": { + "op": "bzero", "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%2#0", + "tmp%3#0", "tmp%5#0" ], "stack_out": [ + "tmp%2#0", + "new_length#0", + "header_end#0", + "tmp%3#0", "tmp%5#0" ] }, - "750": { - "op": "bz operator_only_bool_false@3", - "stack_out": [] - }, - "753": { - "op": "intc_0 // 1", + "829": { + "op": "concat", "defined_out": [ - "cond#0" + "header_end#0", + "new_length#0", + "tmp%2#0", + "tmp%6#0" ], "stack_out": [ - "cond#0" + "tmp%2#0", + "new_length#0", + "header_end#0", + "tmp%6#0" ] }, - "754": { - "block": "operator_only_bool_merge@4", - "stack_in": [ - "cond#0" - ], - "op": "bnz operator_only_after_if_else@7", - "defined_out": [], - "stack_out": [] - }, - "757": { - "op": "bytec 5 // \"ERR:UNAUTH\"", - "defined_out": [ - "\"ERR:UNAUTH\"" - ], + "830": { + "op": "frame_dig -3", "stack_out": [ - "\"ERR:UNAUTH\"" + "tmp%2#0", + "new_length#0", + "header_end#0", + "tmp%6#0", + "array#0 (copy)" ] }, - "759": { - "op": "log", - "stack_out": [] - }, - "760": { - "op": "err" - }, - "761": { - "block": "operator_only_after_if_else@7", - "stack_in": [], - "retsub": true, - "op": "retsub" - }, - "762": { - "block": "operator_only_bool_false@3", - "stack_in": [], - "op": "intc_1 // 0", + "832": { + "op": "len", "defined_out": [ - "cond#0" + "header_end#0", + "new_length#0", + "tmp%2#0", + "tmp%6#0", + "tmp%7#0" ], "stack_out": [ - "cond#0" + "tmp%2#0", + "new_length#0", + "header_end#0", + "tmp%6#0", + "tmp%7#0" ] }, - "763": { - "op": "b operator_only_bool_merge@4" - }, - "766": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index", - "params": { - "operator#0": "bytes", - "label#0": "bytes" - }, - "block": "get_operator_label_index", - "stack_in": [], - "op": "proto 2 1" - }, - "769": { - "op": "intc_1 // 0", - "stack_out": [ - "maybe_value%1#0" - ] - }, - "770": { - "op": "bytec_2 // \"\"", + "833": { + "op": "frame_dig -3", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0" + "tmp%2#0", + "new_length#0", + "header_end#0", + "tmp%6#0", + "tmp%7#0", + "array#0 (copy)" ] }, - "771": { - "op": "dup", + "835": { + "op": "uncover 3", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" + "tmp%2#0", + "new_length#0", + "tmp%6#0", + "tmp%7#0", + "array#0 (copy)", + "header_end#0" ] }, - "772": { - "op": "frame_dig -2", - "defined_out": [ - "operator#0 (copy)" - ], + "837": { + "op": "uncover 2", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "operator#0 (copy)" + "tmp%2#0", + "new_length#0", + "tmp%6#0", + "array#0 (copy)", + "header_end#0", + "tmp%7#0" ] }, - "774": { - "op": "box_len", + "839": { + "op": "substring3", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" + "new_length#0", + "tmp%2#0", + "tmp%6#0", + "tmp%8#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%0#0", - "maybe_exists%0#0" - ] - }, - "775": { - "op": "bury 1", - "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_exists%0#0" - ] - }, - "777": { - "op": "bnz get_operator_label_index_after_if_else@2", - "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" + "tmp%2#0", + "new_length#0", + "tmp%6#0", + "tmp%8#0" ] }, - "780": { - "op": "intc 4 // 4294967296", + "840": { + "op": "concat", "defined_out": [ - "4294967296" + "new_length#0", + "tmp%2#0", + "tmp%9#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "4294967296" + "tmp%2#0", + "new_length#0", + "tmp%9#0" ] }, - "782": { - "op": "frame_bury 0" - }, - "784": { - "retsub": true, - "op": "retsub" - }, - "785": { - "block": "get_operator_label_index_after_if_else@2", - "stack_in": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" - ], + "841": { "op": "frame_dig -2", "defined_out": [ - "operator#0 (copy)" + "new_items_bytes#0 (copy)", + "new_length#0", + "tmp%2#0", + "tmp%9#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "operator#0 (copy)" + "tmp%2#0", + "new_length#0", + "tmp%9#0", + "new_items_bytes#0 (copy)" ] }, - "787": { - "op": "box_get", + "843": { + "op": "concat", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#0" + "array_head_and_tail#0", + "new_length#0", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#0", - "maybe_exists%1#0" + "tmp%2#0", + "new_length#0", + "array_head_and_tail#0" ] }, - "788": { + "844": { "op": "swap", - "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_exists%1#0", - "maybe_value%1#0" - ] - }, - "789": { - "op": "dup", - "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_exists%1#0", - "maybe_value%1#0", - "maybe_value%1#0 (copy)" - ] - }, - "790": { - "op": "cover 2", - "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#0", - "maybe_exists%1#0", - "maybe_value%1#0" - ] - }, - "792": { - "op": "frame_bury 0", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#0" + "array_head_and_tail#0", + "new_length#0", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#0", - "maybe_exists%1#0" - ] - }, - "794": { - "error": "check self.operators entry exists", - "op": "assert // check self.operators entry exists", - "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#0" + "tmp%2#0", + "array_head_and_tail#0", + "new_length#0" ] }, - "795": { - "op": "intc_1 // 0", + "845": { + "op": "intc_2 // 2", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#0", - "0" + "tmp%2#0", + "array_head_and_tail#0", + "new_length#0", + "2" ] }, - "796": { - "op": "extract_uint16", + "846": { + "op": "*", "defined_out": [ - "array_length%0#0", - "maybe_value%1#0" + "array_head_and_tail#0", + "tail_offset#0", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_length%0#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0" ] }, - "797": { - "op": "frame_bury 1", + "847": { + "op": "dup", "defined_out": [ - "array_length%0#0", - "maybe_value%1#0" + "array_head_and_tail#0", + "tail_offset#0", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#0" ] }, - "799": { + "848": { "op": "intc_1 // 0", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#0" + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#0", + "head_offset#0" ] }, - "800": { - "op": "frame_bury 2", + "849": { + "op": "swap", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#0" + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1" ] }, - "802": { - "block": "get_operator_label_index_for_header@3", + "850": { + "block": "dynamic_array_concat_byte_length_head_for_header@2", "stack_in": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1" ], - "op": "frame_dig 2", + "op": "frame_dig 3", "defined_out": [ - "idx#0" + "head_offset#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0" ] }, - "804": { - "op": "frame_dig 1", + "852": { + "op": "frame_dig 2", "defined_out": [ - "array_length%0#0", - "idx#0" + "head_offset#0", + "tail_offset#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "idx#0", - "array_length%0#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#0" ] }, - "806": { + "854": { "op": "<", "defined_out": [ - "array_length%0#0", "continue_looping%0#0", - "idx#0" + "head_offset#0", + "tail_offset#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", "continue_looping%0#0" ] }, - "807": { - "op": "bz get_operator_label_index_after_for@8", + "855": { + "op": "bz dynamic_array_concat_byte_length_head_after_for@5", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1" ] }, - "810": { - "op": "frame_dig 0", + "858": { + "op": "frame_dig 4", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#0" + "head_offset#0", + "tail_offset#0", + "tail_offset#1" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tail_offset#1" ] }, - "812": { - "op": "extract 2 0", + "860": { + "op": "dup", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#0" + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tail_offset#1 (copy)" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0" - ] - }, - "815": { - "op": "frame_dig 2", - "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tail_offset#1", + "tail_offset#1 (copy)" ] }, - "817": { - "op": "intc_2 // 2", + "861": { + "op": "itob", "defined_out": [ - "2", - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#0" + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%5#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "idx#0", - "2" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tail_offset#1", + "tmp%5#0" ] }, - "818": { - "op": "*", + "862": { + "op": "extract 6 2", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_offset_offset%0#0", - "maybe_value%1#0" + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tail_offset_bytes#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset_offset%0#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tail_offset#1", + "tail_offset_bytes#0" ] }, - "819": { - "op": "dig 1", + "865": { + "op": "frame_dig 1", "defined_out": [ - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "array_length%0#0", - "idx#0", - "item_offset_offset%0#0", - "maybe_value%1#0" + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tail_offset_bytes#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset_offset%0#0", - "array_head_and_tail%0#0 (copy)" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tail_offset#1", + "tail_offset_bytes#0", + "array_head_and_tail#0" ] }, - "821": { - "op": "swap", + "867": { + "op": "frame_dig 3", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "item_offset_offset%0#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tail_offset#1", + "tail_offset_bytes#0", + "array_head_and_tail#0", + "head_offset#0" ] }, - "822": { - "op": "extract_uint16", + "869": { + "op": "dup", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_offset%0#0", - "maybe_value%1#0" + "array_head_and_tail#0", + "head_offset#0", + "head_offset#0 (copy)", + "tail_offset#0", + "tail_offset#1", + "tail_offset_bytes#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0" - ] - }, - "823": { - "op": "dup2", - "defined_out": [ - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "array_length%0#0", - "idx#0", - "item_offset%0#0", - "item_offset%0#0 (copy)", - "maybe_value%1#0" - ], + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tail_offset#1", + "tail_offset_bytes#0", + "array_head_and_tail#0", + "head_offset#0 (copy)", + "head_offset#0 (copy)" + ] + }, + "870": { + "op": "cover 4", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "array_head_and_tail%0#0 (copy)", - "item_offset%0#0 (copy)" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tail_offset_bytes#0", + "array_head_and_tail#0", + "head_offset#0 (copy)" ] }, - "824": { - "op": "extract_uint16", - "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_length%0#0", - "item_offset%0#0", - "maybe_value%1#0" - ], + "872": { + "op": "uncover 2", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_length%0#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0", + "head_offset#0 (copy)", + "tail_offset_bytes#0" ] }, - "825": { - "op": "intc_2 // 2", + "874": { + "op": "replace3", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_length%0#0", - "2" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0" ] }, - "826": { - "op": "+", - "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_head_tail_length%0#0", - "item_offset%0#0", - "maybe_value%1#0" - ], + "875": { + "op": "dup", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_head_tail_length%0#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0", + "array_head_and_tail#0" ] }, - "827": { - "op": "extract3", + "876": { + "op": "frame_bury 1", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#0", - "stored_label#0" + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "stored_label#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0" ] }, - "828": { - "op": "extract 2 0", + "878": { + "op": "dig 1", + "stack_out": [ + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0", + "tail_offset#1 (copy)" + ] + }, + "880": { + "op": "extract_uint16", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#0", - "tmp%2#0" + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%6#1" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "tmp%2#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tmp%6#1" ] }, - "831": { - "op": "frame_dig -1", + "881": { + "op": "intc_2 // 2", "defined_out": [ - "array_length%0#0", - "idx#0", - "label#0 (copy)", - "maybe_value%1#0", - "tmp%2#0" + "2", + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%6#1" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", "tmp%2#0", - "label#0 (copy)" + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tmp%6#1", + "2" ] }, - "833": { - "op": "==", + "882": { + "op": "+", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#0", - "tmp%3#0" + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%7#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "tmp%3#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tmp%7#0" ] }, - "834": { - "op": "bz get_operator_label_index_after_if_else@6", + "883": { + "op": "+", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1" ] }, - "837": { - "op": "frame_dig 2", + "884": { + "op": "frame_bury 4", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1" + ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0" ] }, - "839": { - "op": "frame_bury 0" - }, - "841": { - "retsub": true, - "op": "retsub" - }, - "842": { - "block": "get_operator_label_index_after_if_else@6", - "stack_in": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" - ], - "op": "frame_dig 2", - "defined_out": [ - "idx#0" - ], + "886": { + "op": "intc_2 // 2", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0", + "2" ] }, - "844": { - "op": "intc_0 // 1", - "defined_out": [ - "1", - "idx#0" - ], + "887": { + "op": "+", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "idx#0", - "1" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "head_offset#0" ] }, - "845": { - "op": "+", + "888": { + "op": "frame_bury 3", "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1" ] }, - "846": { - "op": "frame_bury 2", + "890": { + "op": "b dynamic_array_concat_byte_length_head_for_header@2" + }, + "893": { + "block": "dynamic_array_concat_byte_length_head_after_for@5", + "stack_in": [ + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1" + ], + "op": "frame_dig 0", "defined_out": [ - "idx#0" + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tmp%2#0" ] }, - "848": { - "op": "b get_operator_label_index_for_header@3" - }, - "851": { - "block": "get_operator_label_index_after_for@8", - "stack_in": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0" + "895": { + "op": "frame_dig 1", + "defined_out": [ + "array_head_and_tail#0", + "tmp%2#0" ], - "op": "intc_3 // 4294967295", + "stack_out": [ + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tmp%2#0", + "array_head_and_tail#0" + ] + }, + "897": { + "op": "concat", "defined_out": [ - "4294967295" + "array_head_and_tail#0", + "tmp%12#0", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#0", - "array_length%0#0", - "idx#0", - "4294967295" + "tmp%2#0", + "array_head_and_tail#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#1", + "tmp%12#0" ] }, - "852": { + "898": { "op": "frame_bury 0" }, - "854": { + "900": { "retsub": true, "op": "retsub" }, - "855": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.add_operator_to_label", + "901": { + "subroutine": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", "params": { - "operator#0": "bytes", - "label#0": "bytes" + "array_items_count#0": "uint64", + "array_head_and_tail#0": "bytes", + "new_items_count#0": "uint64", + "new_head_and_tail#0": "bytes" }, - "block": "add_operator_to_label", + "block": "dynamic_array_concat_dynamic_element", "stack_in": [], - "op": "proto 2 0" - }, - "858": { - "op": "frame_dig -1", - "defined_out": [ - "label#0 (copy)" - ], - "stack_out": [ - "label#0 (copy)" - ] - }, - "860": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_or_operator_only", - "op": "callsub admin_or_operator_only", - "stack_out": [] - }, - "863": { - "op": "frame_dig -1", - "stack_out": [ - "label#0 (copy)" - ] + "op": "proto 4 1" }, - "865": { - "op": "box_len", - "defined_out": [ - "cond#0", - "maybe_value%0#0" - ], + "904": { + "op": "bytec_3 // \"\"", "stack_out": [ - "maybe_value%0#0", - "cond#0" + "item_offset_adjustment#2" ] }, - "866": { - "op": "bury 1", - "stack_out": [ - "cond#0" - ] + "905": { + "op": "dup" }, - "868": { - "op": "bnz add_operator_to_label_after_if_else@10", - "stack_out": [] + "906": { + "op": "frame_dig -2" }, - "871": { - "op": "bytec_0 // \"ERR:NOEXIST\"", + "908": { + "op": "intc_2 // 2", "defined_out": [ - "\"ERR:NOEXIST\"" + "2", + "new_head#0", + "new_items_count#0 (copy)" ], "stack_out": [ - "\"ERR:NOEXIST\"" + "item_offset_adjustment#2", + "new_head#0", + "new_items_count#0 (copy)", + "2" ] }, - "872": { - "op": "log", - "stack_out": [] - }, - "873": { - "op": "err" - }, - "874": { - "block": "add_operator_to_label_after_if_else@10", - "stack_in": [], - "op": "frame_dig -2", + "909": { + "op": "*", "defined_out": [ - "operator#0 (copy)" + "item_offset_adjustment#0", + "new_head#0" ], "stack_out": [ - "operator#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0" ] }, - "876": { - "op": "box_len", + "910": { + "op": "frame_dig -4", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#0" + "array_items_count#0 (copy)", + "item_offset_adjustment#0", + "new_head#0" ], "stack_out": [ - "maybe_value%1#0", - "maybe_exists%1#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "array_items_count#0 (copy)" ] }, - "877": { - "op": "bury 1", + "912": { + "op": "intc_2 // 2", "stack_out": [ - "maybe_exists%1#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "array_items_count#0 (copy)", + "2" ] }, - "879": { - "op": "bz add_operator_to_label_else_body@2", - "stack_out": [] - }, - "882": { - "op": "frame_dig -2", + "913": { + "op": "*", + "defined_out": [ + "item_offset_adjustment#0", + "new_head#0", + "tmp%0#0" + ], "stack_out": [ - "operator#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0" ] }, - "884": { - "op": "frame_dig -1", + "914": { + "op": "intc_1 // 0", "defined_out": [ - "label#0 (copy)", - "operator#0 (copy)" + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%0#0" ], "stack_out": [ - "operator#0 (copy)", - "label#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" ] }, - "886": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index", - "op": "callsub get_operator_label_index", + "915": { + "block": "dynamic_array_concat_dynamic_element_for_header@1", + "stack_in": [ + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" + ], + "op": "frame_dig 4", "defined_out": [ - "tmp%2#0" + "head_offset#0" ], "stack_out": [ - "tmp%2#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0" ] }, - "889": { - "op": "intc_3 // 4294967295", + "917": { + "op": "frame_dig 3", "defined_out": [ - "4294967295", - "tmp%2#0" + "head_offset#0", + "tmp%0#0" ], "stack_out": [ - "tmp%2#0", - "4294967295" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "tmp%0#0" ] }, - "890": { - "op": "==", + "919": { + "op": "<", "defined_out": [ - "cond#0" + "continue_looping%0#0", + "head_offset#0", + "tmp%0#0" ], "stack_out": [ - "cond#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "continue_looping%0#0" ] }, - "891": { - "op": "bnz add_operator_to_label_after_if_else@6", - "stack_out": [] + "920": { + "op": "bz dynamic_array_concat_dynamic_element_after_for@4", + "stack_out": [ + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" + ] }, - "894": { - "op": "bytec 4 // \"ERR:EXISTS\"", + "923": { + "op": "frame_dig -3", "defined_out": [ - "\"ERR:EXISTS\"" + "array_head_and_tail#0 (copy)", + "head_offset#0", + "tmp%0#0" ], "stack_out": [ - "\"ERR:EXISTS\"" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "array_head_and_tail#0 (copy)" ] }, - "896": { - "op": "log", - "stack_out": [] - }, - "897": { - "op": "err" - }, - "898": { - "block": "add_operator_to_label_after_if_else@6", - "stack_in": [], - "op": "frame_dig -2", - "defined_out": [ - "operator#0 (copy)" - ], + "925": { + "op": "frame_dig 4", "stack_out": [ - "operator#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "array_head_and_tail#0 (copy)", + "head_offset#0" ] }, - "900": { - "op": "box_get", + "927": { + "op": "dup", "defined_out": [ - "existing#0", - "maybe_exists%2#0" + "array_head_and_tail#0 (copy)", + "head_offset#0", + "head_offset#0 (copy)", + "tmp%0#0" ], "stack_out": [ - "existing#0", - "maybe_exists%2#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "array_head_and_tail#0 (copy)", + "head_offset#0 (copy)", + "head_offset#0 (copy)" ] }, - "901": { - "error": "check self.operators entry exists", - "op": "assert // check self.operators entry exists", + "928": { + "op": "cover 2", "stack_out": [ - "existing#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "array_head_and_tail#0 (copy)", + "head_offset#0 (copy)" ] }, - "902": { - "op": "frame_dig -1", + "930": { + "op": "extract_uint16", "defined_out": [ - "existing#0", - "label#0 (copy)" + "head_offset#0", + "item_offset#0", + "tmp%0#0" ], "stack_out": [ - "existing#0", - "label#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "item_offset#0" ] }, - "904": { - "op": "len", + "931": { + "op": "frame_dig 2", "defined_out": [ - "existing#0", - "length%0#0" + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#0", + "tmp%0#0" ], "stack_out": [ - "existing#0", - "length%0#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#0" ] }, - "905": { - "op": "itob", + "933": { + "op": "+", "defined_out": [ - "as_bytes%0#0", - "existing#0" + "head_offset#0", + "item_offset_adjustment#0", + "tmp%0#0", + "tmp%1#0" ], "stack_out": [ - "existing#0", - "as_bytes%0#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "tmp%1#0" ] }, - "906": { - "op": "extract 6 2", + "934": { + "op": "itob", "defined_out": [ - "existing#0", - "length_uint16%0#0" + "head_offset#0", + "item_offset_adjustment#0", + "tmp%0#0", + "tmp%2#0" ], "stack_out": [ - "existing#0", - "length_uint16%0#0" - ] - }, - "909": { - "op": "frame_dig -1", - "stack_out": [ - "existing#0", - "length_uint16%0#0", - "label#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "tmp%2#0" ] }, - "911": { - "op": "concat", + "935": { + "op": "extract 6 2", "defined_out": [ - "encoded_value%0#0", - "existing#0" + "head_offset#0", + "item_offset_adjustment#0", + "tmp%0#0", + "tmp%3#0" ], "stack_out": [ - "existing#0", - "encoded_value%0#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "tmp%3#0" ] }, - "912": { - "op": "intc_0 // 1", + "938": { + "op": "frame_dig 1", "defined_out": [ - "1", - "encoded_value%0#0", - "existing#0" + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%0#0", + "tmp%3#0" ], "stack_out": [ - "existing#0", - "encoded_value%0#0", - "1" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "tmp%3#0", + "new_head#0" ] }, - "913": { - "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", - "op": "callsub dynamic_array_concat_byte_length_head", + "940": { + "op": "swap", "stack_out": [ - "existing#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "new_head#0", + "tmp%3#0" ] }, - "916": { - "op": "frame_dig -2", + "941": { + "op": "concat", "stack_out": [ - "existing#0", - "operator#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "new_head#0" ] }, - "918": { - "op": "box_del", + "942": { + "op": "frame_bury 1", "defined_out": [ - "existing#0", - "{box_del}" + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%0#0" ], "stack_out": [ - "existing#0", - "{box_del}" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0" ] }, - "919": { - "op": "pop", + "944": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%0#0" + ], "stack_out": [ - "existing#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "2" ] }, - "920": { - "op": "frame_dig -2", + "945": { + "op": "+", "stack_out": [ - "existing#0", - "operator#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0" ] }, - "922": { - "op": "swap", + "946": { + "op": "frame_bury 4", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%0#0" + ], "stack_out": [ - "operator#0 (copy)", - "existing#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" ] }, - "923": { - "op": "box_put", - "stack_out": [] + "948": { + "op": "b dynamic_array_concat_dynamic_element_for_header@1" }, - "924": { - "block": "add_operator_to_label_after_if_else@3", - "stack_in": [], - "op": "frame_dig -1", + "951": { + "block": "dynamic_array_concat_dynamic_element_after_for@4", + "stack_in": [ + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" + ], + "op": "frame_dig -3", "defined_out": [ - "label#0 (copy)" + "array_head_and_tail#0 (copy)" ], "stack_out": [ - "label#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "array_head_and_tail#0 (copy)" ] }, - "926": { - "op": "box_get", + "953": { + "op": "len", "defined_out": [ - "label_descriptor#0", - "maybe_exists%3#0" + "item_offset_adjustment#2" ], "stack_out": [ - "label_descriptor#0", - "maybe_exists%3#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "item_offset_adjustment#2" ] }, - "927": { - "error": "check self.labels entry exists", - "op": "assert // check self.labels entry exists", + "954": { + "op": "frame_bury 0", + "defined_out": [ + "item_offset_adjustment#2" + ], "stack_out": [ - "label_descriptor#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" ] }, - "928": { - "op": "dup", + "956": { + "op": "intc_1 // 0", "defined_out": [ - "label_descriptor#0", - "label_descriptor#0 (copy)" + "head_offset#0", + "item_offset_adjustment#2" ], "stack_out": [ - "label_descriptor#0", - "label_descriptor#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0" ] }, - "929": { - "op": "pushint 10 // 10", + "957": { + "op": "frame_bury 4", "defined_out": [ - "10", - "label_descriptor#0", - "label_descriptor#0 (copy)" + "head_offset#0", + "item_offset_adjustment#2" ], "stack_out": [ - "label_descriptor#0", - "label_descriptor#0 (copy)", - "10" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" ] }, - "931": { - "op": "extract_uint64", - "defined_out": [ - "label_descriptor#0", - "tmp%9#0" + "959": { + "block": "dynamic_array_concat_dynamic_element_for_header@5", + "stack_in": [ + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" ], - "stack_out": [ - "label_descriptor#0", - "tmp%9#0" - ] - }, - "932": { - "op": "intc_0 // 1", + "op": "frame_dig 4", "defined_out": [ - "1", - "label_descriptor#0", - "tmp%9#0" + "head_offset#0" ], "stack_out": [ - "label_descriptor#0", - "tmp%9#0", - "1" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0" ] }, - "933": { - "op": "+", + "961": { + "op": "frame_dig 2", "defined_out": [ - "label_descriptor#0", - "to_encode%0#0" + "head_offset#0", + "item_offset_adjustment#0" ], "stack_out": [ - "label_descriptor#0", - "to_encode%0#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "item_offset_adjustment#0" ] }, - "934": { - "op": "itob", + "963": { + "op": "<", "defined_out": [ - "label_descriptor#0", - "val_as_bytes%0#0" + "continue_looping%1#0", + "head_offset#0", + "item_offset_adjustment#0" ], "stack_out": [ - "label_descriptor#0", - "val_as_bytes%0#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "continue_looping%1#0" ] }, - "935": { - "op": "replace2 10", + "964": { + "op": "bz dynamic_array_concat_dynamic_element_after_for@8", "stack_out": [ - "label_descriptor#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" ] }, - "937": { + "967": { "op": "frame_dig -1", - "stack_out": [ - "label_descriptor#0", - "label#0 (copy)" - ] - }, - "939": { - "op": "box_del", "defined_out": [ - "label_descriptor#0", - "{box_del}" + "head_offset#0", + "item_offset_adjustment#0", + "new_head_and_tail#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "{box_del}" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "new_head_and_tail#0 (copy)" ] }, - "940": { - "op": "pop", + "969": { + "op": "frame_dig 4", "stack_out": [ - "label_descriptor#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "new_head_and_tail#0 (copy)", + "head_offset#0" ] }, - "941": { - "op": "frame_dig -1", + "971": { + "op": "dup", + "defined_out": [ + "head_offset#0", + "head_offset#0 (copy)", + "item_offset_adjustment#0", + "new_head_and_tail#0 (copy)" + ], "stack_out": [ - "label_descriptor#0", - "label#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "new_head_and_tail#0 (copy)", + "head_offset#0 (copy)", + "head_offset#0 (copy)" ] }, - "943": { - "op": "swap", + "972": { + "op": "cover 2", "stack_out": [ - "label#0 (copy)", - "label_descriptor#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "new_head_and_tail#0 (copy)", + "head_offset#0 (copy)" ] }, - "944": { - "op": "box_put", - "stack_out": [] - }, - "945": { - "retsub": true, - "op": "retsub" - }, - "946": { - "block": "add_operator_to_label_else_body@2", - "stack_in": [], - "op": "frame_dig -1", + "974": { + "op": "extract_uint16", "defined_out": [ - "label#0 (copy)" + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#0" ], "stack_out": [ - "label#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "item_offset#0" ] }, - "948": { - "op": "len", + "975": { + "op": "frame_dig 0", "defined_out": [ - "length%1#0" + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#0", + "item_offset_adjustment#2" ], "stack_out": [ - "length%1#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#2" ] }, - "949": { - "op": "itob", + "977": { + "op": "+", "defined_out": [ - "as_bytes%1#0" + "head_offset#0", + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "tmp%5#0" ], "stack_out": [ - "as_bytes%1#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "tmp%5#0" ] }, - "950": { - "op": "extract 6 2", + "978": { + "op": "itob", "defined_out": [ - "length_uint16%1#0" + "head_offset#0", + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "tmp%6#0" ], "stack_out": [ - "length_uint16%1#0" - ] - }, - "953": { - "op": "frame_dig -1", - "stack_out": [ - "length_uint16%1#0", - "label#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "tmp%6#0" ] }, - "955": { - "op": "concat", + "979": { + "op": "extract 6 2", "defined_out": [ - "encoded_value%1#0" + "head_offset#0", + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "tmp%7#0" ], "stack_out": [ - "encoded_value%1#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "tmp%7#0" ] }, - "956": { - "op": "bytec 9 // 0x0002", + "982": { + "op": "frame_dig 1", "defined_out": [ - "0x0002", - "encoded_value%1#0" + "head_offset#0", + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "new_head#0", + "tmp%7#0" ], "stack_out": [ - "encoded_value%1#0", - "0x0002" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "tmp%7#0", + "new_head#0" ] }, - "958": { + "984": { "op": "swap", "stack_out": [ - "0x0002", - "encoded_value%1#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "new_head#0", + "tmp%7#0" ] }, - "959": { + "985": { "op": "concat", + "stack_out": [ + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "new_head#0" + ] + }, + "986": { + "op": "frame_bury 1", "defined_out": [ - "result%1#0" + "head_offset#0", + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "new_head#0" ], "stack_out": [ - "result%1#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0" ] }, - "960": { - "op": "bytec 10 // 0x0001", + "988": { + "op": "intc_2 // 2", "defined_out": [ - "0x0001", - "result%1#0" + "2", + "head_offset#0", + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "new_head#0" ], "stack_out": [ - "result%1#0", - "0x0001" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0", + "2" ] }, - "962": { - "op": "swap", + "989": { + "op": "+", "stack_out": [ - "0x0001", - "result%1#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "head_offset#0" ] }, - "963": { - "op": "concat", + "990": { + "op": "frame_bury 4", "defined_out": [ - "array_data%0#0" + "head_offset#0", + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "new_head#0" ], "stack_out": [ - "array_data%0#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" ] }, - "964": { - "op": "frame_dig -2", + "992": { + "op": "b dynamic_array_concat_dynamic_element_for_header@5" + }, + "995": { + "block": "dynamic_array_concat_dynamic_element_after_for@8", + "stack_in": [ + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0" + ], + "op": "frame_dig -4", "defined_out": [ - "array_data%0#0", - "operator#0 (copy)" + "array_items_count#0 (copy)" ], "stack_out": [ - "array_data%0#0", - "operator#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "array_items_count#0 (copy)" ] }, - "966": { - "op": "box_del", + "997": { + "op": "frame_dig -2", "defined_out": [ - "array_data%0#0", - "{box_del}" + "array_items_count#0 (copy)", + "new_items_count#0 (copy)" ], "stack_out": [ - "array_data%0#0", - "{box_del}" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "array_items_count#0 (copy)", + "new_items_count#0 (copy)" ] }, - "967": { - "op": "pop", + "999": { + "op": "+", + "defined_out": [ + "tmp%8#0" + ], "stack_out": [ - "array_data%0#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%8#0" ] }, - "968": { - "op": "frame_dig -2", + "1000": { + "op": "itob", + "defined_out": [ + "tmp%9#0" + ], "stack_out": [ - "array_data%0#0", - "operator#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%9#0" ] }, - "970": { - "op": "swap", + "1001": { + "op": "extract 6 2", + "defined_out": [ + "tmp%10#0" + ], "stack_out": [ - "operator#0 (copy)", - "array_data%0#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%10#0" ] }, - "971": { - "op": "box_put", - "stack_out": [] - }, - "972": { - "op": "b add_operator_to_label_after_if_else@3" - }, - "975": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_operator_from_label", - "params": { - "operator#0": "bytes", - "label#0": "bytes" - }, - "block": "remove_operator_from_label", - "stack_in": [], - "op": "proto 2 0" - }, - "978": { - "op": "intc_1 // 0", + "1004": { + "op": "frame_dig 1", + "defined_out": [ + "new_head#0", + "tmp%10#0" + ], "stack_out": [ - "label_descriptor#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%10#0", + "new_head#0" ] }, - "979": { - "op": "dupn 4", + "1006": { + "op": "concat", + "defined_out": [ + "new_head#0", + "tmp%11#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%11#0" ] }, - "981": { - "op": "bytec_2 // \"\"", + "1007": { + "op": "frame_dig -3", + "defined_out": [ + "array_head_and_tail#0 (copy)", + "new_head#0", + "tmp%11#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%11#0", + "array_head_and_tail#0 (copy)" ] }, - "982": { - "op": "dupn 2", + "1009": { + "op": "frame_dig 3", + "defined_out": [ + "array_head_and_tail#0 (copy)", + "new_head#0", + "tmp%0#0", + "tmp%11#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%11#0", + "array_head_and_tail#0 (copy)", + "tmp%0#0" ] }, - "984": { - "op": "frame_dig -1", + "1011": { + "op": "frame_dig 0", "defined_out": [ - "label#0 (copy)" + "array_head_and_tail#0 (copy)", + "item_offset_adjustment#2", + "new_head#0", + "tmp%0#0", + "tmp%11#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%11#0", + "array_head_and_tail#0 (copy)", + "tmp%0#0", + "item_offset_adjustment#2" ] }, - "986": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_or_operator_only", - "op": "callsub admin_or_operator_only", + "1013": { + "op": "substring3", + "defined_out": [ + "item_offset_adjustment#2", + "new_head#0", + "tmp%0#0", + "tmp%11#0", + "tmp%14#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%11#0", + "tmp%14#0" ] }, - "989": { - "op": "frame_dig -1", + "1014": { + "op": "concat", + "defined_out": [ + "item_offset_adjustment#2", + "new_head#0", + "tmp%0#0", + "tmp%15#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%15#0" ] }, - "991": { - "op": "box_len", + "1015": { + "op": "frame_dig -1", "defined_out": [ - "cond#0", - "maybe_value%0#0" + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0 (copy)", + "tmp%0#0", + "tmp%15#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%0#0", - "cond#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%15#0", + "new_head_and_tail#0 (copy)" ] }, - "992": { - "op": "bury 1", + "1017": { + "op": "len", + "defined_out": [ + "item_offset_adjustment#2", + "new_head#0", + "tmp%0#0", + "tmp%15#0", + "tmp%17#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "cond#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%15#0", + "tmp%17#0" ] }, - "994": { - "op": "bnz remove_operator_from_label_after_if_else@28", + "1018": { + "op": "frame_dig -1", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%15#0", + "tmp%17#0", + "new_head_and_tail#0 (copy)" ] }, - "997": { - "op": "bytec_0 // \"ERR:NOEXIST\"", + "1020": { + "op": "frame_dig 2", "defined_out": [ - "\"ERR:NOEXIST\"" + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0 (copy)", + "tmp%0#0", + "tmp%15#0", + "tmp%17#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "\"ERR:NOEXIST\"" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%15#0", + "tmp%17#0", + "new_head_and_tail#0 (copy)", + "item_offset_adjustment#0" ] }, - "998": { - "op": "log", - "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "1022": { + "op": "uncover 2", + "stack_out": [ + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%15#0", + "new_head_and_tail#0 (copy)", + "item_offset_adjustment#0", + "tmp%17#0" ] }, - "999": { - "op": "err" - }, - "1000": { - "block": "remove_operator_from_label_after_if_else@28", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" - ], - "op": "frame_dig -2", + "1024": { + "op": "substring3", "defined_out": [ - "operator#0 (copy)" + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "new_head#0", + "tmp%0#0", + "tmp%15#0", + "tmp%18#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "operator#0 (copy)" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%15#0", + "tmp%18#0" ] }, - "1002": { - "op": "box_len", + "1025": { + "op": "concat", "defined_out": [ - "cond#0", - "maybe_value%1#0" + "item_offset_adjustment#0", + "item_offset_adjustment#2", + "new_head#0", + "tmp%0#0", + "tmp%19#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%1#0", - "cond#0" + "item_offset_adjustment#2", + "new_head#0", + "item_offset_adjustment#0", + "tmp%0#0", + "head_offset#0", + "tmp%19#0" ] }, - "1003": { - "op": "bury 1", - "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "cond#0" - ] + "1026": { + "op": "frame_bury 0" }, - "1005": { - "op": "bnz remove_operator_from_label_after_if_else@32", + "1028": { + "retsub": true, + "op": "retsub" + }, + "1029": { + "subroutine": "smart_contracts.asset_labeling.contract.b2str", + "params": { + "b#0": "bytes" + }, + "block": "b2str", + "stack_in": [], + "op": "proto 1 1" + }, + "1032": { + "op": "frame_dig -1", + "defined_out": [ + "b#0 (copy)" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "b#0 (copy)" ] }, - "1008": { - "op": "bytec_0 // \"ERR:NOEXIST\"", + "1034": { + "op": "len", "defined_out": [ - "\"ERR:NOEXIST\"" + "length%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "\"ERR:NOEXIST\"" + "length%0#0" ] }, - "1009": { - "op": "log", + "1035": { + "op": "itob", + "defined_out": [ + "as_bytes%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "as_bytes%0#0" ] }, - "1010": { - "op": "err" - }, - "1011": { - "block": "remove_operator_from_label_after_if_else@32", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" - ], - "op": "frame_dig -2", + "1036": { + "op": "extract 6 2", "defined_out": [ - "operator#0 (copy)" + "length_uint16%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "operator#0 (copy)" + "length_uint16%0#0" ] }, - "1013": { + "1039": { "op": "frame_dig -1", - "defined_out": [ - "label#0 (copy)", - "operator#0 (copy)" - ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "operator#0 (copy)", - "label#0 (copy)" + "length_uint16%0#0", + "b#0 (copy)" ] }, - "1015": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index", - "op": "callsub get_operator_label_index", + "1041": { + "op": "concat", "defined_out": [ - "label_idx#0" + "encoded_value%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_idx#0" + "encoded_value%0#0" ] }, - "1018": { - "op": "dup", - "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_idx#0", - "label_idx#0" - ] + "1042": { + "retsub": true, + "op": "retsub" }, - "1019": { - "op": "frame_bury 7", + "1043": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.update", + "params": {}, + "block": "update", + "stack_in": [], + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", + "op": "callsub admin_only" + }, + "1046": { + "retsub": true, + "op": "retsub" + }, + "1047": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.delete", + "params": {}, + "block": "delete", + "stack_in": [], + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", + "op": "callsub admin_only" + }, + "1050": { + "retsub": true, + "op": "retsub" + }, + "1051": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", + "params": {}, + "block": "admin_only", + "stack_in": [], + "op": "txn Sender", "defined_out": [ - "label_idx#0" + "tmp%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_idx#0" + "tmp%0#0" ] }, - "1021": { - "op": "intc_3 // 4294967295", + "1053": { + "op": "intc_1 // 0", "defined_out": [ - "4294967295", - "label_idx#0" + "0", + "tmp%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_idx#0", - "4294967295" + "tmp%0#0", + "0" ] }, - "1022": { - "op": "!=", + "1054": { + "op": "bytec 4 // \"admin\"", "defined_out": [ - "label_idx#0", - "tmp%2#0" + "\"admin\"", + "0", + "tmp%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "tmp%2#0" + "tmp%0#0", + "0", + "\"admin\"" ] }, - "1023": { - "op": "bz remove_operator_from_label_bool_false@3", + "1056": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "tmp%0#0", + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "1026": { - "op": "frame_dig 7", + "1057": { + "error": "check self.admin exists", + "op": "assert // check self.admin exists", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_idx#0" + "tmp%0#0", + "maybe_value%0#0" ] }, - "1028": { - "op": "intc 4 // 4294967296", + "1058": { + "op": "==", "defined_out": [ - "4294967296", - "label_idx#0" + "cond#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_idx#0", - "4294967296" + "cond#0" ] }, - "1030": { - "op": "!=", + "1059": { + "op": "bnz admin_only_after_if_else@3", + "stack_out": [] + }, + "1062": { + "op": "bytec 7 // \"ERR:UNAUTH\"", "defined_out": [ - "label_idx#0", - "tmp%3#0" + "\"ERR:UNAUTH\"" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "tmp%3#0" + "\"ERR:UNAUTH\"" ] }, - "1031": { - "op": "bz remove_operator_from_label_bool_false@3", + "1064": { + "op": "log", + "stack_out": [] + }, + "1065": { + "op": "err" + }, + "1066": { + "block": "admin_only_after_if_else@3", + "stack_in": [], + "retsub": true, + "op": "retsub" + }, + "1067": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.change_admin", + "params": { + "new_admin#0": "bytes" + }, + "block": "change_admin", + "stack_in": [], + "op": "proto 1 0" + }, + "1070": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", + "op": "callsub admin_only" + }, + "1073": { + "op": "bytec 4 // \"admin\"", + "defined_out": [ + "\"admin\"" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "\"admin\"" ] }, - "1034": { - "op": "intc_0 // 1", + "1075": { + "op": "frame_dig -1", "defined_out": [ - "cond#0", - "label_idx#0" + "\"admin\"", + "new_admin#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "cond#0" + "\"admin\"", + "new_admin#0 (copy)" ] }, - "1035": { - "block": "remove_operator_from_label_bool_merge@4", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "cond#0" + "1077": { + "op": "app_global_put", + "stack_out": [] + }, + "1078": { + "retsub": true, + "op": "retsub" + }, + "1079": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.add_label", + "params": { + "id#0": "bytes", + "name#0": "bytes" + }, + "block": "add_label", + "stack_in": [], + "op": "proto 2 0" + }, + "1082": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", + "op": "callsub admin_only" + }, + "1085": { + "op": "frame_dig -2", + "defined_out": [ + "id#0 (copy)" ], - "op": "bnz remove_operator_from_label_after_if_else@24", - "defined_out": [], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "id#0 (copy)" ] }, - "1038": { - "op": "bytec_0 // \"ERR:NOEXIST\"", + "1087": { + "op": "box_len", "defined_out": [ - "\"ERR:NOEXIST\"" + "maybe_exists%0#0", + "maybe_value%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "\"ERR:NOEXIST\"" + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "1039": { - "op": "log", + "1088": { + "op": "bury 1", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "maybe_exists%0#0" ] }, - "1040": { - "op": "err" + "1090": { + "op": "bz add_label_after_if_else@3", + "stack_out": [] }, - "1041": { - "block": "remove_operator_from_label_after_if_else@24", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" - ], - "op": "frame_dig -1", + "1093": { + "op": "bytec 5 // \"ERR:EXISTS\"", "defined_out": [ - "label#0 (copy)" + "\"ERR:EXISTS\"" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label#0 (copy)" + "\"ERR:EXISTS\"" ] }, - "1043": { - "op": "box_get", + "1095": { + "op": "log", + "stack_out": [] + }, + "1096": { + "op": "err" + }, + "1097": { + "block": "add_label_after_if_else@3", + "stack_in": [], + "op": "frame_dig -2", "defined_out": [ - "label_descriptor#0", - "maybe_exists%2#0" + "id#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "maybe_exists%2#0" + "id#0 (copy)" ] }, - "1044": { - "op": "swap", + "1099": { + "op": "len", + "defined_out": [ + "tmp%2#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_exists%2#0", - "label_descriptor#0" + "tmp%2#0" ] }, - "1045": { - "op": "dup", + "1100": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "tmp%2#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_exists%2#0", - "label_descriptor#0", - "label_descriptor#0 (copy)" + "tmp%2#0", + "2" ] }, - "1046": { - "op": "cover 2", + "1101": { + "op": "==", + "defined_out": [ + "cond#1" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "maybe_exists%2#0", - "label_descriptor#0" + "cond#1" ] }, - "1048": { - "op": "frame_bury 0", + "1102": { + "op": "bnz add_label_after_if_else@7", + "stack_out": [] + }, + "1105": { + "op": "pushbytes \"ERR:LENGTH\"", "defined_out": [ - "label_descriptor#0", - "maybe_exists%2#0" + "\"ERR:LENGTH\"" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "maybe_exists%2#0" + "\"ERR:LENGTH\"" ] }, - "1050": { - "error": "check self.labels entry exists", - "op": "assert // check self.labels entry exists", - "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0" - ] + "1117": { + "op": "log", + "stack_out": [] }, - "1051": { - "error": "Index access is out of bounds", - "op": "extract 10 8 // on error: Index access is out of bounds", + "1118": { + "op": "err" + }, + "1119": { + "block": "add_label_after_if_else@7", + "stack_in": [], + "op": "frame_dig -1", "defined_out": [ - "label_descriptor#0", - "reinterpret_biguint%0#0" + "name#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "reinterpret_biguint%0#0" + "name#0 (copy)" ] }, - "1054": { - "op": "pushbytes 0x0000000000000001", + "1121": { + "op": "len", "defined_out": [ - "0x0000000000000001", - "label_descriptor#0", - "reinterpret_biguint%0#0" + "length%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "reinterpret_biguint%0#0", - "0x0000000000000001" + "length%0#0" ] }, - "1064": { - "op": "b>", + "1122": { + "op": "itob", "defined_out": [ - "label_descriptor#0", - "tmp%5#0" + "as_bytes%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "tmp%5#0" + "as_bytes%0#0" ] }, - "1065": { - "op": "bnz remove_operator_from_label_bool_true@6", + "1123": { + "op": "extract 6 2", + "defined_out": [ + "length_uint16%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "length_uint16%0#0" ] }, - "1068": { - "op": "frame_dig 0", + "1126": { + "op": "frame_dig -1", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0" + "length_uint16%0#0", + "name#0 (copy)" ] }, - "1070": { - "error": "Index access is out of bounds", - "op": "extract 2 8 // on error: Index access is out of bounds", + "1128": { + "op": "concat", "defined_out": [ - "label_descriptor#0", - "reinterpret_biguint%2#0" + "encoded_value%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "reinterpret_biguint%2#0" + "encoded_value%0#0" ] }, - "1073": { - "op": "bytec 7 // 0x0000000000000000", + "1129": { + "op": "pushbytes 0x001200000000000000000000000000000000", "defined_out": [ - "0x0000000000000000", - "label_descriptor#0", - "reinterpret_biguint%2#0" + "0x001200000000000000000000000000000000", + "encoded_value%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "reinterpret_biguint%2#0", - "0x0000000000000000" + "encoded_value%0#0", + "0x001200000000000000000000000000000000" ] }, - "1075": { - "op": "b==", + "1149": { + "op": "swap", + "stack_out": [ + "0x001200000000000000000000000000000000", + "encoded_value%0#0" + ] + }, + "1150": { + "op": "concat", "defined_out": [ - "label_descriptor#0", - "tmp%6#0" + "encoded_tuple_buffer%4#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "tmp%6#0" + "encoded_tuple_buffer%4#0" ] }, - "1076": { - "op": "bz remove_operator_from_label_bool_false@7", + "1151": { + "op": "frame_dig -2", + "defined_out": [ + "encoded_tuple_buffer%4#0", + "id#0 (copy)" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "encoded_tuple_buffer%4#0", + "id#0 (copy)" ] }, - "1079": { - "block": "remove_operator_from_label_bool_true@6", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" - ], - "op": "intc_0 // 1", + "1153": { + "op": "box_del", "defined_out": [ - "cond#0" + "encoded_tuple_buffer%4#0", + "{box_del}" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "cond#0" + "encoded_tuple_buffer%4#0", + "{box_del}" ] }, - "1080": { - "block": "remove_operator_from_label_bool_merge@8", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "cond#0" - ], - "op": "bnz remove_operator_from_label_after_if_else@20", - "defined_out": [], + "1154": { + "op": "pop", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "encoded_tuple_buffer%4#0" ] }, - "1083": { - "op": "bytec 8 // \"ERR:NOEMPTY\"", - "defined_out": [ - "\"ERR:NOEMPTY\"" - ], + "1155": { + "op": "frame_dig -2", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "\"ERR:NOEMPTY\"" + "encoded_tuple_buffer%4#0", + "id#0 (copy)" ] }, - "1085": { - "op": "log", + "1157": { + "op": "swap", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "id#0 (copy)", + "encoded_tuple_buffer%4#0" ] }, - "1086": { - "op": "err" + "1158": { + "op": "box_put", + "stack_out": [] }, - "1087": { - "block": "remove_operator_from_label_after_if_else@20", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" - ], - "op": "frame_dig 0", + "1159": { + "retsub": true, + "op": "retsub" + }, + "1160": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_label", + "params": { + "id#0": "bytes" + }, + "block": "remove_label", + "stack_in": [], + "op": "proto 1 0" + }, + "1163": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_only", + "op": "callsub admin_only" + }, + "1166": { + "op": "frame_dig -1", "defined_out": [ - "label_descriptor#0" + "id#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0" + "id#0 (copy)" ] }, - "1089": { - "op": "dup", + "1168": { + "op": "box_len", "defined_out": [ - "label_descriptor#0", - "label_descriptor#0 (copy)" + "cond#0", + "maybe_value%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "label_descriptor#0 (copy)" + "maybe_value%0#0", + "cond#0" ] }, - "1090": { - "op": "pushint 10 // 10", - "defined_out": [ - "10", - "label_descriptor#0", - "label_descriptor#0 (copy)" - ], + "1169": { + "op": "bury 1", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "label_descriptor#0 (copy)", - "10" + "cond#0" ] }, - "1092": { - "op": "extract_uint64", + "1171": { + "op": "bnz remove_label_after_if_else@3", + "stack_out": [] + }, + "1174": { + "op": "bytec_1 // \"ERR:NOEXIST\"", "defined_out": [ - "label_descriptor#0", - "tmp%8#0" + "\"ERR:NOEXIST\"" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "tmp%8#0" + "\"ERR:NOEXIST\"" ] }, - "1093": { - "op": "intc_0 // 1", + "1175": { + "op": "log", + "stack_out": [] + }, + "1176": { + "op": "err" + }, + "1177": { + "block": "remove_label_after_if_else@3", + "stack_in": [], + "op": "frame_dig -1", "defined_out": [ - "1", - "label_descriptor#0", - "tmp%8#0" + "id#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "tmp%8#0", - "1" + "id#0 (copy)" ] }, - "1094": { - "op": "-", + "1179": { + "op": "box_get", "defined_out": [ - "label_descriptor#0", - "to_encode%0#0" + "maybe_exists%1#0", + "maybe_value%1#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "to_encode%0#0" + "maybe_value%1#0", + "maybe_exists%1#0" ] }, - "1095": { - "op": "itob", + "1180": { + "error": "check self.labels entry exists", + "op": "assert // check self.labels entry exists", + "stack_out": [ + "maybe_value%1#0" + ] + }, + "1181": { + "error": "Index access is out of bounds", + "op": "extract 2 8 // on error: Index access is out of bounds", "defined_out": [ - "label_descriptor#0", - "val_as_bytes%0#0" + "reinterpret_biguint%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "val_as_bytes%0#0" + "reinterpret_biguint%0#0" ] }, - "1096": { - "op": "replace2 10", + "1184": { + "op": "bytec 8 // 0x0000000000000000", + "defined_out": [ + "0x0000000000000000", + "reinterpret_biguint%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0" + "reinterpret_biguint%0#0", + "0x0000000000000000" + ] + }, + "1186": { + "op": "b==", + "defined_out": [ + "cond#0" + ], + "stack_out": [ + "cond#0" + ] + }, + "1187": { + "op": "bnz remove_label_after_if_else@7", + "stack_out": [] + }, + "1190": { + "op": "bytec 9 // \"ERR:NOEMPTY\"", + "defined_out": [ + "\"ERR:NOEMPTY\"" + ], + "stack_out": [ + "\"ERR:NOEMPTY\"" ] }, - "1098": { + "1192": { + "op": "log", + "stack_out": [] + }, + "1193": { + "op": "err" + }, + "1194": { + "block": "remove_label_after_if_else@7", + "stack_in": [], "op": "frame_dig -1", "defined_out": [ - "label#0 (copy)", - "label_descriptor#0" + "id#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "label#0 (copy)" + "id#0 (copy)" ] }, - "1100": { + "1196": { "op": "box_del", "defined_out": [ - "label_descriptor#0", "{box_del}" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", "{box_del}" ] }, - "1101": { + "1197": { "op": "pop", + "stack_out": [] + }, + "1198": { + "retsub": true, + "op": "retsub" + }, + "1199": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_label", + "params": { + "id#0": "bytes" + }, + "block": "get_label", + "stack_in": [], + "op": "proto 1 1" + }, + "1202": { + "op": "frame_dig -1", + "defined_out": [ + "id#0 (copy)" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0" + "id#0 (copy)" ] }, - "1102": { - "op": "frame_dig -1", + "1204": { + "op": "box_len", + "defined_out": [ + "cond#0", + "maybe_value%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label_descriptor#0", - "label#0 (copy)" + "maybe_value%0#0", + "cond#0" ] }, - "1104": { - "op": "swap", + "1205": { + "op": "bury 1", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "label#0 (copy)", - "label_descriptor#0" + "cond#0" ] }, - "1105": { - "op": "box_put", + "1207": { + "op": "bnz get_label_after_if_else@3", + "stack_out": [] + }, + "1210": { + "op": "bytec_1 // \"ERR:NOEXIST\"", + "defined_out": [ + "\"ERR:NOEXIST\"" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" + "\"ERR:NOEXIST\"" ] }, - "1106": { - "op": "frame_dig -2", + "1211": { + "op": "log", + "stack_out": [] + }, + "1212": { + "op": "err" + }, + "1213": { + "block": "get_label_after_if_else@3", + "stack_in": [], + "op": "frame_dig -1", "defined_out": [ - "label_descriptor#0", - "operator#0 (copy)" + "id#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "operator#0 (copy)" + "id#0 (copy)" ] }, - "1108": { + "1215": { "op": "box_get", "defined_out": [ - "label_descriptor#0", - "maybe_exists%3#0", - "maybe_value%3#0" + "maybe_exists%1#0", + "maybe_value%1#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%3#0", - "maybe_exists%3#0" + "maybe_value%1#0", + "maybe_exists%1#0" ] }, - "1109": { - "error": "check self.operators entry exists", - "op": "assert // check self.operators entry exists", + "1216": { + "error": "check self.labels entry exists", + "op": "assert // check self.labels entry exists", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%3#0" + "maybe_value%1#0" ] }, - "1110": { - "op": "intc_1 // 0", + "1217": { + "retsub": true, + "op": "retsub" + }, + "1218": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.log_labels", + "params": { + "ids#0": "bytes" + }, + "block": "log_labels", + "stack_in": [], + "op": "proto 1 0" + }, + "1221": { + "op": "frame_dig -1", "defined_out": [ - "0", - "label_descriptor#0", - "maybe_value%3#0" + "ids#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%3#0", + "ids#0 (copy)" + ] + }, + "1223": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "ids#0 (copy)" + ], + "stack_out": [ + "ids#0 (copy)", "0" ] }, - "1111": { + "1224": { "op": "extract_uint16", "defined_out": [ - "label_descriptor#0", - "tmp%11#0" + "array_length%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "tmp%11#0" + "array_length%0#0" ] }, - "1112": { - "op": "intc_0 // 1", + "1225": { + "op": "intc_1 // 0", + "defined_out": [ + "_idx#0", + "array_length%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "tmp%11#0", - "1" + "_idx#0" ] }, - "1113": { - "op": "==", + "1226": { + "block": "log_labels_for_header@1", + "stack_in": [ + "array_length%0#0", + "_idx#0" + ], + "op": "frame_dig 1", "defined_out": [ - "label_descriptor#0", - "tmp%12#0" + "_idx#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "tmp%12#0" + "_idx#0", + "_idx#0" ] }, - "1114": { - "op": "bz remove_operator_from_label_else_body@10", + "1228": { + "op": "frame_dig 0", + "defined_out": [ + "_idx#0", + "array_length%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0" + "_idx#0", + "_idx#0", + "array_length%0#0" ] }, - "1117": { - "op": "frame_dig -2", + "1230": { + "op": "<", + "defined_out": [ + "_idx#0", + "array_length%0#0", + "continue_looping%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "operator#0 (copy)" + "_idx#0", + "continue_looping%0#0" ] }, - "1119": { - "op": "box_del", + "1231": { + "op": "bz log_labels_after_for@4", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "{box_del}" + "_idx#0" ] }, - "1120": { - "op": "pop", + "1234": { + "op": "frame_dig -1", + "defined_out": [ + "_idx#0", + "array_length%0#0", + "ids#0 (copy)" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0" + "_idx#0", + "ids#0 (copy)" ] }, - "1121": { - "retsub": true, - "op": "retsub" + "1236": { + "op": "extract 2 0", + "defined_out": [ + "_idx#0", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_idx#0", + "array_head_and_tail%0#0" + ] }, - "1122": { - "block": "remove_operator_from_label_else_body@10", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "1239": { + "op": "frame_dig 1", + "stack_out": [ "array_length%0#0", - "idx#0", - "label_idx#0" - ], - "op": "bytec 11 // 0x0000", + "_idx#0", + "array_head_and_tail%0#0", + "_idx#0" + ] + }, + "1241": { + "op": "dup", "defined_out": [ - "next_list#0" + "_idx#0", + "_idx#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "next_list#0" + "_idx#0", + "array_head_and_tail%0#0", + "_idx#0 (copy)", + "_idx#0 (copy)" ] }, - "1124": { - "op": "frame_bury 2", + "1242": { + "op": "cover 2", + "stack_out": [ + "array_length%0#0", + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "_idx#0 (copy)" + ] + }, + "1244": { + "op": "intc_2 // 2", "defined_out": [ - "next_list#0" + "2", + "_idx#0", + "_idx#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0" + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "_idx#0 (copy)", + "2" ] }, - "1126": { - "op": "frame_dig -2", + "1245": { + "op": "*", "defined_out": [ - "next_list#0", - "operator#0 (copy)" + "_idx#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_offset_offset%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "operator#0 (copy)" + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0" ] }, - "1128": { - "op": "box_get", + "1246": { + "op": "dig 1", "defined_out": [ - "maybe_exists%4#0", - "maybe_value%4#0", - "next_list#0" + "_idx#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "array_length%0#0", + "item_offset_offset%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0", - "maybe_exists%4#0" + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0", + "array_head_and_tail%0#0 (copy)" ] }, - "1129": { + "1248": { "op": "swap", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_exists%4#0", - "maybe_value%4#0" + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset_offset%0#0" ] }, - "1130": { - "op": "dup", + "1249": { + "op": "extract_uint16", + "defined_out": [ + "_idx#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_offset%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_exists%4#0", - "maybe_value%4#0", - "maybe_value%4#0 (copy)" + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0" ] }, - "1131": { - "op": "cover 2", - "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0", - "maybe_exists%4#0", - "maybe_value%4#0" - ] - }, - "1133": { - "op": "frame_bury 1", + "1250": { + "op": "dup2", "defined_out": [ - "maybe_exists%4#0", - "maybe_value%4#0", - "next_list#0" + "_idx#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "array_length%0#0", + "item_offset%0#0", + "item_offset%0#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0", - "maybe_exists%4#0" + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset%0#0 (copy)" ] }, - "1135": { - "error": "check self.operators entry exists", - "op": "assert // check self.operators entry exists", + "1251": { + "op": "extract_uint16", + "defined_out": [ + "_idx#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_length%0#0", + "item_offset%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0" + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0" ] }, - "1136": { - "op": "intc_1 // 0", + "1252": { + "op": "intc_2 // 2", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0", - "0" + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0", + "2" ] }, - "1137": { - "op": "extract_uint16", + "1253": { + "op": "+", "defined_out": [ + "_idx#0", + "array_head_and_tail%0#0", "array_length%0#0", - "maybe_value%4#0", - "next_list#0" + "item_head_tail_length%0#0", + "item_offset%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "array_length%0#0" + "_idx#0", + "_idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_head_tail_length%0#0" ] }, - "1138": { - "op": "frame_bury 5", + "1254": { + "op": "extract3", "defined_out": [ + "_idx#0", "array_length%0#0", - "maybe_value%4#0", - "next_list#0" + "label_id#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0" + "_idx#0", + "_idx#0", + "label_id#0" ] }, - "1140": { - "op": "intc_1 // 0", + "1255": { + "op": "extract 2 0", "defined_out": [ + "_idx#0", "array_length%0#0", - "idx#0", - "maybe_value%4#0", - "next_list#0" + "tmp%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0" + "_idx#0", + "_idx#0", + "tmp%0#0" ] }, - "1141": { - "op": "frame_bury 6", + "1258": { + "op": "box_get", "defined_out": [ + "_idx#0", "array_length%0#0", - "idx#0", - "maybe_value%4#0", - "next_list#0" + "maybe_exists%0#0", + "maybe_value%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0" + "_idx#0", + "_idx#0", + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "1143": { - "block": "remove_operator_from_label_for_header@11", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0" - ], - "op": "frame_dig 6", - "defined_out": [ - "idx#0" - ], + "1259": { + "error": "check self.labels entry exists", + "op": "assert // check self.labels entry exists", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0" + "_idx#0", + "_idx#0", + "maybe_value%0#0" ] }, - "1145": { - "op": "frame_dig 5", - "defined_out": [ - "array_length%0#0", - "idx#0" - ], + "1260": { + "op": "log", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_length%0#0" + "_idx#0", + "_idx#0" ] }, - "1147": { - "op": "<", + "1261": { + "op": "intc_0 // 1", "defined_out": [ - "array_length%0#0", - "continue_looping%0#0", - "idx#0" + "1", + "_idx#0", + "array_length%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "continue_looping%0#0" + "_idx#0", + "_idx#0", + "1" ] }, - "1148": { - "op": "bz remove_operator_from_label_after_for@16", + "1262": { + "op": "+", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0" + "_idx#0", + "_idx#0" ] }, - "1151": { - "op": "frame_dig 1", + "1263": { + "op": "frame_bury 1", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%4#0" + "_idx#0", + "array_length%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0" + "_idx#0" ] }, - "1153": { - "op": "extract 2 0", - "defined_out": [ - "array_head_and_tail%0#0", + "1265": { + "op": "b log_labels_for_header@1" + }, + "1268": { + "block": "log_labels_after_for@4", + "stack_in": [ "array_length%0#0", - "idx#0", - "maybe_value%4#0" + "_idx#0" + ], + "retsub": true, + "op": "retsub" + }, + "1269": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_or_operator_only", + "params": { + "label#0": "bytes" + }, + "block": "admin_or_operator_only", + "stack_in": [], + "op": "proto 1 0" + }, + "1272": { + "op": "txn Sender", + "defined_out": [ + "tmp%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "array_head_and_tail%0#0" + "tmp%0#0" ] }, - "1156": { - "op": "frame_dig 6", + "1274": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "tmp%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "array_head_and_tail%0#0", - "idx#0" + "tmp%0#0", + "0" ] }, - "1158": { - "op": "dup", + "1275": { + "op": "bytec 4 // \"admin\"", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "idx#0 (copy)", - "maybe_value%4#0" + "\"admin\"", + "0", + "tmp%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "array_head_and_tail%0#0", - "idx#0 (copy)", - "idx#0 (copy)" + "tmp%0#0", + "0", + "\"admin\"" ] }, - "1159": { - "op": "cover 2", + "1277": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "idx#0 (copy)" + "tmp%0#0", + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "1161": { - "op": "intc_2 // 2", + "1278": { + "error": "check self.admin exists", + "op": "assert // check self.admin exists", + "stack_out": [ + "tmp%0#0", + "maybe_value%0#0" + ] + }, + "1279": { + "op": "==", "defined_out": [ - "2", - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "idx#0 (copy)", - "maybe_value%4#0" + "tmp%1#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "idx#0 (copy)", - "2" + "tmp%1#0" ] }, - "1162": { - "op": "*", + "1280": { + "op": "bz admin_or_operator_only_after_if_else@2", + "stack_out": [] + }, + "1283": { + "retsub": true, + "op": "retsub" + }, + "1284": { + "block": "admin_or_operator_only_after_if_else@2", + "stack_in": [], + "op": "frame_dig -1", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_offset_offset%0#0", - "maybe_value%4#0" + "label#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset_offset%0#0" + "label#0 (copy)" ] }, - "1163": { - "op": "dig 1", + "1286": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.operator_only", + "op": "callsub operator_only", + "stack_out": [] + }, + "1289": { + "retsub": true, + "op": "retsub" + }, + "1290": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.operator_only", + "params": { + "label#0": "bytes" + }, + "block": "operator_only", + "stack_in": [], + "op": "proto 1 0" + }, + "1293": { + "op": "txn Sender", "defined_out": [ - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "array_length%0#0", - "idx#0", - "item_offset_offset%0#0", - "maybe_value%4#0" + "tmp%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset_offset%0#0", - "array_head_and_tail%0#0 (copy)" + "tmp%0#0" ] }, - "1165": { - "op": "swap", + "1295": { + "op": "frame_dig -1", + "defined_out": [ + "label#0 (copy)", + "tmp%0#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "item_offset_offset%0#0" + "tmp%0#0", + "label#0 (copy)" ] }, - "1166": { - "op": "extract_uint16", + "1297": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index", + "op": "callsub get_operator_label_index", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_offset%0#0", - "maybe_value%4#0" + "operator_index#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0" + "operator_index#0" ] }, - "1167": { - "op": "dup2", + "1300": { + "op": "dup", "defined_out": [ - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "array_length%0#0", - "idx#0", - "item_offset%0#0", - "item_offset%0#0 (copy)", - "maybe_value%4#0" + "operator_index#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "array_head_and_tail%0#0 (copy)", - "item_offset%0#0 (copy)" + "operator_index#0", + "operator_index#0" ] }, - "1168": { - "op": "extract_uint16", + "1301": { + "op": "intc 5 // 4294967296", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_length%0#0", - "item_offset%0#0", - "maybe_value%4#0" + "4294967296", + "operator_index#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_length%0#0" + "operator_index#0", + "operator_index#0", + "4294967296" ] }, - "1169": { - "op": "intc_2 // 2", - "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_length%0#0", - "2" + "1303": { + "op": "!=", + "defined_out": [ + "operator_index#0", + "tmp%1#0" + ], + "stack_out": [ + "operator_index#0", + "tmp%1#0" ] }, - "1170": { - "op": "+", + "1304": { + "op": "bz operator_only_bool_false@3", + "stack_out": [ + "operator_index#0" + ] + }, + "1307": { + "op": "frame_dig 0", + "stack_out": [ + "operator_index#0", + "operator_index#0" + ] + }, + "1309": { + "op": "intc 4 // 4294967295", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_head_tail_length%0#0", - "item_offset%0#0", - "maybe_value%4#0" + "4294967295", + "operator_index#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_head_tail_length%0#0" + "operator_index#0", + "operator_index#0", + "4294967295" ] }, - "1171": { - "op": "extract3", + "1311": { + "op": "!=", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%4#0", - "stored_label#0" + "operator_index#0", + "tmp%2#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "stored_label#0" + "operator_index#0", + "tmp%2#0" ] }, - "1172": { - "op": "frame_bury 4", + "1312": { + "op": "bz operator_only_bool_false@3", + "stack_out": [ + "operator_index#0" + ] + }, + "1315": { + "op": "intc_0 // 1", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%4#0", - "stored_label#0" + "cond#0", + "operator_index#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0" + "operator_index#0", + "cond#0" ] }, - "1174": { - "op": "frame_dig 7", + "1316": { + "block": "operator_only_bool_merge@4", + "stack_in": [ + "operator_index#0", + "cond#0" + ], + "op": "bnz operator_only_after_if_else@7", + "defined_out": [], + "stack_out": [ + "operator_index#0" + ] + }, + "1319": { + "op": "bytec 7 // \"ERR:UNAUTH\"", "defined_out": [ - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0", - "stored_label#0" + "\"ERR:UNAUTH\"" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", - "array_length%0#0", - "idx#0", - "label_idx#0", - "idx#0", - "label_idx#0" + "operator_index#0", + "\"ERR:UNAUTH\"" ] }, - "1176": { - "op": "!=", + "1321": { + "op": "log", + "stack_out": [ + "operator_index#0" + ] + }, + "1322": { + "op": "err" + }, + "1323": { + "block": "operator_only_after_if_else@7", + "stack_in": [ + "operator_index#0" + ], + "retsub": true, + "op": "retsub" + }, + "1324": { + "block": "operator_only_bool_false@3", + "stack_in": [ + "operator_index#0" + ], + "op": "intc_1 // 0", "defined_out": [ - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0", - "stored_label#0", - "tmp%15#0" + "cond#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "operator_index#0", + "cond#0" + ] + }, + "1325": { + "op": "b operator_only_bool_merge@4" + }, + "1328": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index", + "params": { + "operator#0": "bytes", + "label#0": "bytes" + }, + "block": "get_operator_label_index", + "stack_in": [], + "op": "proto 2 1" + }, + "1331": { + "op": "intc_1 // 0", + "stack_out": [ + "maybe_value%1#0" + ] + }, + "1332": { + "op": "bytec_3 // \"\"", + "stack_out": [ + "maybe_value%1#0", + "array_length%0#0" + ] + }, + "1333": { + "op": "dup", + "stack_out": [ + "maybe_value%1#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "tmp%15#0" + "idx#0" ] }, - "1177": { - "op": "frame_dig 2", + "1334": { + "op": "frame_dig -2", "defined_out": [ - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0", - "next_list#9", - "stored_label#0", - "tmp%15#0" + "operator#0 (copy)" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "tmp%15#0", - "next_list#9" + "operator#0 (copy)" ] }, - "1179": { - "op": "frame_bury 3", + "1336": { + "op": "box_len", "defined_out": [ - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0", - "next_list#9", - "stored_label#0", - "tmp%15#0" + "maybe_exists%0#0", + "maybe_value%0#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "tmp%15#0" + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "1181": { - "op": "bz remove_operator_from_label_after_if_else@14", + "1337": { + "op": "bury 1", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0" + "maybe_exists%0#0" ] }, - "1184": { - "op": "frame_dig 2", - "defined_out": [ - "array_length%0#0", - "idx#0", - "label_idx#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0" - ], + "1339": { + "op": "bnz get_operator_label_index_after_if_else@2", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "next_list#0" + "idx#0" ] }, - "1186": { - "op": "frame_dig 4", + "1342": { + "op": "intc 5 // 4294967296", + "defined_out": [ + "4294967296" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "next_list#0", - "stored_label#0" + "4294967296" ] }, - "1188": { - "op": "intc_0 // 1", + "1344": { + "op": "frame_bury 0" + }, + "1346": { + "retsub": true, + "op": "retsub" + }, + "1347": { + "block": "get_operator_label_index_after_if_else@2", + "stack_in": [ + "maybe_value%1#0", + "array_length%0#0", + "idx#0" + ], + "op": "frame_dig -2", "defined_out": [ - "1", + "operator#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0" + "operator#0 (copy)" + ] + }, + "1349": { + "op": "box_get", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "next_list#0", - "stored_label#0", - "1" + "maybe_value%1#0", + "maybe_exists%1#0" ] }, - "1189": { - "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", - "op": "callsub dynamic_array_concat_byte_length_head", + "1350": { + "op": "swap", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "next_list#9" + "maybe_exists%1#0", + "maybe_value%1#0" ] }, - "1192": { - "op": "frame_bury 3", + "1351": { + "op": "dup", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0" + "maybe_exists%1#0", + "maybe_value%1#0", + "maybe_value%1#0 (copy)" ] }, - "1194": { - "block": "remove_operator_from_label_after_if_else@14", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "1352": { + "op": "cover 2", + "stack_out": [ + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0" - ], - "op": "frame_dig 3", + "maybe_value%1#0", + "maybe_exists%1#0", + "maybe_value%1#0" + ] + }, + "1354": { + "op": "frame_bury 0", "defined_out": [ - "next_list#0" + "maybe_exists%1#0", + "maybe_value%1#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "next_list#0" + "maybe_value%1#0", + "maybe_exists%1#0" ] }, - "1196": { - "op": "frame_bury 2", - "defined_out": [ - "next_list#0" - ], + "1356": { + "error": "check self.operators entry exists", + "op": "assert // check self.operators entry exists", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0" + "maybe_value%1#0" ] }, - "1198": { - "op": "frame_dig 6", - "defined_out": [ - "idx#0", - "next_list#0" - ], + "1357": { + "op": "intc_1 // 0", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "idx#0" + "maybe_value%1#0", + "0" ] }, - "1200": { - "op": "intc_0 // 1", + "1358": { + "op": "extract_uint16", "defined_out": [ - "1", - "idx#0", - "next_list#0" + "array_length%0#0", + "maybe_value%1#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "idx#0", - "1" + "array_length%0#0" ] }, - "1201": { - "op": "+", + "1359": { + "op": "frame_bury 1", + "defined_out": [ + "array_length%0#0", + "maybe_value%1#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", - "idx#0", - "label_idx#0", "idx#0" ] }, - "1202": { - "op": "frame_bury 6", + "1361": { + "op": "intc_1 // 0", "defined_out": [ + "array_length%0#0", "idx#0", - "next_list#0" + "maybe_value%1#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0" + "idx#0" ] }, - "1204": { - "op": "b remove_operator_from_label_for_header@11" + "1362": { + "op": "frame_bury 2", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "array_length%0#0", + "idx#0" + ] }, - "1207": { - "block": "remove_operator_from_label_after_for@16", + "1364": { + "block": "get_operator_label_index_for_header@3", "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", - "idx#0", - "label_idx#0" + "idx#0" ], - "op": "frame_dig -2", + "op": "frame_dig 2", "defined_out": [ - "operator#0 (copy)" + "idx#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "operator#0 (copy)" + "idx#0" ] }, - "1209": { - "op": "box_del", + "1366": { + "op": "frame_dig 1", "defined_out": [ - "{box_del}" + "array_length%0#0", + "idx#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "{box_del}" + "idx#0", + "array_length%0#0" ] }, - "1210": { - "op": "pop", + "1368": { + "op": "<", + "defined_out": [ + "array_length%0#0", + "continue_looping%0#0", + "idx#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0" + "continue_looping%0#0" ] }, - "1211": { - "op": "frame_dig -2", + "1369": { + "op": "bz get_operator_label_index_after_for@8", "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", - "idx#0", - "label_idx#0", - "operator#0 (copy)" + "idx#0" ] }, - "1213": { - "op": "frame_dig 2", + "1372": { + "op": "frame_dig 0", "defined_out": [ - "next_list#0", - "operator#0 (copy)" - ], - "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", "array_length%0#0", "idx#0", - "label_idx#0", - "operator#0 (copy)", - "next_list#0" - ] - }, - "1215": { - "op": "box_put", + "maybe_value%1#0" + ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0" + "maybe_value%1#0" ] }, - "1216": { - "retsub": true, - "op": "retsub" - }, - "1217": { - "block": "remove_operator_from_label_bool_false@7", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "1374": { + "op": "extract 2 0", + "defined_out": [ + "array_head_and_tail%0#0", "array_length%0#0", "idx#0", - "label_idx#0" - ], - "op": "intc_1 // 0", - "defined_out": [ - "cond#0" + "maybe_value%1#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "cond#0" + "array_head_and_tail%0#0" ] }, - "1218": { - "op": "b remove_operator_from_label_bool_merge@8" - }, - "1221": { - "block": "remove_operator_from_label_bool_false@3", - "stack_in": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "1377": { + "op": "frame_dig 2", + "stack_out": [ + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0" - ], - "op": "intc_1 // 0", + "array_head_and_tail%0#0", + "idx#0" + ] + }, + "1379": { + "op": "intc_2 // 2", "defined_out": [ - "cond#0" + "2", + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#0" ], "stack_out": [ - "label_descriptor#0", - "maybe_value%4#0", - "next_list#0", - "next_list#9", - "stored_label#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label_idx#0", - "cond#0" + "array_head_and_tail%0#0", + "idx#0", + "2" ] }, - "1222": { - "op": "b remove_operator_from_label_bool_merge@4" - }, - "1225": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_labels", - "params": { - "operator#0": "bytes" - }, - "block": "get_operator_labels", - "stack_in": [], - "op": "proto 1 1" - }, - "1228": { - "op": "frame_dig -1", + "1380": { + "op": "*", "defined_out": [ - "operator#0 (copy)" + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_offset_offset%0#0", + "maybe_value%1#0" ], "stack_out": [ - "operator#0 (copy)" + "maybe_value%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0" ] }, - "1230": { - "op": "box_len", + "1381": { + "op": "dig 1", "defined_out": [ - "cond#0", - "maybe_value%0#0" + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "array_length%0#0", + "idx#0", + "item_offset_offset%0#0", + "maybe_value%1#0" ], "stack_out": [ - "maybe_value%0#0", - "cond#0" + "maybe_value%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0", + "array_head_and_tail%0#0 (copy)" ] }, - "1231": { - "op": "bury 1", + "1383": { + "op": "swap", "stack_out": [ - "cond#0" + "maybe_value%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset_offset%0#0" ] }, - "1233": { - "op": "bnz get_operator_labels_after_if_else@3", - "stack_out": [] - }, - "1236": { - "op": "bytec_0 // \"ERR:NOEXIST\"", + "1384": { + "op": "extract_uint16", "defined_out": [ - "\"ERR:NOEXIST\"" + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_offset%0#0", + "maybe_value%1#0" ], "stack_out": [ - "\"ERR:NOEXIST\"" + "maybe_value%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0" ] }, - "1237": { - "op": "log", - "stack_out": [] - }, - "1238": { - "op": "err" - }, - "1239": { - "block": "get_operator_labels_after_if_else@3", - "stack_in": [], - "op": "frame_dig -1", + "1385": { + "op": "dup2", "defined_out": [ - "operator#0 (copy)" + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "array_length%0#0", + "idx#0", + "item_offset%0#0", + "item_offset%0#0 (copy)", + "maybe_value%1#0" ], "stack_out": [ - "operator#0 (copy)" + "maybe_value%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset%0#0 (copy)" ] }, - "1241": { - "op": "box_get", + "1386": { + "op": "extract_uint16", "defined_out": [ - "maybe_exists%1#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_length%0#0", + "item_offset%0#0", "maybe_value%1#0" ], "stack_out": [ "maybe_value%1#0", - "maybe_exists%1#0" + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0" ] }, - "1242": { - "error": "check self.operators entry exists", - "op": "assert // check self.operators entry exists", - "stack_out": [ - "maybe_value%1#0" - ] - }, - "1243": { - "retsub": true, - "op": "retsub" - }, - "1244": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.add_label_to_asset", - "params": { - "label#0": "bytes", - "asset#0": "uint64" - }, - "block": "add_label_to_asset", - "stack_in": [], - "op": "proto 2 0" - }, - "1247": { - "op": "intc_1 // 0", - "stack_out": [ - "maybe_value%1#1" - ] - }, - "1248": { - "op": "dup", + "1387": { + "op": "intc_2 // 2", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0" + "maybe_value%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0", + "2" ] }, - "1249": { - "op": "bytec_2 // \"\"", + "1388": { + "op": "+", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_head_tail_length%0#0", + "item_offset%0#0", + "maybe_value%1#0" + ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0" + "maybe_value%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_head_tail_length%0#0" ] }, - "1250": { - "op": "dup", + "1389": { + "op": "extract3", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#0", + "stored_label#0" + ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", - "idx#0" + "idx#0", + "stored_label#0" ] }, - "1251": { - "op": "frame_dig -2", + "1390": { + "op": "extract 2 0", "defined_out": [ - "label#0 (copy)" + "array_length%0#0", + "idx#0", + "maybe_value%1#0", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label#0 (copy)" + "tmp%2#0" ] }, - "1253": { - "op": "box_len", + "1393": { + "op": "frame_dig -1", "defined_out": [ - "cond#0", - "maybe_value%0#0" + "array_length%0#0", + "idx#0", + "label#0 (copy)", + "maybe_value%1#0", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "maybe_value%0#0", - "cond#0" + "tmp%2#0", + "label#0 (copy)" ] }, - "1254": { - "op": "bury 1", + "1395": { + "op": "==", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#0", + "tmp%3#0" + ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "cond#0" + "tmp%3#0" ] }, - "1256": { - "op": "bnz add_label_to_asset_after_if_else@19", + "1396": { + "op": "bz get_operator_label_index_after_if_else@6", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0" ] }, - "1259": { - "op": "bytec_0 // \"ERR:NOEXIST\"", - "defined_out": [ - "\"ERR:NOEXIST\"" - ], + "1399": { + "op": "frame_dig 2", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "\"ERR:NOEXIST\"" - ] - }, - "1260": { - "op": "log", - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", "idx#0" ] }, - "1261": { - "op": "err" + "1401": { + "op": "frame_bury 0" }, - "1262": { - "block": "add_label_to_asset_after_if_else@19", + "1403": { + "retsub": true, + "op": "retsub" + }, + "1404": { + "block": "get_operator_label_index_after_if_else@6", "stack_in": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0" ], - "op": "frame_dig -2", + "op": "frame_dig 2", "defined_out": [ - "label#0 (copy)" + "idx#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "label#0 (copy)" - ] - }, - "1264": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.operator_only", - "op": "callsub operator_only", - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", "idx#0" ] }, - "1267": { - "op": "frame_dig -1", + "1406": { + "op": "intc_0 // 1", "defined_out": [ - "asset#0 (copy)" + "1", + "idx#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "asset#0 (copy)" - ] - }, - "1269": { - "op": "itob", - "defined_out": [ - "tmp%1#0" - ], - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", "idx#0", - "tmp%1#0" + "1" ] }, - "1270": { - "op": "dup", + "1407": { + "op": "+", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "tmp%1#0", - "tmp%1#0" + "idx#0" ] }, - "1271": { - "op": "frame_bury 1", + "1408": { + "op": "frame_bury 2", "defined_out": [ - "tmp%1#0" + "idx#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0" - ] - }, - "1273": { - "op": "box_len", - "defined_out": [ - "maybe_exists%1#0", "maybe_value%1#0", - "tmp%1#0" - ], - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", "array_length%0#0", - "idx#0", - "maybe_value%1#0", - "maybe_exists%1#0" + "idx#0" ] }, - "1274": { - "op": "bury 1", - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_exists%1#0" - ] + "1410": { + "op": "b get_operator_label_index_for_header@3" }, - "1276": { - "op": "bz add_label_to_asset_else_body@2", - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "1413": { + "block": "get_operator_label_index_after_for@8", + "stack_in": [ + "maybe_value%1#0", "array_length%0#0", "idx#0" - ] - }, - "1279": { - "op": "frame_dig 1", + ], + "op": "intc 4 // 4294967295", + "defined_out": [ + "4294967295" + ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "maybe_value%1#0", "array_length%0#0", "idx#0", - "tmp%1#0" + "4294967295" ] }, - "1281": { - "op": "box_len", + "1415": { + "op": "frame_bury 0" + }, + "1417": { + "retsub": true, + "op": "retsub" + }, + "1418": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.add_operator_to_label", + "params": { + "operator#0": "bytes", + "label#0": "bytes" + }, + "block": "add_operator_to_label", + "stack_in": [], + "op": "proto 2 0" + }, + "1421": { + "op": "frame_dig -1", "defined_out": [ - "maybe_exists%0#1", - "maybe_value%0#0", - "tmp%1#0" + "label#0 (copy)" + ], + "stack_out": [ + "label#0 (copy)" + ] + }, + "1423": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_or_operator_only", + "op": "callsub admin_or_operator_only", + "stack_out": [] + }, + "1426": { + "op": "frame_dig -1", + "stack_out": [ + "label#0 (copy)" + ] + }, + "1428": { + "op": "box_len", + "defined_out": [ + "cond#0", + "maybe_value%0#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "maybe_value%0#0", - "maybe_exists%0#1" + "cond#0" ] }, - "1282": { + "1429": { "op": "bury 1", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_exists%0#1" + "cond#0" ] }, - "1284": { - "op": "bnz add_label_to_asset_after_if_else@6", + "1431": { + "op": "bnz add_operator_to_label_after_if_else@10", + "stack_out": [] + }, + "1434": { + "op": "bytec_1 // \"ERR:NOEXIST\"", + "defined_out": [ + "\"ERR:NOEXIST\"" + ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" + "\"ERR:NOEXIST\"" ] }, - "1287": { - "op": "intc 4 // 4294967296", + "1435": { + "op": "log", + "stack_out": [] + }, + "1436": { + "op": "err" + }, + "1437": { + "block": "add_operator_to_label_after_if_else@10", + "stack_in": [], + "op": "frame_dig -2", "defined_out": [ - "tmp%1#0", - "tmp%3#0" + "operator#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%3#0" + "operator#0 (copy)" ] }, - "1289": { - "block": "add_label_to_asset_after_inlined_smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_label_index@12", - "stack_in": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%3#0" + "1439": { + "op": "box_len", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "1440": { + "op": "bury 1", + "stack_out": [ + "maybe_exists%1#0" + ] + }, + "1442": { + "op": "bz add_operator_to_label_else_body@2", + "stack_out": [] + }, + "1445": { + "op": "frame_dig -2", + "stack_out": [ + "operator#0 (copy)" + ] + }, + "1447": { + "op": "frame_dig -1", + "defined_out": [ + "label#0 (copy)", + "operator#0 (copy)" + ], + "stack_out": [ + "operator#0 (copy)", + "label#0 (copy)" + ] + }, + "1449": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index", + "op": "callsub get_operator_label_index", + "defined_out": [ + "tmp%2#0" ], - "op": "intc_3 // 4294967295", + "stack_out": [ + "tmp%2#0" + ] + }, + "1452": { + "op": "intc 4 // 4294967295", "defined_out": [ "4294967295", - "tmp%3#0" + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%3#0", + "tmp%2#0", "4294967295" ] }, - "1290": { + "1454": { "op": "==", "defined_out": [ "cond#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "cond#0" ] }, - "1291": { - "op": "bnz add_label_to_asset_after_if_else@15", - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" - ] + "1455": { + "op": "bnz add_operator_to_label_after_if_else@6", + "stack_out": [] }, - "1294": { - "op": "bytec 4 // \"ERR:EXISTS\"", + "1458": { + "op": "bytec 5 // \"ERR:EXISTS\"", "defined_out": [ "\"ERR:EXISTS\"" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "\"ERR:EXISTS\"" ] }, - "1296": { + "1460": { "op": "log", - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" - ] + "stack_out": [] }, - "1297": { + "1461": { "op": "err" }, - "1298": { - "block": "add_label_to_asset_after_if_else@15", - "stack_in": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" - ], - "op": "frame_dig 1", - "defined_out": [ - "tmp%1#0" - ], - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0" - ] - }, - "1300": { - "op": "dup", + "1462": { + "block": "add_operator_to_label_after_if_else@6", + "stack_in": [], + "op": "frame_dig -2", "defined_out": [ - "tmp%1#0", - "tmp%1#0 (copy)" + "operator#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", - "tmp%1#0 (copy)" + "operator#0 (copy)" ] }, - "1301": { + "1464": { "op": "box_get", "defined_out": [ "existing#0", - "maybe_exists%2#0", - "tmp%1#0" + "maybe_exists%2#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", "maybe_exists%2#0" ] }, - "1302": { - "error": "check self.assets entry exists", - "op": "assert // check self.assets entry exists", + "1465": { + "error": "check self.operators entry exists", + "op": "assert // check self.operators entry exists", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0" ] }, - "1303": { - "op": "frame_dig -2", + "1466": { + "op": "frame_dig -1", "defined_out": [ "existing#0", - "label#0 (copy)", - "tmp%1#0" + "label#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", "label#0 (copy)" ] }, - "1305": { + "1468": { "op": "len", "defined_out": [ "existing#0", - "length%0#0", - "tmp%1#0" + "length%0#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", "length%0#0" ] }, - "1306": { + "1469": { "op": "itob", "defined_out": [ "as_bytes%0#0", - "existing#0", - "tmp%1#0" + "existing#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", "as_bytes%0#0" ] }, - "1307": { + "1470": { "op": "extract 6 2", "defined_out": [ "existing#0", - "length_uint16%0#0", - "tmp%1#0" + "length_uint16%0#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", "length_uint16%0#0" ] }, - "1310": { - "op": "frame_dig -2", + "1473": { + "op": "frame_dig -1", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", "length_uint16%0#0", "label#0 (copy)" ] }, - "1312": { + "1475": { "op": "concat", "defined_out": [ "encoded_value%0#0", - "existing#0", - "tmp%1#0" + "existing#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", "encoded_value%0#0" ] }, - "1313": { + "1476": { "op": "intc_0 // 1", "defined_out": [ "1", "encoded_value%0#0", - "existing#0", - "tmp%1#0" + "existing#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", "encoded_value%0#0", "1" ] }, - "1314": { + "1477": { "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", "op": "callsub dynamic_array_concat_byte_length_head", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0" ] }, - "1317": { - "op": "dig 1", + "1480": { + "op": "frame_dig -2", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", - "tmp%1#0 (copy)" + "operator#0 (copy)" ] }, - "1319": { + "1482": { "op": "box_del", "defined_out": [ "existing#0", - "tmp%1#0", "{box_del}" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0", "{box_del}" ] }, - "1320": { + "1483": { "op": "pop", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0", "existing#0" ] }, - "1321": { - "op": "box_put", + "1484": { + "op": "frame_dig -2", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" + "existing#0", + "operator#0 (copy)" ] }, - "1322": { - "block": "add_label_to_asset_after_if_else@3", - "stack_in": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" - ], - "op": "frame_dig -2", + "1486": { + "op": "swap", + "stack_out": [ + "operator#0 (copy)", + "existing#0" + ] + }, + "1487": { + "op": "box_put", + "stack_out": [] + }, + "1488": { + "block": "add_operator_to_label_after_if_else@3", + "stack_in": [], + "op": "frame_dig -1", "defined_out": [ "label#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label#0 (copy)" ] }, - "1324": { + "1490": { "op": "box_get", "defined_out": [ "label_descriptor#0", "maybe_exists%3#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", "maybe_exists%3#0" ] }, - "1325": { + "1491": { "error": "check self.labels entry exists", "op": "assert // check self.labels entry exists", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0" ] }, - "1326": { + "1492": { "op": "dup", "defined_out": [ "label_descriptor#0", "label_descriptor#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", "label_descriptor#0 (copy)" ] }, - "1327": { - "op": "intc_2 // 2", + "1493": { + "op": "pushint 10 // 10", "defined_out": [ - "2", + "10", "label_descriptor#0", "label_descriptor#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", "label_descriptor#0 (copy)", - "2" + "10" ] }, - "1328": { + "1495": { "op": "extract_uint64", "defined_out": [ "label_descriptor#0", - "tmp%13#0" + "tmp%9#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", - "tmp%13#0" + "tmp%9#0" ] }, - "1329": { + "1496": { "op": "intc_0 // 1", "defined_out": [ "1", "label_descriptor#0", - "tmp%13#0" + "tmp%9#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", - "tmp%13#0", + "tmp%9#0", "1" ] }, - "1330": { + "1497": { "op": "+", "defined_out": [ "label_descriptor#0", "to_encode%0#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", "to_encode%0#0" ] }, - "1331": { + "1498": { "op": "itob", "defined_out": [ "label_descriptor#0", "val_as_bytes%0#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", "val_as_bytes%0#0" ] }, - "1332": { - "op": "replace2 2", + "1499": { + "op": "replace2 10", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0" ] }, - "1334": { - "op": "frame_dig -2", + "1501": { + "op": "frame_dig -1", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", "label#0 (copy)" ] }, - "1336": { + "1503": { "op": "box_del", "defined_out": [ "label_descriptor#0", "{box_del}" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", "{box_del}" ] }, - "1337": { + "1504": { "op": "pop", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0" ] }, - "1338": { - "op": "frame_dig -2", + "1505": { + "op": "frame_dig -1", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label_descriptor#0", "label#0 (copy)" ] }, - "1340": { + "1507": { "op": "swap", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", "label#0 (copy)", "label_descriptor#0" ] }, - "1341": { + "1508": { "op": "box_put", - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" - ] + "stack_out": [] }, - "1342": { + "1509": { "retsub": true, "op": "retsub" }, - "1343": { - "block": "add_label_to_asset_after_if_else@6", - "stack_in": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" + "1510": { + "block": "add_operator_to_label_else_body@2", + "stack_in": [], + "op": "frame_dig -1", + "defined_out": [ + "label#0 (copy)" ], - "op": "frame_dig 1", + "stack_out": [ + "label#0 (copy)" + ] + }, + "1512": { + "op": "len", "defined_out": [ - "tmp%1#0" + "length%1#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "tmp%1#0" + "length%1#0" ] }, - "1345": { - "op": "box_get", + "1513": { + "op": "itob", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#1", - "tmp%1#0" + "as_bytes%1#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#1", - "maybe_exists%1#0" + "as_bytes%1#0" ] }, - "1346": { - "op": "swap", + "1514": { + "op": "extract 6 2", + "defined_out": [ + "length_uint16%1#0" + ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_exists%1#0", - "maybe_value%1#1" + "length_uint16%1#0" ] }, - "1347": { - "op": "dup", + "1517": { + "op": "frame_dig -1", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_exists%1#0", - "maybe_value%1#1", - "maybe_value%1#1 (copy)" + "length_uint16%1#0", + "label#0 (copy)" ] }, - "1348": { - "op": "cover 2", + "1519": { + "op": "concat", + "defined_out": [ + "encoded_value%1#0" + ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#1", - "maybe_exists%1#0", - "maybe_value%1#1" + "encoded_value%1#0" ] }, - "1350": { - "op": "frame_bury 0", + "1520": { + "op": "bytec 6 // 0x0002", "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#1", - "tmp%1#0" + "0x0002", + "encoded_value%1#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#1", - "maybe_exists%1#0" + "encoded_value%1#0", + "0x0002" ] }, - "1352": { - "error": "check self.assets entry exists", - "op": "assert // check self.assets entry exists", + "1522": { + "op": "swap", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#1" + "0x0002", + "encoded_value%1#0" ] }, - "1353": { - "op": "intc_1 // 0", + "1523": { + "op": "concat", "defined_out": [ - "0", - "maybe_value%1#1", - "tmp%1#0" + "result%1#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#1", - "0" + "result%1#0" ] }, - "1354": { - "op": "extract_uint16", + "1524": { + "op": "bytec 10 // 0x0001", "defined_out": [ - "array_length%0#0", - "maybe_value%1#1", - "tmp%1#0" + "0x0001", + "result%1#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "array_length%0#0" + "result%1#0", + "0x0001" ] }, - "1355": { - "op": "frame_bury 2", - "defined_out": [ - "array_length%0#0", - "maybe_value%1#1", - "tmp%1#0" - ], + "1526": { + "op": "swap", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" + "0x0001", + "result%1#0" ] }, - "1357": { - "op": "intc_1 // 0", + "1527": { + "op": "concat", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#1", - "tmp%1#0" + "array_data%0#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "idx#0" + "array_data%0#0" ] }, - "1358": { - "op": "frame_bury 3", + "1528": { + "op": "frame_dig -2", "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#1", - "tmp%1#0" + "array_data%0#0", + "operator#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" + "array_data%0#0", + "operator#0 (copy)" ] }, - "1360": { - "block": "add_label_to_asset_for_header@7", - "stack_in": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" - ], - "op": "frame_dig 3", + "1530": { + "op": "box_del", "defined_out": [ - "idx#0" + "array_data%0#0", + "{box_del}" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "idx#0" + "array_data%0#0", + "{box_del}" ] }, - "1362": { - "op": "frame_dig 2", - "defined_out": [ - "array_length%0#0", - "idx#0" - ], + "1531": { + "op": "pop", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "idx#0", - "array_length%0#0" + "array_data%0#0" ] }, - "1364": { - "op": "<", - "defined_out": [ - "array_length%0#0", - "continue_looping%0#0", - "idx#0" - ], + "1532": { + "op": "frame_dig -2", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "continue_looping%0#0" + "array_data%0#0", + "operator#0 (copy)" ] }, - "1365": { - "op": "bz add_label_to_asset_after_for@11", + "1534": { + "op": "swap", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" + "operator#0 (copy)", + "array_data%0#0" ] }, - "1368": { - "op": "frame_dig 0", - "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#1" - ], - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#1" - ] + "1535": { + "op": "box_put", + "stack_out": [] }, - "1370": { - "op": "extract 2 0", - "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#1" - ], + "1536": { + "op": "b add_operator_to_label_after_if_else@3" + }, + "1539": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_operator_from_label", + "params": { + "operator#0": "bytes", + "label#0": "bytes" + }, + "block": "remove_operator_from_label", + "stack_in": [], + "op": "proto 2 0" + }, + "1542": { + "op": "intc_1 // 0", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0" + "label_descriptor#0" ] }, - "1373": { - "op": "frame_dig 3", + "1543": { + "op": "dupn 4", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "idx#0" + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0" ] }, - "1375": { - "op": "intc_2 // 2", - "defined_out": [ - "2", - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "maybe_value%1#1" - ], + "1545": { + "op": "bytec_3 // \"\"", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "array_head_and_tail%0#0", - "idx#0", - "2" + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0" ] }, - "1376": { - "op": "*", - "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_offset_offset%0#0", - "maybe_value%1#1" - ], + "1546": { + "op": "dupn 2", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset_offset%0#0" + "label_idx#0" ] }, - "1377": { - "op": "dig 1", + "1548": { + "op": "frame_dig -1", "defined_out": [ - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "array_length%0#0", - "idx#0", - "item_offset_offset%0#0", - "maybe_value%1#1" + "label#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset_offset%0#0", - "array_head_and_tail%0#0 (copy)" + "label_idx#0", + "label#0 (copy)" ] }, - "1379": { - "op": "swap", + "1550": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.admin_or_operator_only", + "op": "callsub admin_or_operator_only", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "item_offset_offset%0#0" + "label_idx#0" ] }, - "1380": { - "op": "extract_uint16", - "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_offset%0#0", - "maybe_value%1#1" - ], + "1553": { + "op": "frame_dig -1", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0" + "label_idx#0", + "label#0 (copy)" ] }, - "1381": { - "op": "dup2", + "1555": { + "op": "box_len", "defined_out": [ - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "array_length%0#0", - "idx#0", - "item_offset%0#0", - "item_offset%0#0 (copy)", - "maybe_value%1#1" + "cond#0", + "maybe_value%0#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "array_head_and_tail%0#0 (copy)", - "item_offset%0#0 (copy)" + "label_idx#0", + "maybe_value%0#0", + "cond#0" ] }, - "1382": { - "op": "extract_uint16", - "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_length%0#0", - "item_offset%0#0", - "maybe_value%1#1" - ], + "1556": { + "op": "bury 1", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_length%0#0" + "label_idx#0", + "cond#0" ] }, - "1383": { - "op": "intc_2 // 2", + "1558": { + "op": "bnz remove_operator_from_label_after_if_else@28", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_length%0#0", - "2" + "label_idx#0" ] }, - "1384": { - "op": "+", + "1561": { + "op": "bytec_1 // \"ERR:NOEXIST\"", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "idx#0", - "item_head_tail_length%0#0", - "item_offset%0#0", - "maybe_value%1#1" + "\"ERR:NOEXIST\"" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_head_tail_length%0#0" + "label_idx#0", + "\"ERR:NOEXIST\"" ] }, - "1385": { - "op": "extract3", - "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#1", - "stored_label#0" - ], + "1562": { + "op": "log", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "stored_label#0" + "label_idx#0" ] }, - "1386": { - "op": "extract 2 0", - "defined_out": [ + "1563": { + "op": "err" + }, + "1564": { + "block": "remove_operator_from_label_after_if_else@28", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "maybe_value%1#1", - "tmp%4#1" + "label_idx#0" + ], + "op": "frame_dig -2", + "defined_out": [ + "operator#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "tmp%4#1" + "label_idx#0", + "operator#0 (copy)" ] }, - "1389": { - "op": "frame_dig -2", + "1566": { + "op": "box_len", "defined_out": [ - "array_length%0#0", - "idx#0", - "label#0 (copy)", - "maybe_value%1#1", - "tmp%4#1" + "cond#0", + "maybe_value%1#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "tmp%4#1", - "label#0 (copy)" + "label_idx#0", + "maybe_value%1#0", + "cond#0" ] }, - "1391": { - "op": "==", - "defined_out": [ - "array_length%0#0", - "idx#0", - "maybe_value%1#1", - "tmp%5#1" - ], + "1567": { + "op": "bury 1", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "tmp%5#1" + "label_idx#0", + "cond#0" ] }, - "1392": { - "op": "bz add_label_to_asset_after_if_else@10", + "1569": { + "op": "bnz remove_operator_from_label_after_if_else@32", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", - "idx#0" + "idx#0", + "label_idx#0" ] }, - "1395": { - "op": "frame_dig 3", + "1572": { + "op": "bytec_1 // \"ERR:NOEXIST\"", "defined_out": [ + "\"ERR:NOEXIST\"" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "maybe_value%1#1", - "tmp%3#0" - ], + "label_idx#0", + "\"ERR:NOEXIST\"" + ] + }, + "1573": { + "op": "log", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "tmp%3#0" + "label_idx#0" ] }, - "1397": { - "op": "b add_label_to_asset_after_inlined_smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_label_index@12" + "1574": { + "op": "err" }, - "1400": { - "block": "add_label_to_asset_after_if_else@10", + "1575": { + "block": "remove_operator_from_label_after_if_else@32", "stack_in": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", - "idx#0" + "idx#0", + "label_idx#0" ], - "op": "frame_dig 3", + "op": "frame_dig -2", "defined_out": [ - "idx#0" + "operator#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "idx#0" + "label_idx#0", + "operator#0 (copy)" ] }, - "1402": { - "op": "intc_0 // 1", + "1577": { + "op": "frame_dig -1", "defined_out": [ - "1", - "idx#0" + "label#0 (copy)", + "operator#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0", - "idx#0", - "1" - ] - }, - "1403": { - "op": "+", - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "idx#0" + "label_idx#0", + "operator#0 (copy)", + "label#0 (copy)" ] }, - "1404": { - "op": "frame_bury 3", + "1579": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index", + "op": "callsub get_operator_label_index", "defined_out": [ - "idx#0" + "label_idx#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", - "idx#0" + "idx#0", + "label_idx#0", + "label_idx#0" ] }, - "1406": { - "op": "b add_label_to_asset_for_header@7" - }, - "1409": { - "block": "add_label_to_asset_after_for@11", - "stack_in": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" - ], - "op": "intc_3 // 4294967295", - "defined_out": [ - "tmp%3#0" - ], + "1582": { + "op": "dup", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "tmp%3#0" + "label_idx#0", + "label_idx#0", + "label_idx#0" ] }, - "1410": { - "op": "b add_label_to_asset_after_inlined_smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_label_index@12" - }, - "1413": { - "block": "add_label_to_asset_else_body@2", - "stack_in": [ - "maybe_value%1#1", - "tmp%1#0", - "array_length%0#0", - "idx#0" - ], - "op": "frame_dig -2", + "1583": { + "op": "frame_bury 7", "defined_out": [ - "label#0 (copy)" + "label_idx#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "label#0 (copy)" + "label_idx#0", + "label_idx#0" ] }, - "1415": { - "op": "len", + "1585": { + "op": "intc 4 // 4294967295", "defined_out": [ - "length%1#0" + "4294967295", + "label_idx#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "length%1#0" + "label_idx#0", + "label_idx#0", + "4294967295" ] }, - "1416": { - "op": "itob", + "1587": { + "op": "!=", "defined_out": [ - "as_bytes%1#0" + "label_idx#0", + "tmp%2#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "as_bytes%1#0" + "label_idx#0", + "tmp%2#0" ] }, - "1417": { - "op": "extract 6 2", - "defined_out": [ - "length_uint16%1#0" - ], + "1588": { + "op": "bz remove_operator_from_label_bool_false@3", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "length_uint16%1#0" + "label_idx#0" ] }, - "1420": { - "op": "frame_dig -2", + "1591": { + "op": "frame_dig 7", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "length_uint16%1#0", - "label#0 (copy)" + "label_idx#0", + "label_idx#0" ] }, - "1422": { - "op": "concat", + "1593": { + "op": "intc 5 // 4294967296", "defined_out": [ - "encoded_value%1#0" + "4294967296", + "label_idx#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "encoded_value%1#0" + "label_idx#0", + "label_idx#0", + "4294967296" ] }, - "1423": { - "op": "bytec 9 // 0x0002", + "1595": { + "op": "!=", "defined_out": [ - "0x0002", - "encoded_value%1#0" + "label_idx#0", + "tmp%3#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "encoded_value%1#0", - "0x0002" + "label_idx#0", + "tmp%3#0" ] }, - "1425": { - "op": "swap", + "1596": { + "op": "bz remove_operator_from_label_bool_false@3", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "0x0002", - "encoded_value%1#0" + "label_idx#0" ] }, - "1426": { - "op": "concat", + "1599": { + "op": "intc_0 // 1", "defined_out": [ - "result%1#0" + "cond#0", + "label_idx#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "result%1#0" + "label_idx#0", + "cond#0" ] }, - "1427": { - "op": "bytec 10 // 0x0001", - "defined_out": [ - "0x0001", - "result%1#0" - ], - "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "1600": { + "block": "remove_operator_from_label_bool_merge@4", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "result%1#0", - "0x0001" - ] - }, - "1429": { - "op": "swap", + "label_idx#0", + "cond#0" + ], + "op": "bnz remove_operator_from_label_after_if_else@24", + "defined_out": [], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "0x0001", - "result%1#0" + "label_idx#0" ] }, - "1430": { - "op": "concat", + "1603": { + "op": "bytec_1 // \"ERR:NOEXIST\"", "defined_out": [ - "array_data%0#0" + "\"ERR:NOEXIST\"" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_data%0#0" + "label_idx#0", + "\"ERR:NOEXIST\"" ] }, - "1431": { - "op": "frame_dig 1", - "defined_out": [ - "array_data%0#0", - "tmp%1#0" - ], + "1604": { + "op": "log", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_data%0#0", - "tmp%1#0" + "label_idx#0" ] }, - "1433": { - "op": "dup", + "1605": { + "op": "err" + }, + "1606": { + "block": "remove_operator_from_label_after_if_else@24", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ], + "op": "frame_dig -1", "defined_out": [ - "array_data%0#0", - "tmp%1#0", - "tmp%1#0 (copy)" + "label#0 (copy)" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_data%0#0", - "tmp%1#0", - "tmp%1#0 (copy)" + "label_idx#0", + "label#0 (copy)" ] }, - "1434": { - "op": "box_del", + "1608": { + "op": "box_get", "defined_out": [ - "array_data%0#0", - "tmp%1#0", - "{box_del}" + "label_descriptor#0", + "maybe_exists%2#0" ], "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_data%0#0", - "tmp%1#0", - "{box_del}" + "label_idx#0", + "label_descriptor#0", + "maybe_exists%2#0" ] }, - "1435": { - "op": "pop", + "1609": { + "op": "swap", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "array_data%0#0", - "tmp%1#0" + "label_idx#0", + "maybe_exists%2#0", + "label_descriptor#0" ] }, - "1436": { - "op": "swap", + "1610": { + "op": "dup", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", "idx#0", - "tmp%1#0", - "array_data%0#0" + "label_idx#0", + "maybe_exists%2#0", + "label_descriptor#0", + "label_descriptor#0 (copy)" ] }, - "1437": { - "op": "box_put", + "1611": { + "op": "cover 2", "stack_out": [ - "maybe_value%1#1", - "tmp%1#0", + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", "array_length%0#0", - "idx#0" - ] - }, - "1438": { - "op": "b add_label_to_asset_after_if_else@3" - }, - "1441": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_label_from_asset", - "params": { - "label#0": "bytes", - "asset#0": "uint64" - }, - "block": "remove_label_from_asset", - "stack_in": [], - "op": "proto 2 0" - }, - "1444": { - "op": "intc_1 // 0", - "stack_out": [ - "maybe_value%3#0" + "idx#0", + "label_idx#0", + "label_descriptor#0", + "maybe_exists%2#0", + "label_descriptor#0" ] }, - "1445": { - "op": "dupn 3", + "1613": { + "op": "frame_bury 0", + "defined_out": [ + "label_descriptor#0", + "maybe_exists%2#0" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0" + "array_length%0#0", + "idx#0", + "label_idx#0", + "label_descriptor#0", + "maybe_exists%2#0" ] }, - "1447": { - "op": "bytec_2 // \"\"", + "1615": { + "error": "check self.labels entry exists", + "op": "assert // check self.labels entry exists", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0" + "array_length%0#0", + "idx#0", + "label_idx#0", + "label_descriptor#0" ] }, - "1448": { - "op": "dupn 2", + "1616": { + "error": "Index access is out of bounds", + "op": "extract 10 8 // on error: Index access is out of bounds", + "defined_out": [ + "label_descriptor#0", + "reinterpret_biguint%0#0" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "array_length%0#0", + "idx#0", + "label_idx#0", + "reinterpret_biguint%0#0" ] }, - "1450": { - "op": "frame_dig -2", + "1619": { + "op": "pushbytes 0x0000000000000001", "defined_out": [ - "label#0 (copy)" + "0x0000000000000001", + "label_descriptor#0", + "reinterpret_biguint%0#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "label#0 (copy)" + "label_idx#0", + "reinterpret_biguint%0#0", + "0x0000000000000001" ] }, - "1452": { - "op": "box_len", + "1629": { + "op": "b>", "defined_out": [ - "cond#1", - "maybe_value%0#0" + "label_descriptor#0", + "tmp%5#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "maybe_value%0#0", - "cond#1" + "label_idx#0", + "tmp%5#0" ] }, - "1453": { - "op": "bury 1", + "1630": { + "op": "bnz remove_operator_from_label_bool_true@6", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "cond#1" + "label_idx#0" ] }, - "1455": { - "op": "bnz remove_label_from_asset_after_if_else@20", + "1633": { + "op": "frame_dig 0", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "array_length%0#0", + "idx#0", + "label_idx#0", + "label_descriptor#0" ] }, - "1458": { - "op": "bytec_0 // \"ERR:NOEXIST\"", + "1635": { + "error": "Index access is out of bounds", + "op": "extract 2 8 // on error: Index access is out of bounds", "defined_out": [ - "\"ERR:NOEXIST\"" + "label_descriptor#0", + "reinterpret_biguint%2#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "\"ERR:NOEXIST\"" + "label_idx#0", + "reinterpret_biguint%2#0" ] }, - "1459": { - "op": "log", + "1638": { + "op": "bytec 8 // 0x0000000000000000", + "defined_out": [ + "0x0000000000000000", + "label_descriptor#0", + "reinterpret_biguint%2#0" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "array_length%0#0", + "idx#0", + "label_idx#0", + "reinterpret_biguint%2#0", + "0x0000000000000000" ] }, - "1460": { - "op": "err" - }, - "1461": { - "block": "remove_label_from_asset_after_if_else@20", - "stack_in": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" - ], - "op": "frame_dig -2", + "1640": { + "op": "b==", "defined_out": [ - "label#0 (copy)" + "label_descriptor#0", + "tmp%6#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "label#0 (copy)" + "label_idx#0", + "tmp%6#0" ] }, - "1463": { - "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.operator_only", - "op": "callsub operator_only", + "1641": { + "op": "bz remove_operator_from_label_bool_false@7", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "array_length%0#0", + "idx#0", + "label_idx#0" ] }, - "1466": { - "op": "intc_1 // 0", - "defined_out": [ - "found#0" - ], - "stack_out": [ - "maybe_value%3#0", + "1644": { + "block": "remove_operator_from_label_bool_true@6", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "found#0" - ] - }, - "1467": { - "op": "frame_bury 5", + "label_idx#0" + ], + "op": "intc_0 // 1", "defined_out": [ - "found#0" + "cond#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "array_length%0#0", + "idx#0", + "label_idx#0", + "cond#0" ] }, - "1469": { - "op": "frame_dig -1", - "defined_out": [ - "asset#0 (copy)", - "found#0" + "1645": { + "block": "remove_operator_from_label_bool_merge@8", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "cond#0" ], + "op": "bnz remove_operator_from_label_after_if_else@20", + "defined_out": [], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "asset#0 (copy)" + "label_idx#0" ] }, - "1471": { - "op": "itob", + "1648": { + "op": "bytec 9 // \"ERR:NOEMPTY\"", "defined_out": [ - "found#0", - "tmp%1#0" + "\"ERR:NOEMPTY\"" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%1#0" + "label_idx#0", + "\"ERR:NOEMPTY\"" ] }, - "1472": { - "op": "dup", + "1650": { + "op": "log", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%1#0", - "tmp%1#0" + "label_idx#0" ] }, - "1473": { - "op": "frame_bury 3", - "defined_out": [ - "found#0", - "tmp%1#0" - ], - "stack_out": [ - "maybe_value%3#0", + "1651": { + "op": "err" + }, + "1652": { + "block": "remove_operator_from_label_after_if_else@20", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%1#0" - ] - }, - "1475": { - "op": "box_get", + "label_idx#0" + ], + "op": "frame_dig 0", "defined_out": [ - "found#0", - "maybe_exists%1#0", - "maybe_value%1#0", - "tmp%1#0" + "label_descriptor#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "maybe_value%1#0", - "maybe_exists%1#0" + "label_idx#0", + "label_descriptor#0" ] }, - "1476": { - "error": "check self.assets entry exists", - "op": "assert // check self.assets entry exists", + "1654": { + "op": "dup", + "defined_out": [ + "label_descriptor#0", + "label_descriptor#0 (copy)" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "maybe_value%1#0" + "label_idx#0", + "label_descriptor#0", + "label_descriptor#0 (copy)" ] }, - "1477": { - "op": "intc_1 // 0", + "1655": { + "op": "pushint 10 // 10", + "defined_out": [ + "10", + "label_descriptor#0", + "label_descriptor#0 (copy)" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "maybe_value%1#0", - "0" + "label_idx#0", + "label_descriptor#0", + "label_descriptor#0 (copy)", + "10" ] }, - "1478": { - "op": "extract_uint16", + "1657": { + "op": "extract_uint64", "defined_out": [ - "found#0", - "tmp%1#0", - "tmp%3#0" + "label_descriptor#0", + "tmp%8#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%3#0" + "label_idx#0", + "label_descriptor#0", + "tmp%8#0" ] }, - "1479": { + "1658": { "op": "intc_0 // 1", + "defined_out": [ + "1", + "label_descriptor#0", + "tmp%8#0" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%3#0", + "label_idx#0", + "label_descriptor#0", + "tmp%8#0", "1" ] }, - "1480": { - "op": "==", + "1659": { + "op": "-", "defined_out": [ - "found#0", - "tmp%1#0", - "tmp%4#0" + "label_descriptor#0", + "to_encode%0#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%4#0" + "label_idx#0", + "label_descriptor#0", + "to_encode%0#0" ] }, - "1481": { - "op": "bz remove_label_from_asset_else_body@5", + "1660": { + "op": "itob", + "defined_out": [ + "label_descriptor#0", + "val_as_bytes%0#0" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "array_length%0#0", + "idx#0", + "label_idx#0", + "label_descriptor#0", + "val_as_bytes%0#0" ] }, - "1484": { - "op": "frame_dig 3", + "1661": { + "op": "replace2 10", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%1#0" + "label_idx#0", + "label_descriptor#0" ] }, - "1486": { - "op": "box_get", + "1663": { + "op": "frame_dig -1", "defined_out": [ - "found#0", - "maybe_exists%2#0", - "maybe_value%2#0", - "tmp%1#0" + "label#0 (copy)", + "label_descriptor#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "maybe_value%2#0", - "maybe_exists%2#0" + "label_idx#0", + "label_descriptor#0", + "label#0 (copy)" ] }, - "1487": { - "error": "check self.assets entry exists", - "op": "assert // check self.assets entry exists", + "1665": { + "op": "box_del", + "defined_out": [ + "label_descriptor#0", + "{box_del}" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "maybe_value%2#0" + "label_idx#0", + "label_descriptor#0", + "{box_del}" ] }, - "1488": { - "op": "dup", - "defined_out": [ - "found#0", - "maybe_value%2#0", - "maybe_value%2#0 (copy)", - "tmp%1#0" - ], + "1666": { + "op": "pop", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "maybe_value%2#0", - "maybe_value%2#0 (copy)" + "label_idx#0", + "label_descriptor#0" ] }, - "1489": { - "op": "extract 2 0", - "defined_out": [ - "array_head_and_tail%0#0", - "found#0", - "maybe_value%2#0", - "tmp%1#0" - ], + "1667": { + "op": "frame_dig -1", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "maybe_value%2#0", - "array_head_and_tail%0#0" + "label_idx#0", + "label_descriptor#0", + "label#0 (copy)" ] }, - "1492": { + "1669": { "op": "swap", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "maybe_value%2#0" + "label_idx#0", + "label#0 (copy)", + "label_descriptor#0" ] }, - "1493": { - "op": "intc_1 // 0", + "1670": { + "op": "box_put", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "maybe_value%2#0", - "0" + "label_idx#0" ] }, - "1494": { - "op": "extract_uint16", + "1671": { + "op": "frame_dig -2", "defined_out": [ - "array_head_and_tail%0#0", - "array_length%0#0", - "found#0", - "tmp%1#0" + "label_descriptor#0", + "operator#0 (copy)" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "array_length%0#0" + "label_idx#0", + "operator#0 (copy)" ] }, - "1495": { - "error": "Index access is out of bounds", - "op": "assert // Index access is out of bounds", + "1673": { + "op": "box_get", + "defined_out": [ + "label_descriptor#0", + "maybe_exists%3#0", + "maybe_value%3#0" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0" + "label_idx#0", + "maybe_value%3#0", + "maybe_exists%3#0" ] }, - "1496": { - "op": "dup", - "defined_out": [ - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "found#0", - "tmp%1#0" - ], + "1674": { + "error": "check self.operators entry exists", + "op": "assert // check self.operators entry exists", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)" + "label_idx#0", + "maybe_value%3#0" ] }, - "1497": { + "1675": { "op": "intc_1 // 0", + "defined_out": [ + "0", + "label_descriptor#0", + "maybe_value%3#0" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", + "label_idx#0", + "maybe_value%3#0", "0" ] }, - "1498": { + "1676": { "op": "extract_uint16", "defined_out": [ - "array_head_and_tail%0#0", - "found#0", - "item_offset%0#0", - "tmp%1#0" + "label_descriptor#0", + "tmp%11#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0" + "label_idx#0", + "tmp%11#0" ] }, - "1499": { - "op": "dup2", - "defined_out": [ - "array_head_and_tail%0#0", - "array_head_and_tail%0#0 (copy)", - "found#0", - "item_offset%0#0", - "item_offset%0#0 (copy)", - "tmp%1#0" - ], + "1677": { + "op": "intc_0 // 1", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "array_head_and_tail%0#0 (copy)", - "item_offset%0#0 (copy)" + "label_idx#0", + "tmp%11#0", + "1" ] }, - "1500": { - "op": "extract_uint16", + "1678": { + "op": "==", "defined_out": [ - "array_head_and_tail%0#0", - "found#0", - "item_length%0#0", - "item_offset%0#0", - "tmp%1#0" + "label_descriptor#0", + "tmp%12#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_length%0#0" + "label_idx#0", + "tmp%12#0" ] }, - "1501": { - "op": "intc_2 // 2", - "defined_out": [ - "2", - "array_head_and_tail%0#0", - "found#0", - "item_length%0#0", - "item_offset%0#0", - "tmp%1#0" - ], + "1679": { + "op": "bz remove_operator_from_label_else_body@10", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_length%0#0", - "2" + "label_idx#0" ] }, - "1502": { - "op": "+", - "defined_out": [ - "array_head_and_tail%0#0", - "found#0", - "item_head_tail_length%0#0", - "item_offset%0#0", - "tmp%1#0" - ], + "1682": { + "op": "frame_dig -2", "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "array_head_and_tail%0#0", - "item_offset%0#0", - "item_head_tail_length%0#0" + "label_idx#0", + "operator#0 (copy)" ] }, - "1503": { - "op": "extract3", + "1684": { + "op": "box_del", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "{box_del}" + ] + }, + "1685": { + "op": "pop", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1686": { + "retsub": true, + "op": "retsub" + }, + "1687": { + "block": "remove_operator_from_label_else_body@10", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ], + "op": "bytec_2 // 0x0000", "defined_out": [ - "found#0", - "tmp%1#0", - "tmp%7#0" + "next_list#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%7#0" + "label_idx#0", + "next_list#0" ] }, - "1504": { - "op": "extract 2 0", + "1688": { + "op": "frame_bury 2", "defined_out": [ - "found#0", - "tmp%1#0", - "tmp%8#0" + "next_list#0" ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%8#0" + "label_idx#0" ] }, - "1507": { + "1690": { "op": "frame_dig -2", + "defined_out": [ + "next_list#0", + "operator#0 (copy)" + ], "stack_out": [ - "maybe_value%3#0", + "label_descriptor#0", + "maybe_value%4#0", "next_list#0", + "next_list#9", "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", + "array_length%0#0", "idx#0", - "tmp%8#0", - "label#0 (copy)" + "label_idx#0", + "operator#0 (copy)" ] }, - "1509": { - "op": "==", + "1692": { + "op": "box_get", "defined_out": [ - "found#0", - "tmp%1#0", - "tmp%9#0" + "maybe_exists%4#0", + "maybe_value%4#0", + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "maybe_exists%4#0" + ] + }, + "1693": { + "op": "swap", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_exists%4#0", + "maybe_value%4#0" + ] + }, + "1694": { + "op": "dup", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_exists%4#0", + "maybe_value%4#0", + "maybe_value%4#0 (copy)" + ] + }, + "1695": { + "op": "cover 2", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "maybe_exists%4#0", + "maybe_value%4#0" + ] + }, + "1697": { + "op": "frame_bury 1", + "defined_out": [ + "maybe_exists%4#0", + "maybe_value%4#0", + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "maybe_exists%4#0" + ] + }, + "1699": { + "error": "check self.operators entry exists", + "op": "assert // check self.operators entry exists", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0" + ] + }, + "1700": { + "op": "intc_1 // 0", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "0" + ] + }, + "1701": { + "op": "extract_uint16", + "defined_out": [ + "array_length%0#0", + "maybe_value%4#0", + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "array_length%0#0" + ] + }, + "1702": { + "op": "frame_bury 5", + "defined_out": [ + "array_length%0#0", + "maybe_value%4#0", + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1704": { + "op": "intc_1 // 0", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%4#0", + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0" + ] + }, + "1705": { + "op": "frame_bury 6", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%4#0", + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1707": { + "block": "remove_operator_from_label_for_header@11", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ], + "op": "frame_dig 6", + "defined_out": [ + "idx#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0" + ] + }, + "1709": { + "op": "frame_dig 5", + "defined_out": [ + "array_length%0#0", + "idx#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_length%0#0" + ] + }, + "1711": { + "op": "<", + "defined_out": [ + "array_length%0#0", + "continue_looping%0#0", + "idx#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "continue_looping%0#0" + ] + }, + "1712": { + "op": "bz remove_operator_from_label_after_for@16", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1715": { + "op": "frame_dig 1", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0" + ] + }, + "1717": { + "op": "extract 2 0", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "array_head_and_tail%0#0" + ] + }, + "1720": { + "op": "frame_dig 6", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "array_head_and_tail%0#0", + "idx#0" + ] + }, + "1722": { + "op": "dup", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "idx#0 (copy)", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "array_head_and_tail%0#0", + "idx#0 (copy)", + "idx#0 (copy)" + ] + }, + "1723": { + "op": "cover 2", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "idx#0 (copy)" + ] + }, + "1725": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "idx#0 (copy)", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "idx#0 (copy)", + "2" + ] + }, + "1726": { + "op": "*", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_offset_offset%0#0", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0" + ] + }, + "1727": { + "op": "dig 1", + "defined_out": [ + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "array_length%0#0", + "idx#0", + "item_offset_offset%0#0", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0", + "array_head_and_tail%0#0 (copy)" + ] + }, + "1729": { + "op": "swap", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset_offset%0#0" + ] + }, + "1730": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_offset%0#0", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "1731": { + "op": "dup2", + "defined_out": [ + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "array_length%0#0", + "idx#0", + "item_offset%0#0", + "item_offset%0#0 (copy)", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset%0#0 (copy)" + ] + }, + "1732": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_length%0#0", + "item_offset%0#0", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0" + ] + }, + "1733": { + "op": "intc_2 // 2", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0", + "2" + ] + }, + "1734": { + "op": "+", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_head_tail_length%0#0", + "item_offset%0#0", + "maybe_value%4#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_head_tail_length%0#0" + ] + }, + "1735": { + "op": "extract3", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%4#0", + "stored_label#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "stored_label#0" + ] + }, + "1736": { + "op": "frame_bury 4", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%4#0", + "stored_label#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0" + ] + }, + "1738": { + "op": "frame_dig 7", + "defined_out": [ + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "stored_label#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "label_idx#0" + ] + }, + "1740": { + "op": "!=", + "defined_out": [ + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "stored_label#0", + "tmp%15#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "tmp%15#0" + ] + }, + "1741": { + "op": "frame_dig 2", + "defined_out": [ + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "next_list#9", + "stored_label#0", + "tmp%15#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "tmp%15#0", + "next_list#9" + ] + }, + "1743": { + "op": "frame_bury 3", + "defined_out": [ + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "next_list#9", + "stored_label#0", + "tmp%15#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "tmp%15#0" + ] + }, + "1745": { + "op": "bz remove_operator_from_label_after_if_else@14", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1748": { + "op": "frame_dig 2", + "defined_out": [ + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "next_list#0" + ] + }, + "1750": { + "op": "frame_dig 4", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "next_list#0", + "stored_label#0" + ] + }, + "1752": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "array_length%0#0", + "idx#0", + "label_idx#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "next_list#0", + "stored_label#0", + "1" + ] + }, + "1753": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", + "op": "callsub dynamic_array_concat_byte_length_head", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "next_list#9" + ] + }, + "1756": { + "op": "frame_bury 3", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1758": { + "block": "remove_operator_from_label_after_if_else@14", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ], + "op": "frame_dig 3", + "defined_out": [ + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "next_list#0" + ] + }, + "1760": { + "op": "frame_bury 2", + "defined_out": [ + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1762": { + "op": "frame_dig 6", + "defined_out": [ + "idx#0", + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0" + ] + }, + "1764": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "idx#0", + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0", + "1" + ] + }, + "1765": { + "op": "+", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "idx#0" + ] + }, + "1766": { + "op": "frame_bury 6", + "defined_out": [ + "idx#0", + "next_list#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1768": { + "op": "b remove_operator_from_label_for_header@11" + }, + "1771": { + "block": "remove_operator_from_label_after_for@16", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ], + "op": "frame_dig -2", + "defined_out": [ + "operator#0 (copy)" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "operator#0 (copy)" + ] + }, + "1773": { + "op": "box_del", + "defined_out": [ + "{box_del}" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "{box_del}" + ] + }, + "1774": { + "op": "pop", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1775": { + "op": "frame_dig -2", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "operator#0 (copy)" + ] + }, + "1777": { + "op": "frame_dig 2", + "defined_out": [ + "next_list#0", + "operator#0 (copy)" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "operator#0 (copy)", + "next_list#0" + ] + }, + "1779": { + "op": "box_put", + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ] + }, + "1780": { + "retsub": true, + "op": "retsub" + }, + "1781": { + "block": "remove_operator_from_label_bool_false@7", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ], + "op": "intc_1 // 0", + "defined_out": [ + "cond#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "cond#0" + ] + }, + "1782": { + "op": "b remove_operator_from_label_bool_merge@8" + }, + "1785": { + "block": "remove_operator_from_label_bool_false@3", + "stack_in": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0" + ], + "op": "intc_1 // 0", + "defined_out": [ + "cond#0" + ], + "stack_out": [ + "label_descriptor#0", + "maybe_value%4#0", + "next_list#0", + "next_list#9", + "stored_label#0", + "array_length%0#0", + "idx#0", + "label_idx#0", + "cond#0" + ] + }, + "1786": { + "op": "b remove_operator_from_label_bool_merge@4" + }, + "1789": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_labels", + "params": { + "operator#0": "bytes" + }, + "block": "get_operator_labels", + "stack_in": [], + "op": "proto 1 1" + }, + "1792": { + "op": "frame_dig -1", + "defined_out": [ + "operator#0 (copy)" + ], + "stack_out": [ + "operator#0 (copy)" + ] + }, + "1794": { + "op": "box_len", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0" + ], + "stack_out": [ + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "1795": { + "op": "bury 1", + "stack_out": [ + "maybe_exists%0#0" + ] + }, + "1797": { + "op": "bz get_operator_labels_after_if_else@2", + "stack_out": [] + }, + "1800": { + "op": "frame_dig -1", + "stack_out": [ + "operator#0 (copy)" + ] + }, + "1802": { + "op": "box_get", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "1803": { + "error": "check self.operators entry exists", + "op": "assert // check self.operators entry exists", + "stack_out": [ + "maybe_value%1#0" + ] + }, + "1804": { + "retsub": true, + "op": "retsub" + }, + "1805": { + "block": "get_operator_labels_after_if_else@2", + "stack_in": [], + "op": "bytec_2 // 0x0000", + "defined_out": [ + "0x0000" + ], + "stack_out": [ + "0x0000" + ] + }, + "1806": { + "retsub": true, + "op": "retsub" + }, + "1807": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.add_label_to_asset", + "params": { + "label#0": "bytes", + "asset#0": "uint64" + }, + "block": "add_label_to_asset", + "stack_in": [], + "op": "proto 2 0" + }, + "1810": { + "op": "intc_1 // 0", + "stack_out": [ + "maybe_value%1#1" + ] + }, + "1811": { + "op": "dup", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0" + ] + }, + "1812": { + "op": "bytec_3 // \"\"", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0" + ] + }, + "1813": { + "op": "dup", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1814": { + "op": "frame_dig -2", + "defined_out": [ + "label#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label#0 (copy)" + ] + }, + "1816": { + "op": "box_len", + "defined_out": [ + "cond#0", + "maybe_value%0#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_value%0#0", + "cond#0" + ] + }, + "1817": { + "op": "bury 1", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "cond#0" + ] + }, + "1819": { + "op": "bnz add_label_to_asset_after_if_else@19", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1822": { + "op": "bytec_1 // \"ERR:NOEXIST\"", + "defined_out": [ + "\"ERR:NOEXIST\"" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "\"ERR:NOEXIST\"" + ] + }, + "1823": { + "op": "log", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1824": { + "op": "err" + }, + "1825": { + "block": "add_label_to_asset_after_if_else@19", + "stack_in": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ], + "op": "frame_dig -2", + "defined_out": [ + "label#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label#0 (copy)" + ] + }, + "1827": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.operator_only", + "op": "callsub operator_only", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1830": { + "op": "frame_dig -1", + "defined_out": [ + "asset#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "asset#0 (copy)" + ] + }, + "1832": { + "op": "itob", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0" + ] + }, + "1833": { + "op": "dup", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "tmp%1#0" + ] + }, + "1834": { + "op": "frame_bury 1", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0" + ] + }, + "1836": { + "op": "box_len", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "1837": { + "op": "bury 1", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_exists%1#0" + ] + }, + "1839": { + "op": "bz add_label_to_asset_else_body@2", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1842": { + "op": "frame_dig 1", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0" + ] + }, + "1844": { + "op": "box_len", + "defined_out": [ + "maybe_exists%0#1", + "maybe_value%0#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_value%0#0", + "maybe_exists%0#1" + ] + }, + "1845": { + "op": "bury 1", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_exists%0#1" + ] + }, + "1847": { + "op": "bnz add_label_to_asset_after_if_else@6", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1850": { + "op": "intc 5 // 4294967296", + "defined_out": [ + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%3#0" + ] + }, + "1852": { + "block": "add_label_to_asset_after_inlined_smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_label_index@12", + "stack_in": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%3#0" + ], + "op": "intc 4 // 4294967295", + "defined_out": [ + "4294967295", + "tmp%3#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%3#0", + "4294967295" + ] + }, + "1854": { + "op": "==", + "defined_out": [ + "cond#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "cond#0" + ] + }, + "1855": { + "op": "bnz add_label_to_asset_after_if_else@15", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1858": { + "op": "bytec 5 // \"ERR:EXISTS\"", + "defined_out": [ + "\"ERR:EXISTS\"" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "\"ERR:EXISTS\"" + ] + }, + "1860": { + "op": "log", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1861": { + "op": "err" + }, + "1862": { + "block": "add_label_to_asset_after_if_else@15", + "stack_in": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0" + ] + }, + "1864": { + "op": "dup", + "defined_out": [ + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ] + }, + "1865": { + "op": "box_get", + "defined_out": [ + "existing#0", + "maybe_exists%2#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "maybe_exists%2#0" + ] + }, + "1866": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0" + ] + }, + "1867": { + "op": "frame_dig -2", + "defined_out": [ + "existing#0", + "label#0 (copy)", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "label#0 (copy)" + ] + }, + "1869": { + "op": "len", + "defined_out": [ + "existing#0", + "length%0#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "length%0#0" + ] + }, + "1870": { + "op": "itob", + "defined_out": [ + "as_bytes%0#0", + "existing#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "as_bytes%0#0" + ] + }, + "1871": { + "op": "extract 6 2", + "defined_out": [ + "existing#0", + "length_uint16%0#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "length_uint16%0#0" + ] + }, + "1874": { + "op": "frame_dig -2", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "length_uint16%0#0", + "label#0 (copy)" + ] + }, + "1876": { + "op": "concat", + "defined_out": [ + "encoded_value%0#0", + "existing#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "encoded_value%0#0" + ] + }, + "1877": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "encoded_value%0#0", + "existing#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "encoded_value%0#0", + "1" + ] + }, + "1878": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", + "op": "callsub dynamic_array_concat_byte_length_head", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0" + ] + }, + "1881": { + "op": "dig 1", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "tmp%1#0 (copy)" + ] + }, + "1883": { + "op": "box_del", + "defined_out": [ + "existing#0", + "tmp%1#0", + "{box_del}" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0", + "{box_del}" + ] + }, + "1884": { + "op": "pop", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "existing#0" + ] + }, + "1885": { + "op": "box_put", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1886": { + "block": "add_label_to_asset_after_if_else@3", + "stack_in": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ], + "op": "frame_dig -2", + "defined_out": [ + "label#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label#0 (copy)" + ] + }, + "1888": { + "op": "box_get", + "defined_out": [ + "label_descriptor#0", + "maybe_exists%3#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "maybe_exists%3#0" + ] + }, + "1889": { + "error": "check self.labels entry exists", + "op": "assert // check self.labels entry exists", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0" + ] + }, + "1890": { + "op": "dup", + "defined_out": [ + "label_descriptor#0", + "label_descriptor#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "label_descriptor#0 (copy)" + ] + }, + "1891": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "label_descriptor#0", + "label_descriptor#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "label_descriptor#0 (copy)", + "2" + ] + }, + "1892": { + "op": "extract_uint64", + "defined_out": [ + "label_descriptor#0", + "tmp%13#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "tmp%13#0" + ] + }, + "1893": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "label_descriptor#0", + "tmp%13#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "tmp%13#0", + "1" + ] + }, + "1894": { + "op": "+", + "defined_out": [ + "label_descriptor#0", + "to_encode%0#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "to_encode%0#0" + ] + }, + "1895": { + "op": "itob", + "defined_out": [ + "label_descriptor#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "val_as_bytes%0#0" + ] + }, + "1896": { + "op": "replace2 2", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0" + ] + }, + "1898": { + "op": "frame_dig -2", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "label#0 (copy)" + ] + }, + "1900": { + "op": "box_del", + "defined_out": [ + "label_descriptor#0", + "{box_del}" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "{box_del}" + ] + }, + "1901": { + "op": "pop", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0" + ] + }, + "1902": { + "op": "frame_dig -2", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label_descriptor#0", + "label#0 (copy)" + ] + }, + "1904": { + "op": "swap", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label#0 (copy)", + "label_descriptor#0" + ] + }, + "1905": { + "op": "box_put", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1906": { + "retsub": true, + "op": "retsub" + }, + "1907": { + "block": "add_label_to_asset_after_if_else@6", + "stack_in": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0" + ] + }, + "1909": { + "op": "box_get", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#1", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "maybe_exists%1#0" + ] + }, + "1910": { + "op": "swap", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_exists%1#0", + "maybe_value%1#1" + ] + }, + "1911": { + "op": "dup", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_exists%1#0", + "maybe_value%1#1", + "maybe_value%1#1 (copy)" + ] + }, + "1912": { + "op": "cover 2", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "maybe_exists%1#0", + "maybe_value%1#1" + ] + }, + "1914": { + "op": "frame_bury 0", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#1", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "maybe_exists%1#0" + ] + }, + "1916": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#1" + ] + }, + "1917": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "maybe_value%1#1", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "0" + ] + }, + "1918": { + "op": "extract_uint16", + "defined_out": [ + "array_length%0#0", + "maybe_value%1#1", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_length%0#0" + ] + }, + "1919": { + "op": "frame_bury 2", + "defined_out": [ + "array_length%0#0", + "maybe_value%1#1", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1921": { + "op": "intc_1 // 0", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "idx#0" + ] + }, + "1922": { + "op": "frame_bury 3", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1924": { + "block": "add_label_to_asset_for_header@7", + "stack_in": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ], + "op": "frame_dig 3", + "defined_out": [ + "idx#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "idx#0" + ] + }, + "1926": { + "op": "frame_dig 2", + "defined_out": [ + "array_length%0#0", + "idx#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "idx#0", + "array_length%0#0" + ] + }, + "1928": { + "op": "<", + "defined_out": [ + "array_length%0#0", + "continue_looping%0#0", + "idx#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "continue_looping%0#0" + ] + }, + "1929": { + "op": "bz add_label_to_asset_after_for@11", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1932": { + "op": "frame_dig 0", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#1" + ] + }, + "1934": { + "op": "extract 2 0", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0" + ] + }, + "1937": { + "op": "frame_dig 3", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "idx#0" + ] + }, + "1939": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "maybe_value%1#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "idx#0", + "2" + ] + }, + "1940": { + "op": "*", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_offset_offset%0#0", + "maybe_value%1#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0" + ] + }, + "1941": { + "op": "dig 1", + "defined_out": [ + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "array_length%0#0", + "idx#0", + "item_offset_offset%0#0", + "maybe_value%1#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0", + "array_head_and_tail%0#0 (copy)" + ] + }, + "1943": { + "op": "swap", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset_offset%0#0" + ] + }, + "1944": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_offset%0#0", + "maybe_value%1#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "1945": { + "op": "dup2", + "defined_out": [ + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "array_length%0#0", + "idx#0", + "item_offset%0#0", + "item_offset%0#0 (copy)", + "maybe_value%1#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset%0#0 (copy)" + ] + }, + "1946": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_length%0#0", + "item_offset%0#0", + "maybe_value%1#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0" + ] + }, + "1947": { + "op": "intc_2 // 2", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0", + "2" + ] + }, + "1948": { + "op": "+", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "idx#0", + "item_head_tail_length%0#0", + "item_offset%0#0", + "maybe_value%1#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_head_tail_length%0#0" + ] + }, + "1949": { + "op": "extract3", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "stored_label#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "stored_label#0" + ] + }, + "1950": { + "op": "extract 2 0", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "tmp%4#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%4#1" + ] + }, + "1953": { + "op": "frame_dig -2", + "defined_out": [ + "array_length%0#0", + "idx#0", + "label#0 (copy)", + "maybe_value%1#1", + "tmp%4#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%4#1", + "label#0 (copy)" + ] + }, + "1955": { + "op": "==", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "tmp%5#1" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%5#1" + ] + }, + "1956": { + "op": "bz add_label_to_asset_after_if_else@10", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1959": { + "op": "frame_dig 3", + "defined_out": [ + "array_length%0#0", + "idx#0", + "maybe_value%1#1", + "tmp%3#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%3#0" + ] + }, + "1961": { + "op": "b add_label_to_asset_after_inlined_smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_label_index@12" + }, + "1964": { + "block": "add_label_to_asset_after_if_else@10", + "stack_in": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ], + "op": "frame_dig 3", + "defined_out": [ + "idx#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "idx#0" + ] + }, + "1966": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "idx#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "idx#0", + "1" + ] + }, + "1967": { + "op": "+", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "idx#0" + ] + }, + "1968": { + "op": "frame_bury 3", + "defined_out": [ + "idx#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "1970": { + "op": "b add_label_to_asset_for_header@7" + }, + "1973": { + "block": "add_label_to_asset_after_for@11", + "stack_in": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ], + "op": "intc 4 // 4294967295", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%3#0" + ] + }, + "1975": { + "op": "b add_label_to_asset_after_inlined_smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_label_index@12" + }, + "1978": { + "block": "add_label_to_asset_else_body@2", + "stack_in": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ], + "op": "frame_dig -2", + "defined_out": [ + "label#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "label#0 (copy)" + ] + }, + "1980": { + "op": "len", + "defined_out": [ + "length%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "length%1#0" + ] + }, + "1981": { + "op": "itob", + "defined_out": [ + "as_bytes%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "as_bytes%1#0" + ] + }, + "1982": { + "op": "extract 6 2", + "defined_out": [ + "length_uint16%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "length_uint16%1#0" + ] + }, + "1985": { + "op": "frame_dig -2", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "length_uint16%1#0", + "label#0 (copy)" + ] + }, + "1987": { + "op": "concat", + "defined_out": [ + "encoded_value%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "encoded_value%1#0" + ] + }, + "1988": { + "op": "bytec 6 // 0x0002", + "defined_out": [ + "0x0002", + "encoded_value%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "encoded_value%1#0", + "0x0002" + ] + }, + "1990": { + "op": "swap", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "0x0002", + "encoded_value%1#0" + ] + }, + "1991": { + "op": "concat", + "defined_out": [ + "result%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "result%1#0" + ] + }, + "1992": { + "op": "bytec 10 // 0x0001", + "defined_out": [ + "0x0001", + "result%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "result%1#0", + "0x0001" + ] + }, + "1994": { + "op": "swap", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "0x0001", + "result%1#0" + ] + }, + "1995": { + "op": "concat", + "defined_out": [ + "array_data%0#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_data%0#0" + ] + }, + "1996": { + "op": "frame_dig 1", + "defined_out": [ + "array_data%0#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_data%0#0", + "tmp%1#0" + ] + }, + "1998": { + "op": "dup", + "defined_out": [ + "array_data%0#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_data%0#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ] + }, + "1999": { + "op": "box_del", + "defined_out": [ + "array_data%0#0", + "tmp%1#0", + "{box_del}" + ], + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_data%0#0", + "tmp%1#0", + "{box_del}" + ] + }, + "2000": { + "op": "pop", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "array_data%0#0", + "tmp%1#0" + ] + }, + "2001": { + "op": "swap", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0", + "tmp%1#0", + "array_data%0#0" + ] + }, + "2002": { + "op": "box_put", + "stack_out": [ + "maybe_value%1#1", + "tmp%1#0", + "array_length%0#0", + "idx#0" + ] + }, + "2003": { + "op": "b add_label_to_asset_after_if_else@3" + }, + "2006": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.remove_label_from_asset", + "params": { + "label#0": "bytes", + "asset#0": "uint64" + }, + "block": "remove_label_from_asset", + "stack_in": [], + "op": "proto 2 0" + }, + "2009": { + "op": "intc_1 // 0", + "stack_out": [ + "maybe_value%3#0" + ] + }, + "2010": { + "op": "dupn 3", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0" + ] + }, + "2012": { + "op": "bytec_3 // \"\"", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0" + ] + }, + "2013": { + "op": "dupn 2", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2015": { + "op": "frame_dig -2", + "defined_out": [ + "label#0 (copy)" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label#0 (copy)" + ] + }, + "2017": { + "op": "box_len", + "defined_out": [ + "cond#1", + "maybe_value%0#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%0#0", + "cond#1" + ] + }, + "2018": { + "op": "bury 1", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "cond#1" + ] + }, + "2020": { + "op": "bnz remove_label_from_asset_after_if_else@20", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2023": { + "op": "bytec_1 // \"ERR:NOEXIST\"", + "defined_out": [ + "\"ERR:NOEXIST\"" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "\"ERR:NOEXIST\"" + ] + }, + "2024": { + "op": "log", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2025": { + "op": "err" + }, + "2026": { + "block": "remove_label_from_asset_after_if_else@20", + "stack_in": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ], + "op": "frame_dig -2", + "defined_out": [ + "label#0 (copy)" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label#0 (copy)" + ] + }, + "2028": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling.operator_only", + "op": "callsub operator_only", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2031": { + "op": "intc_1 // 0", + "defined_out": [ + "found#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "found#0" + ] + }, + "2032": { + "op": "frame_bury 5", + "defined_out": [ + "found#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2034": { + "op": "frame_dig -1", + "defined_out": [ + "asset#0 (copy)", + "found#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "asset#0 (copy)" + ] + }, + "2036": { + "op": "itob", + "defined_out": [ + "found#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0" + ] + }, + "2037": { + "op": "dup", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0", + "tmp%1#0" + ] + }, + "2038": { + "op": "frame_bury 3", + "defined_out": [ + "found#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0" + ] + }, + "2040": { + "op": "box_get", + "defined_out": [ + "found#0", + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "2041": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%1#0" + ] + }, + "2042": { + "op": "intc_1 // 0", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%1#0", + "0" + ] + }, + "2043": { + "op": "extract_uint16", + "defined_out": [ + "found#0", + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%3#0" + ] + }, + "2044": { + "op": "intc_0 // 1", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%3#0", + "1" + ] + }, + "2045": { + "op": "==", + "defined_out": [ + "found#0", + "tmp%1#0", + "tmp%4#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%4#0" + ] + }, + "2046": { + "op": "bz remove_label_from_asset_else_body@5", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2049": { + "op": "frame_dig 3", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0" + ] + }, + "2051": { + "op": "box_get", + "defined_out": [ + "found#0", + "maybe_exists%2#0", + "maybe_value%2#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%2#0", + "maybe_exists%2#0" + ] + }, + "2052": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%2#0" + ] + }, + "2053": { + "op": "dup", + "defined_out": [ + "found#0", + "maybe_value%2#0", + "maybe_value%2#0 (copy)", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%2#0", + "maybe_value%2#0 (copy)" + ] + }, + "2054": { + "op": "extract 2 0", + "defined_out": [ + "array_head_and_tail%0#0", + "found#0", + "maybe_value%2#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%2#0", + "array_head_and_tail%0#0" + ] + }, + "2057": { + "op": "swap", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "maybe_value%2#0" + ] + }, + "2058": { + "op": "intc_1 // 0", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "maybe_value%2#0", + "0" + ] + }, + "2059": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "found#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "array_length%0#0" + ] + }, + "2060": { + "error": "Index access is out of bounds", + "op": "assert // Index access is out of bounds", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0" + ] + }, + "2061": { + "op": "dup", + "defined_out": [ + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "found#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)" + ] + }, + "2062": { + "op": "intc_1 // 0", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "0" + ] + }, + "2063": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "found#0", + "item_offset%0#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "2064": { + "op": "dup2", + "defined_out": [ + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "found#0", + "item_offset%0#0", + "item_offset%0#0 (copy)", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset%0#0 (copy)" + ] + }, + "2065": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "found#0", + "item_length%0#0", + "item_offset%0#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0" + ] + }, + "2066": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "array_head_and_tail%0#0", + "found#0", + "item_length%0#0", + "item_offset%0#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_length%0#0", + "2" + ] + }, + "2067": { + "op": "+", + "defined_out": [ + "array_head_and_tail%0#0", + "found#0", + "item_head_tail_length%0#0", + "item_offset%0#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "item_head_tail_length%0#0" + ] + }, + "2068": { + "op": "extract3", + "defined_out": [ + "found#0", + "tmp%1#0", + "tmp%7#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%7#0" + ] + }, + "2069": { + "op": "extract 2 0", + "defined_out": [ + "found#0", + "tmp%1#0", + "tmp%8#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%8#0" + ] + }, + "2072": { + "op": "frame_dig -2", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%8#0", + "label#0 (copy)" + ] + }, + "2074": { + "op": "==", + "defined_out": [ + "found#0", + "tmp%1#0", + "tmp%9#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%9#0" + ] + }, + "2075": { + "op": "bz remove_label_from_asset_else_body@3", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2078": { + "op": "frame_dig 3", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0" + ] + }, + "2080": { + "op": "box_del", + "defined_out": [ + "found#0", + "tmp%1#0", + "{box_del}" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "{box_del}" + ] + }, + "2081": { + "op": "pop", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2082": { + "op": "intc_0 // 1", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "found#0" + ] + }, + "2083": { + "op": "frame_bury 5", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2085": { + "block": "remove_label_from_asset_after_if_else@13", + "stack_in": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ], + "op": "frame_dig 5", + "defined_out": [ + "found#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "found#0" + ] + }, + "2087": { + "op": "bnz remove_label_from_asset_after_if_else@16", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2090": { + "op": "bytec_1 // \"ERR:NOEXIST\"", + "defined_out": [ + "\"ERR:NOEXIST\"", + "found#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "\"ERR:NOEXIST\"" + ] + }, + "2091": { + "op": "log", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2092": { + "op": "err" + }, + "2093": { + "block": "remove_label_from_asset_after_if_else@16", + "stack_in": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ], + "op": "frame_dig -2", + "defined_out": [ + "label#0 (copy)" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label#0 (copy)" + ] + }, + "2095": { + "op": "box_get", + "defined_out": [ + "label_descriptor#0", + "maybe_exists%4#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "maybe_exists%4#0" + ] + }, + "2096": { + "error": "check self.labels entry exists", + "op": "assert // check self.labels entry exists", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0" + ] + }, + "2097": { + "op": "dup", + "defined_out": [ + "label_descriptor#0", + "label_descriptor#0 (copy)" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "label_descriptor#0 (copy)" + ] + }, + "2098": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "label_descriptor#0", + "label_descriptor#0 (copy)" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "label_descriptor#0 (copy)", + "2" + ] + }, + "2099": { + "op": "extract_uint64", + "defined_out": [ + "label_descriptor#0", + "tmp%20#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "tmp%20#0" + ] + }, + "2100": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "label_descriptor#0", + "tmp%20#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "tmp%20#0", + "1" + ] + }, + "2101": { + "op": "-", + "defined_out": [ + "label_descriptor#0", + "to_encode%0#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "to_encode%0#0" + ] + }, + "2102": { + "op": "itob", + "defined_out": [ + "label_descriptor#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "val_as_bytes%0#0" + ] + }, + "2103": { + "op": "replace2 2", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0" + ] + }, + "2105": { + "op": "frame_dig -2", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "label#0 (copy)" + ] + }, + "2107": { + "op": "box_del", + "defined_out": [ + "label_descriptor#0", + "{box_del}" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "{box_del}" + ] + }, + "2108": { + "op": "pop", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0" + ] + }, + "2109": { + "op": "frame_dig -2", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label_descriptor#0", + "label#0 (copy)" + ] + }, + "2111": { + "op": "swap", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "label#0 (copy)", + "label_descriptor#0" + ] + }, + "2112": { + "op": "box_put", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2113": { + "retsub": true, + "op": "retsub" + }, + "2114": { + "block": "remove_label_from_asset_else_body@3", + "stack_in": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ], + "op": "intc_1 // 0", + "defined_out": [ + "found#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "found#0" + ] + }, + "2115": { + "op": "frame_bury 5", + "defined_out": [ + "found#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2117": { + "op": "b remove_label_from_asset_after_if_else@13" + }, + "2120": { + "block": "remove_label_from_asset_else_body@5", + "stack_in": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ], + "op": "bytec_2 // 0x0000", + "defined_out": [ + "next_list#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "next_list#0" + ] + }, + "2121": { + "op": "frame_bury 1", + "defined_out": [ + "next_list#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2123": { + "op": "frame_dig 3", + "defined_out": [ + "next_list#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0" + ] + }, + "2125": { + "op": "box_get", + "defined_out": [ + "maybe_exists%3#0", + "maybe_value%3#0", + "next_list#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%3#0", + "maybe_exists%3#0" + ] + }, + "2126": { + "op": "swap", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_exists%3#0", + "maybe_value%3#0" + ] + }, + "2127": { + "op": "dup", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_exists%3#0", + "maybe_value%3#0", + "maybe_value%3#0 (copy)" + ] + }, + "2128": { + "op": "cover 2", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%3#0", + "maybe_exists%3#0", + "maybe_value%3#0" + ] + }, + "2130": { + "op": "frame_bury 0", + "defined_out": [ + "maybe_exists%3#0", + "maybe_value%3#0", + "next_list#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%3#0", + "maybe_exists%3#0" + ] + }, + "2132": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%3#0" + ] + }, + "2133": { + "op": "intc_1 // 0", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%3#0", + "0" + ] + }, + "2134": { + "op": "extract_uint16", + "defined_out": [ + "array_length%1#0", + "maybe_value%3#0", + "next_list#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_length%1#0" + ] + }, + "2135": { + "op": "frame_bury 4", + "defined_out": [ + "array_length%1#0", + "maybe_value%3#0", + "next_list#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2137": { + "op": "intc_1 // 0", + "defined_out": [ + "array_length%1#0", + "idx#0", + "maybe_value%3#0", + "next_list#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "idx#0" + ] + }, + "2138": { + "op": "frame_bury 6", + "defined_out": [ + "array_length%1#0", + "idx#0", + "maybe_value%3#0", + "next_list#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2140": { + "block": "remove_label_from_asset_for_header@6", + "stack_in": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ], + "op": "frame_dig 6", + "defined_out": [ + "idx#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "idx#0" + ] + }, + "2142": { + "op": "frame_dig 4", + "defined_out": [ + "array_length%1#0", + "idx#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "idx#0", + "array_length%1#0" + ] + }, + "2144": { + "op": "<", + "defined_out": [ + "array_length%1#0", + "continue_looping%0#0", + "idx#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "continue_looping%0#0" + ] + }, + "2145": { + "op": "bz remove_label_from_asset_after_for@12", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2148": { + "op": "frame_dig 0", + "defined_out": [ + "array_length%1#0", + "idx#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "maybe_value%3#0" + ] + }, + "2150": { + "op": "extract 2 0", + "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", + "idx#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0" + ] + }, + "2153": { + "op": "frame_dig 6", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "idx#0" + ] + }, + "2155": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "array_head_and_tail%1#0", + "array_length%1#0", + "idx#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "idx#0", + "2" + ] + }, + "2156": { + "op": "*", + "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", + "idx#0", + "item_offset_offset%1#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "item_offset_offset%1#0" + ] + }, + "2157": { + "op": "dig 1", + "defined_out": [ + "array_head_and_tail%1#0", + "array_head_and_tail%1#0 (copy)", + "array_length%1#0", + "idx#0", + "item_offset_offset%1#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "item_offset_offset%1#0", + "array_head_and_tail%1#0 (copy)" + ] + }, + "2159": { + "op": "swap", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "array_head_and_tail%1#0 (copy)", + "item_offset_offset%1#0" + ] + }, + "2160": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", + "idx#0", + "item_offset%1#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "item_offset%1#0" + ] + }, + "2161": { + "op": "dup2", + "defined_out": [ + "array_head_and_tail%1#0", + "array_head_and_tail%1#0 (copy)", + "array_length%1#0", + "idx#0", + "item_offset%1#0", + "item_offset%1#0 (copy)", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "array_head_and_tail%1#0 (copy)", + "item_offset%1#0 (copy)" + ] + }, + "2162": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", + "idx#0", + "item_length%1#0", + "item_offset%1#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "item_length%1#0" + ] + }, + "2163": { + "op": "intc_2 // 2", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "item_length%1#0", + "2" + ] + }, + "2164": { + "op": "+", + "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", + "idx#0", + "item_head_tail_length%1#0", + "item_offset%1#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "item_head_tail_length%1#0" + ] + }, + "2165": { + "op": "extract3", + "defined_out": [ + "array_length%1#0", + "idx#0", + "maybe_value%3#0", + "stored_label#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "stored_label#0" + ] + }, + "2166": { + "op": "dup", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "stored_label#0", + "stored_label#0" + ] + }, + "2167": { + "op": "frame_bury 2", + "defined_out": [ + "array_length%1#0", + "idx#0", + "maybe_value%3#0", + "stored_label#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "stored_label#0" + ] + }, + "2169": { + "op": "extract 2 0", + "defined_out": [ + "array_length%1#0", + "idx#0", + "maybe_value%3#0", + "stored_label#0", + "tmp%14#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%14#0" + ] + }, + "2172": { + "op": "frame_dig -2", + "defined_out": [ + "array_length%1#0", + "idx#0", + "label#0 (copy)", + "maybe_value%3#0", + "stored_label#0", + "tmp%14#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%14#0", + "label#0 (copy)" + ] + }, + "2174": { + "op": "!=", + "defined_out": [ + "array_length%1#0", + "idx#0", + "maybe_value%3#0", + "stored_label#0", + "tmp%15#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%15#0" + ] + }, + "2175": { + "op": "bz remove_label_from_asset_else_body@9", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2178": { + "op": "frame_dig 1", + "defined_out": [ + "array_length%1#0", + "idx#0", + "maybe_value%3#0", + "next_list#0", + "stored_label#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "next_list#0" + ] + }, + "2180": { + "op": "frame_dig 2", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "next_list#0", + "stored_label#0" + ] + }, + "2182": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "array_length%1#0", + "idx#0", + "maybe_value%3#0", + "next_list#0", + "stored_label#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "next_list#0", + "stored_label#0", + "1" + ] + }, + "2183": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", + "op": "callsub dynamic_array_concat_byte_length_head", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "next_list#0" + ] + }, + "2186": { + "op": "frame_bury 1", + "defined_out": [ + "array_length%1#0", + "idx#0", + "maybe_value%3#0", + "next_list#0", + "stored_label#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2188": { + "block": "remove_label_from_asset_after_if_else@10", + "stack_in": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ], + "op": "frame_dig 6", + "defined_out": [ + "idx#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "idx#0" + ] + }, + "2190": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "idx#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "idx#0", + "1" + ] + }, + "2191": { + "op": "+", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "idx#0" + ] + }, + "2192": { + "op": "frame_bury 6", + "defined_out": [ + "idx#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2194": { + "op": "b remove_label_from_asset_for_header@6" + }, + "2197": { + "block": "remove_label_from_asset_else_body@9", + "stack_in": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ], + "op": "intc_0 // 1", + "defined_out": [ + "found#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "found#0" + ] + }, + "2198": { + "op": "frame_bury 5", + "defined_out": [ + "found#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2200": { + "op": "b remove_label_from_asset_after_if_else@10" + }, + "2203": { + "block": "remove_label_from_asset_after_for@12", + "stack_in": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ], + "op": "frame_dig 3", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0" + ] + }, + "2205": { + "op": "dup", + "defined_out": [ + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ] + }, + "2206": { + "op": "box_del", + "defined_out": [ + "tmp%1#0", + "{box_del}" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0", + "{box_del}" + ] + }, + "2207": { + "op": "pop", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0" + ] + }, + "2208": { + "op": "frame_dig 1", + "defined_out": [ + "next_list#0", + "tmp%1#0" + ], + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0", + "tmp%1#0", + "next_list#0" + ] + }, + "2210": { + "op": "box_put", + "stack_out": [ + "maybe_value%3#0", + "next_list#0", + "stored_label#0", + "tmp%1#0", + "array_length%1#0", + "found#0", + "idx#0" + ] + }, + "2211": { + "op": "b remove_label_from_asset_after_if_else@13" + }, + "2214": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_labels", + "params": { + "asset#0": "uint64" + }, + "block": "get_asset_labels", + "stack_in": [], + "op": "proto 1 1" + }, + "2217": { + "op": "frame_dig -1", + "defined_out": [ + "asset#0 (copy)" + ], + "stack_out": [ + "asset#0 (copy)" + ] + }, + "2219": { + "op": "itob", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2220": { + "op": "dup", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0" + ] + }, + "2221": { + "op": "box_len", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2222": { + "op": "bury 1", + "stack_out": [ + "tmp%0#0", + "maybe_exists%0#0" + ] + }, + "2224": { + "op": "bz get_asset_labels_after_if_else@2", + "stack_out": [ + "tmp%0#0" + ] + }, + "2227": { + "op": "frame_dig 0", + "stack_out": [ + "tmp%0#0", + "tmp%0#0" + ] + }, + "2229": { + "op": "box_get", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "2230": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "stack_out": [ + "tmp%0#0", + "maybe_value%1#0" + ] + }, + "2231": { + "op": "swap" + }, + "2232": { + "retsub": true, + "op": "retsub" + }, + "2233": { + "block": "get_asset_labels_after_if_else@2", + "stack_in": [ + "tmp%0#0" + ], + "op": "bytec_2 // 0x0000", + "defined_out": [ + "0x0000" + ], + "stack_out": [ + "tmp%0#0", + "0x0000" + ] + }, + "2234": { + "op": "swap" + }, + "2235": { + "retsub": true, + "op": "retsub" + }, + "2236": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_labels", + "params": { + "assets#0": "bytes" + }, + "block": "get_assets_labels", + "stack_in": [], + "op": "proto 1 1" + }, + "2239": { + "op": "intc_1 // 0", + "stack_out": [ + "tmp%0#0" + ] + }, + "2240": { + "op": "bytec_2 // 0x0000" + }, + "2241": { + "op": "frame_dig -1" + }, + "2243": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "assets#0 (copy)", + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "assets#0 (copy)", + "0" + ] + }, + "2244": { + "op": "extract_uint16", + "defined_out": [ + "array_length%0#0", + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0" + ] + }, + "2245": { + "op": "intc_1 // 0", + "defined_out": [ + "_i#0", + "array_length%0#0", + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ] + }, + "2246": { + "block": "get_assets_labels_for_header@1", + "stack_in": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ], + "op": "frame_dig 3", + "defined_out": [ + "_i#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2248": { + "op": "frame_dig 2", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "_i#0", + "array_length%0#0" + ] + }, + "2250": { + "op": "<", + "defined_out": [ + "_i#0", + "array_length%0#0", + "continue_looping%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "continue_looping%0#0" + ] + }, + "2251": { + "op": "bz get_assets_labels_after_for@7", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ] + }, + "2254": { + "op": "frame_dig -1", + "defined_out": [ + "_i#0", + "array_length%0#0", + "assets#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "assets#0 (copy)" + ] + }, + "2256": { + "op": "extract 2 0", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0" + ] + }, + "2259": { + "op": "frame_dig 3", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0" + ] + }, + "2261": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0", + "8" + ] + }, + "2262": { + "op": "*", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_offset%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "2263": { + "op": "extract_uint64", + "defined_out": [ + "_i#0", + "array_length%0#0", + "asset#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "asset#0" + ] + }, + "2264": { + "op": "itob", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "tmp%0#0" + ] + }, + "2265": { + "op": "dup", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "tmp%0#0", + "tmp%0#0" + ] + }, + "2266": { + "op": "frame_bury 0", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "tmp%0#0" + ] + }, + "2268": { + "op": "box_len", + "defined_out": [ + "_i#0", + "array_length%0#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2269": { + "op": "bury 1", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "maybe_exists%0#0" + ] + }, + "2271": { + "op": "bz get_assets_labels_else_body@4", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ] + }, + "2274": { + "op": "frame_dig 0", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "tmp%0#0" + ] + }, + "2276": { + "op": "box_get", + "defined_out": [ + "_i#0", + "array_length%0#0", + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "2277": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "maybe_value%1#0" + ] + }, + "2278": { + "op": "bytec 6 // 0x0002", + "defined_out": [ + "0x0002", + "_i#0", + "array_length%0#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "maybe_value%1#0", + "0x0002" + ] + }, + "2280": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "0x0002", + "maybe_value%1#0" + ] + }, + "2281": { + "op": "concat", + "defined_out": [ + "_i#0", + "array_length%0#0", + "result%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "result%1#0" + ] + }, + "2282": { + "op": "frame_dig 1", + "defined_out": [ + "_i#0", + "array_length%0#0", + "out#0", + "result%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "result%1#0", + "out#0" + ] + }, + "2284": { + "op": "dup", + "defined_out": [ + "_i#0", + "array_length%0#0", + "out#0", + "out#0 (copy)", + "result%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "result%1#0", + "out#0", + "out#0 (copy)" + ] + }, + "2285": { + "op": "intc_1 // 0", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "result%1#0", + "out#0", + "out#0 (copy)", + "0" + ] + }, + "2286": { + "op": "extract_uint16", + "defined_out": [ + "_i#0", + "array_length%0#0", + "l_count%0#0", + "out#0", + "result%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "result%1#0", + "out#0", + "l_count%0#0" + ] + }, + "2287": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "result%1#0", + "l_count%0#0", + "out#0" + ] + }, + "2288": { + "op": "extract 2 0", + "defined_out": [ + "_i#0", + "array_length%0#0", + "l_count%0#0", + "l_head_and_tail%0#0", + "out#0", + "result%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "result%1#0", + "l_count%0#0", + "l_head_and_tail%0#0" + ] + }, + "2291": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "_i#0", + "array_length%0#0", + "l_count%0#0", + "l_head_and_tail%0#0", + "out#0", + "result%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "result%1#0", + "l_count%0#0", + "l_head_and_tail%0#0", + "1" + ] + }, + "2292": { + "op": "uncover 3", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "l_count%0#0", + "l_head_and_tail%0#0", + "1", + "result%1#0" + ] + }, + "2294": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "op": "callsub dynamic_array_concat_dynamic_element", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "out#0" + ] + }, + "2297": { + "op": "frame_bury 1", + "defined_out": [ + "_i#0", + "array_length%0#0", + "out#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ] + }, + "2299": { + "block": "get_assets_labels_after_if_else@5", + "stack_in": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ], + "op": "frame_dig 3", + "defined_out": [ + "_i#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2301": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "_i#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "_i#0", + "1" + ] + }, + "2302": { + "op": "+", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2303": { + "op": "frame_bury 3", + "defined_out": [ + "_i#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ] + }, + "2305": { + "op": "b get_assets_labels_for_header@1" + }, + "2308": { + "block": "get_assets_labels_else_body@4", + "stack_in": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "out#0" + ] + }, + "2310": { + "op": "dup", + "defined_out": [ + "out#0", + "out#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "out#0", + "out#0 (copy)" + ] + }, + "2311": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "out#0", + "out#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "out#0", + "out#0 (copy)", + "0" + ] + }, + "2312": { + "op": "extract_uint16", + "defined_out": [ + "l_count%1#0", + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "out#0", + "l_count%1#0" + ] + }, + "2313": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "l_count%1#0", + "out#0" + ] + }, + "2314": { + "op": "extract 2 0", + "defined_out": [ + "l_count%1#0", + "l_head_and_tail%1#0", + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "l_count%1#0", + "l_head_and_tail%1#0" + ] + }, + "2317": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "l_count%1#0", + "l_head_and_tail%1#0", + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "l_count%1#0", + "l_head_and_tail%1#0", + "1" + ] + }, + "2318": { + "op": "pushbytes 0x00020000", + "defined_out": [ + "0x00020000", + "1", + "l_count%1#0", + "l_head_and_tail%1#0", + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "l_count%1#0", + "l_head_and_tail%1#0", + "1", + "0x00020000" + ] + }, + "2324": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "op": "callsub dynamic_array_concat_dynamic_element", + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "out#0" + ] + }, + "2327": { + "op": "frame_bury 1", + "defined_out": [ + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ] + }, + "2329": { + "op": "b get_assets_labels_after_if_else@5" + }, + "2332": { + "block": "get_assets_labels_after_for@7", + "stack_in": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "out#0" + ], + "stack_out": [ + "tmp%0#0", + "out#0", + "array_length%0#0", + "_i#0", + "out#0" + ] + }, + "2334": { + "op": "frame_bury 0" + }, + "2336": { + "retsub": true, + "op": "retsub" + }, + "2337": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_micro", + "params": { + "asset_id#0": "uint64" + }, + "block": "_get_asset_micro", + "stack_in": [], + "op": "proto 1 1" + }, + "2340": { + "op": "frame_dig -1", + "defined_out": [ + "asset_id#0 (copy)" + ], + "stack_out": [ + "asset_id#0 (copy)" + ] + }, + "2342": { + "op": "asset_params_get AssetUnitName", + "defined_out": [ + "check%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "check%0#0" + ] + }, + "2344": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "value%0#0" + ] + }, + "2345": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2348": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "asset_id#0 (copy)" + ] + }, + "2350": { + "op": "asset_params_get AssetDecimals", + "defined_out": [ + "check%1#0", + "tmp%0#0", + "value%1#0" + ], + "stack_out": [ + "tmp%0#0", + "value%1#0", + "check%1#0" + ] + }, + "2352": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "value%1#0" + ] + }, + "2353": { + "op": "itob", + "defined_out": [ + "tmp%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0" + ] + }, + "2354": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "val_as_bytes%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "val_as_bytes%0#0 (copy)" + ] + }, + "2355": { + "op": "bitlen", + "defined_out": [ + "bitlen%0#0", + "tmp%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "bitlen%0#0" + ] + }, + "2356": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "bitlen%0#0", + "tmp%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "bitlen%0#0", + "8" + ] + }, + "2357": { + "op": "<=", + "defined_out": [ + "no_overflow%0#0", + "tmp%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "no_overflow%0#0" + ] + }, + "2358": { + "error": "overflow", + "op": "assert // overflow", + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0" + ] + }, + "2359": { + "op": "extract 7 1", + "defined_out": [ + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0" + ] + }, + "2362": { + "op": "pushbytes 0x0003", + "defined_out": [ + "0x0003", + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "0x0003" + ] + }, + "2366": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "0x0003", + "uint8%0#0" + ] + }, + "2367": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%2#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "encoded_tuple_buffer%2#0" + ] + }, + "2368": { + "op": "swap", + "stack_out": [ + "encoded_tuple_buffer%2#0", + "tmp%0#0" + ] + }, + "2369": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%3#0" + ], + "stack_out": [ + "encoded_tuple_buffer%3#0" + ] + }, + "2370": { + "retsub": true, + "op": "retsub" + }, + "2371": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_micro", + "params": { + "asset#0": "uint64" + }, + "block": "get_asset_micro", + "stack_in": [], + "op": "proto 1 1" + }, + "2374": { + "op": "frame_dig -1", + "defined_out": [ + "asset#0 (copy)" + ], + "stack_out": [ + "asset#0 (copy)" + ] + }, + "2376": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_micro", + "op": "callsub _get_asset_micro", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2379": { + "retsub": true, + "op": "retsub" + }, + "2380": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_micro", + "params": { + "assets#0": "bytes" + }, + "block": "get_assets_micro", + "stack_in": [], + "op": "proto 1 0" + }, + "2383": { + "op": "frame_dig -1", + "defined_out": [ + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)" + ] + }, + "2385": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)", + "0" + ] + }, + "2386": { + "op": "extract_uint16", + "defined_out": [ + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0" + ] + }, + "2387": { + "op": "intc_1 // 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2388": { + "block": "get_assets_micro_for_header@1", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "_i#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2390": { + "op": "frame_dig 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_length%0#0" + ] + }, + "2392": { + "op": "<", + "defined_out": [ + "_i#0", + "array_length%0#0", + "continue_looping%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "continue_looping%0#0" + ] + }, + "2393": { + "op": "bz get_assets_micro_after_for@4", + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2396": { + "op": "frame_dig -1", + "defined_out": [ + "_i#0", + "array_length%0#0", + "assets#0 (copy)" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "assets#0 (copy)" + ] + }, + "2398": { + "op": "extract 2 0", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0" + ] + }, + "2401": { + "op": "frame_dig 1", + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0" + ] + }, + "2403": { + "op": "dup", + "defined_out": [ + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "_i#0 (copy)" + ] + }, + "2404": { + "op": "cover 2", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)" + ] + }, + "2406": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "8" + ] + }, + "2407": { + "op": "*", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_offset%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "2408": { + "op": "extract_uint64", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%0#0" + ] + }, + "2409": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_micro", + "op": "callsub _get_asset_micro", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%1#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%1#0" + ] + }, + "2412": { + "op": "log", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2413": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "1" + ] + }, + "2414": { + "op": "+", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2415": { + "op": "frame_bury 1", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2417": { + "op": "b get_assets_micro_for_header@1" + }, + "2420": { + "block": "get_assets_micro_after_for@4", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "retsub": true, + "op": "retsub" + }, + "2421": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_micro_labels", + "params": { + "asset_id#0": "uint64" + }, + "block": "_get_asset_micro_labels", + "stack_in": [], + "op": "proto 1 1" + }, + "2424": { + "op": "frame_dig -1", + "defined_out": [ + "asset_id#0 (copy)" + ], + "stack_out": [ + "asset_id#0 (copy)" + ] + }, + "2426": { + "op": "asset_params_get AssetUnitName", + "defined_out": [ + "check%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "check%0#0" + ] + }, + "2428": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "value%0#0" + ] + }, + "2429": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2432": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "asset_id#0 (copy)" + ] + }, + "2434": { + "op": "asset_params_get AssetDecimals", + "defined_out": [ + "check%1#0", + "tmp%0#0", + "value%1#0" + ], + "stack_out": [ + "tmp%0#0", + "value%1#0", + "check%1#0" + ] + }, + "2436": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "value%1#0" + ] + }, + "2437": { + "op": "itob", + "defined_out": [ + "tmp%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0" + ] + }, + "2438": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "val_as_bytes%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "val_as_bytes%0#0 (copy)" + ] + }, + "2439": { + "op": "bitlen", + "defined_out": [ + "bitlen%0#0", + "tmp%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "bitlen%0#0" + ] + }, + "2440": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "bitlen%0#0", + "tmp%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "bitlen%0#0", + "8" + ] + }, + "2441": { + "op": "<=", + "defined_out": [ + "no_overflow%0#0", + "tmp%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0", + "no_overflow%0#0" + ] + }, + "2442": { + "error": "overflow", + "op": "assert // overflow", + "stack_out": [ + "tmp%0#0", + "val_as_bytes%0#0" + ] + }, + "2443": { + "op": "extract 7 1", + "defined_out": [ + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0" + ] + }, + "2446": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "asset_id#0 (copy)" + ] + }, + "2448": { + "op": "itob", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0" + ] + }, + "2449": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "tmp%1#0" + ] + }, + "2450": { + "op": "box_len", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2451": { + "op": "bury 1", + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "maybe_exists%0#0" + ] + }, + "2453": { + "op": "bz _get_asset_micro_labels_ternary_false@2", + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0" + ] + }, + "2456": { + "op": "frame_dig 2", + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "tmp%1#0" + ] + }, + "2458": { + "op": "box_get", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "2459": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "defined_out": [ + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1" + ] + }, + "2460": { + "block": "_get_asset_micro_labels_ternary_merge@3", + "stack_in": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1" + ], + "op": "frame_dig 0", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0" + ] + }, + "2462": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "2463": { + "op": "len", + "defined_out": [ + "data_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "data_length%0#0" + ] + }, + "2464": { + "op": "pushint 5 // 5", + "defined_out": [ + "5", + "data_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "data_length%0#0", + "5" + ] + }, + "2466": { + "op": "+", + "defined_out": [ + "current_tail_offset%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0" + ] + }, + "2467": { + "op": "pushbytes 0x0005", + "defined_out": [ + "0x0005", + "current_tail_offset%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "0x0005" + ] + }, + "2471": { + "op": "frame_dig 1", + "defined_out": [ + "0x0005", + "current_tail_offset%1#0", + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "0x0005", + "uint8%0#0" + ] + }, + "2473": { + "op": "concat", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0" + ] + }, + "2474": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%1#0" + ] + }, + "2475": { + "op": "itob", + "defined_out": [ + "as_bytes%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "encoded_tuple_buffer%2#0", + "as_bytes%1#0" + ] + }, + "2476": { + "op": "extract 6 2", + "defined_out": [ + "encoded_tuple_buffer%2#0", + "offset_as_uint16%1#0", + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "encoded_tuple_buffer%2#0", + "offset_as_uint16%1#0" + ] + }, + "2479": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "tmp%0#0", + "encoded_tuple_buffer%3#0" + ] + }, + "2480": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "encoded_tuple_buffer%3#0", + "tmp%0#0" + ] + }, + "2481": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%4#0", + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1", + "encoded_tuple_buffer%4#0" + ] + }, + "2482": { + "op": "swap", + "defined_out": [ + "encoded_tuple_buffer%4#0", + "ternary_result%0#1", + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "encoded_tuple_buffer%4#0", + "ternary_result%0#1" + ] + }, + "2483": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%5#0", + "tmp%0#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "encoded_tuple_buffer%5#0" + ] + }, + "2484": { + "op": "frame_bury 0" + }, + "2486": { + "retsub": true, + "op": "retsub" + }, + "2487": { + "block": "_get_asset_micro_labels_ternary_false@2", + "stack_in": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0" + ], + "op": "bytec_2 // 0x0000", + "defined_out": [ + "ternary_result%0#1" + ], + "stack_out": [ + "tmp%0#0", + "uint8%0#0", + "tmp%1#0", + "ternary_result%0#1" + ] + }, + "2488": { + "op": "b _get_asset_micro_labels_ternary_merge@3" + }, + "2491": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_micro_labels", + "params": { + "asset#0": "uint64" + }, + "block": "get_asset_micro_labels", + "stack_in": [], + "op": "proto 1 1" + }, + "2494": { + "op": "frame_dig -1", + "defined_out": [ + "asset#0 (copy)" + ], + "stack_out": [ + "asset#0 (copy)" + ] + }, + "2496": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_micro_labels", + "op": "callsub _get_asset_micro_labels", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2499": { + "retsub": true, + "op": "retsub" + }, + "2500": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_micro_labels", + "params": { + "assets#0": "bytes" + }, + "block": "get_assets_micro_labels", + "stack_in": [], + "op": "proto 1 0" + }, + "2503": { + "op": "frame_dig -1", + "defined_out": [ + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)" + ] + }, + "2505": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)", + "0" + ] + }, + "2506": { + "op": "extract_uint16", + "defined_out": [ + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0" + ] + }, + "2507": { + "op": "intc_1 // 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2508": { + "block": "get_assets_micro_labels_for_header@1", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "_i#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2510": { + "op": "frame_dig 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_length%0#0" + ] + }, + "2512": { + "op": "<", + "defined_out": [ + "_i#0", + "array_length%0#0", + "continue_looping%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "continue_looping%0#0" + ] + }, + "2513": { + "op": "bz get_assets_micro_labels_after_for@4", + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2516": { + "op": "frame_dig -1", + "defined_out": [ + "_i#0", + "array_length%0#0", + "assets#0 (copy)" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "assets#0 (copy)" + ] + }, + "2518": { + "op": "extract 2 0", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0" + ] + }, + "2521": { + "op": "frame_dig 1", + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0" + ] + }, + "2523": { + "op": "dup", + "defined_out": [ + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "_i#0 (copy)" + ] + }, + "2524": { + "op": "cover 2", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)" + ] + }, + "2526": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "8" + ] + }, + "2527": { + "op": "*", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_offset%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "2528": { + "op": "extract_uint64", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%0#0" + ] + }, + "2529": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_micro_labels", + "op": "callsub _get_asset_micro_labels", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%1#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%1#0" + ] + }, + "2532": { + "op": "log", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2533": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "1" + ] + }, + "2534": { + "op": "+", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2535": { + "op": "frame_bury 1", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2537": { + "op": "b get_assets_micro_labels_for_header@1" + }, + "2540": { + "block": "get_assets_micro_labels_after_for@4", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "retsub": true, + "op": "retsub" + }, + "2541": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_text", + "params": { + "asset_id#0": "uint64" + }, + "block": "_get_asset_text", + "stack_in": [], + "op": "proto 1 1" + }, + "2544": { + "op": "frame_dig -1", + "defined_out": [ + "asset_id#0 (copy)" + ], + "stack_out": [ + "asset_id#0 (copy)" + ] + }, + "2546": { + "op": "asset_params_get AssetName", + "defined_out": [ + "check%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "check%0#0" + ] + }, + "2548": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "value%0#0" + ] + }, + "2549": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2552": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "asset_id#0 (copy)" + ] + }, + "2554": { + "op": "asset_params_get AssetUnitName", + "defined_out": [ + "check%1#0", + "tmp%0#0", + "value%1#0" + ], + "stack_out": [ + "tmp%0#0", + "value%1#0", + "check%1#0" + ] + }, + "2556": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "value%1#0" + ] + }, + "2557": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0" + ] + }, + "2560": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "asset_id#0 (copy)" + ] + }, + "2562": { + "op": "asset_params_get AssetURL", + "defined_out": [ + "check%2#0", + "tmp%0#0", + "tmp%1#0", + "value%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "value%2#0", + "check%2#0" + ] + }, + "2564": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "value%2#0" + ] + }, + "2565": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ] + }, + "2568": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "asset_id#0 (copy)" + ] + }, + "2570": { + "op": "itob", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0" + ] + }, + "2571": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "tmp%3#0" + ] + }, + "2572": { + "op": "box_len", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2573": { + "op": "bury 1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "maybe_exists%0#0" + ] + }, + "2575": { + "op": "bz _get_asset_text_ternary_false@2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0" + ] + }, + "2578": { + "op": "frame_dig 3", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "tmp%3#0" + ] + }, + "2580": { + "op": "box_get", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "2581": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "defined_out": [ + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1" + ] + }, + "2582": { + "block": "_get_asset_text_ternary_merge@3", + "stack_in": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1" + ], + "op": "frame_dig 0", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0" + ] + }, + "2584": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "2585": { + "op": "len", + "defined_out": [ + "data_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "data_length%0#0" + ] + }, + "2586": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "data_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "data_length%0#0", + "8" + ] + }, + "2587": { + "op": "+", + "defined_out": [ + "current_tail_offset%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0" + ] + }, + "2588": { + "op": "dup", + "defined_out": [ + "current_tail_offset%1#0", + "current_tail_offset%1#0 (copy)", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "current_tail_offset%1#0 (copy)" + ] + }, + "2589": { + "op": "itob", + "defined_out": [ + "as_bytes%1#0", + "current_tail_offset%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "as_bytes%1#0" + ] + }, + "2590": { + "op": "extract 6 2", + "defined_out": [ + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "offset_as_uint16%1#0" + ] + }, + "2593": { + "op": "pushbytes 0x0008", + "defined_out": [ + "0x0008", + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "0x0008" + ] + }, + "2597": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "0x0008", + "offset_as_uint16%1#0" + ] + }, + "2598": { + "op": "concat", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0" + ] + }, + "2599": { + "op": "frame_dig 1", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%1#0" + ] + }, + "2601": { + "op": "dup", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%1#0 (copy)", + "tmp%1#0 (copy)" + ] + }, + "2602": { + "op": "cover 3", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%1#0 (copy)" + ] + }, + "2604": { + "op": "len", + "defined_out": [ + "current_tail_offset%1#0", + "data_length%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "data_length%1#0" + ] + }, + "2605": { + "op": "uncover 2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%2#0", + "data_length%1#0", + "current_tail_offset%1#0" + ] + }, + "2607": { + "op": "+", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0" + ] + }, + "2608": { + "op": "dup", + "defined_out": [ + "current_tail_offset%2#0", + "current_tail_offset%2#0 (copy)", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0", + "current_tail_offset%2#0 (copy)" + ] + }, + "2609": { + "op": "itob", + "defined_out": [ + "as_bytes%2#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0", + "as_bytes%2#0" + ] + }, + "2610": { + "op": "extract 6 2", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "offset_as_uint16%2#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0", + "offset_as_uint16%2#0" + ] + }, + "2613": { + "op": "uncover 2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "offset_as_uint16%2#0", + "encoded_tuple_buffer%2#0" + ] + }, + "2615": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "offset_as_uint16%2#0" + ] + }, + "2616": { + "op": "concat", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0" + ] + }, + "2617": { + "op": "frame_dig 2", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%2#0" + ] + }, + "2619": { + "op": "dup", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%2#0 (copy)", + "tmp%2#0 (copy)" + ] + }, + "2620": { + "op": "cover 3", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%2#0 (copy)" + ] + }, + "2622": { + "op": "len", + "defined_out": [ + "current_tail_offset%2#0", + "data_length%2#0", + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "data_length%2#0" + ] + }, + "2623": { + "op": "uncover 2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%3#0", + "data_length%2#0", + "current_tail_offset%2#0" + ] + }, + "2625": { + "op": "+", + "defined_out": [ + "current_tail_offset%3#0", + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%3#0", + "current_tail_offset%3#0" + ] + }, + "2626": { + "op": "itob", + "defined_out": [ + "as_bytes%3#0", + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%3#0", + "as_bytes%3#0" + ] + }, + "2627": { + "op": "extract 6 2", + "defined_out": [ + "encoded_tuple_buffer%3#0", + "offset_as_uint16%3#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%3#0", + "offset_as_uint16%3#0" + ] + }, + "2630": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%4#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%4#0" + ] + }, + "2631": { + "op": "uncover 3", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%4#0", + "tmp%0#0" + ] + }, + "2633": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%5#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%5#0" + ] + }, + "2634": { + "op": "uncover 2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%2#0", + "encoded_tuple_buffer%5#0", + "tmp%1#0" + ] + }, + "2636": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%6#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "tmp%2#0", + "encoded_tuple_buffer%6#0" + ] + }, + "2637": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "encoded_tuple_buffer%6#0", + "tmp%2#0" + ] + }, + "2638": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%7#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1", + "encoded_tuple_buffer%7#0" + ] + }, + "2639": { + "op": "swap", + "defined_out": [ + "encoded_tuple_buffer%7#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "encoded_tuple_buffer%7#0", + "ternary_result%0#1" + ] + }, + "2640": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%8#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "encoded_tuple_buffer%8#0" + ] + }, + "2641": { + "op": "frame_bury 0" + }, + "2643": { + "retsub": true, + "op": "retsub" + }, + "2644": { + "block": "_get_asset_text_ternary_false@2", + "stack_in": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0" + ], + "op": "bytec_2 // 0x0000", + "defined_out": [ + "ternary_result%0#1" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%3#0", + "ternary_result%0#1" + ] + }, + "2645": { + "op": "b _get_asset_text_ternary_merge@3" + }, + "2648": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_text", + "params": { + "asset#0": "uint64" + }, + "block": "get_asset_text", + "stack_in": [], + "op": "proto 1 1" + }, + "2651": { + "op": "frame_dig -1", + "defined_out": [ + "asset#0 (copy)" + ], + "stack_out": [ + "asset#0 (copy)" + ] + }, + "2653": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_text", + "op": "callsub _get_asset_text", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2656": { + "retsub": true, + "op": "retsub" + }, + "2657": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_text", + "params": { + "assets#0": "bytes" + }, + "block": "get_assets_text", + "stack_in": [], + "op": "proto 1 0" + }, + "2660": { + "op": "frame_dig -1", + "defined_out": [ + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)" + ] + }, + "2662": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)", + "0" + ] + }, + "2663": { + "op": "extract_uint16", + "defined_out": [ + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0" + ] + }, + "2664": { + "op": "intc_1 // 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2665": { + "block": "get_assets_text_for_header@1", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "_i#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2667": { + "op": "frame_dig 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_length%0#0" + ] + }, + "2669": { + "op": "<", + "defined_out": [ + "_i#0", + "array_length%0#0", + "continue_looping%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "continue_looping%0#0" + ] + }, + "2670": { + "op": "bz get_assets_text_after_for@4", + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2673": { + "op": "frame_dig -1", + "defined_out": [ + "_i#0", + "array_length%0#0", + "assets#0 (copy)" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "assets#0 (copy)" + ] + }, + "2675": { + "op": "extract 2 0", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0" + ] + }, + "2678": { + "op": "frame_dig 1", + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0" + ] + }, + "2680": { + "op": "dup", + "defined_out": [ + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "_i#0 (copy)" + ] + }, + "2681": { + "op": "cover 2", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)" + ] + }, + "2683": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "8" + ] + }, + "2684": { + "op": "*", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_offset%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "2685": { + "op": "extract_uint64", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%0#0" + ] + }, + "2686": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_text", + "op": "callsub _get_asset_text", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%1#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%1#0" + ] + }, + "2689": { + "op": "log", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2690": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "1" + ] + }, + "2691": { + "op": "+", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2692": { + "op": "frame_bury 1", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2694": { + "op": "b get_assets_text_for_header@1" + }, + "2697": { + "block": "get_assets_text_after_for@4", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "retsub": true, + "op": "retsub" + }, + "2698": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_text_labels", + "params": { + "asset_id#0": "uint64" + }, + "block": "_get_asset_text_labels", + "stack_in": [], + "op": "proto 1 1" + }, + "2701": { + "op": "frame_dig -1", + "defined_out": [ + "asset_id#0 (copy)" + ], + "stack_out": [ + "asset_id#0 (copy)" + ] + }, + "2703": { + "op": "asset_params_get AssetName", + "defined_out": [ + "check%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "check%0#0" + ] + }, + "2705": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "value%0#0" + ] + }, + "2706": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2709": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "asset_id#0 (copy)" + ] + }, + "2711": { + "op": "asset_params_get AssetUnitName", + "defined_out": [ + "check%1#0", + "tmp%0#0", + "value%1#0" + ], + "stack_out": [ + "tmp%0#0", + "value%1#0", + "check%1#0" + ] + }, + "2713": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "value%1#0" + ] + }, + "2714": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0" + ] + }, + "2717": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "asset_id#0 (copy)" + ] + }, + "2719": { + "op": "asset_params_get AssetURL", + "defined_out": [ + "check%2#0", + "tmp%0#0", + "tmp%1#0", + "value%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "value%2#0", + "check%2#0" + ] + }, + "2721": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "value%2#0" + ] + }, + "2722": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ] + }, + "2725": { + "op": "dig 2", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "tmp%0#0 (copy)" + ] + }, + "2727": { + "op": "len", + "defined_out": [ + "data_length%0#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "data_length%0#0" + ] + }, + "2728": { + "op": "pushint 6 // 6", + "defined_out": [ + "6", + "data_length%0#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "data_length%0#0", + "6" + ] + }, + "2730": { + "op": "+", + "defined_out": [ + "current_tail_offset%1#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%1#0" + ] + }, + "2731": { + "op": "dup", + "defined_out": [ + "current_tail_offset%1#0", + "current_tail_offset%1#0 (copy)", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%1#0", + "current_tail_offset%1#0 (copy)" + ] + }, + "2732": { + "op": "itob", + "defined_out": [ + "as_bytes%1#0", + "current_tail_offset%1#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%1#0", + "as_bytes%1#0" + ] + }, + "2733": { + "op": "extract 6 2", + "defined_out": [ + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%1#0", + "offset_as_uint16%1#0" + ] + }, + "2736": { + "op": "pushbytes 0x0006", + "defined_out": [ + "0x0006", + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "0x0006" + ] + }, + "2740": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%1#0", + "0x0006", + "offset_as_uint16%1#0" + ] + }, + "2741": { + "op": "concat", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0" + ] + }, + "2742": { + "op": "dig 3", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0", + "tmp%1#0 (copy)", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%1#0 (copy)" + ] + }, + "2744": { + "op": "len", + "defined_out": [ + "current_tail_offset%1#0", + "data_length%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "data_length%1#0" + ] + }, + "2745": { + "op": "uncover 2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%2#0", + "data_length%1#0", + "current_tail_offset%1#0" + ] + }, + "2747": { + "op": "+", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0" + ] + }, + "2748": { + "op": "itob", + "defined_out": [ + "as_bytes%2#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%2#0", + "as_bytes%2#0" + ] + }, + "2749": { + "op": "extract 6 2", + "defined_out": [ + "encoded_tuple_buffer%2#0", + "offset_as_uint16%2#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%2#0", + "offset_as_uint16%2#0" + ] + }, + "2752": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%3#0" + ] + }, + "2753": { + "op": "uncover 3", + "stack_out": [ + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%3#0", + "tmp%0#0" + ] + }, + "2755": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%4#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%1#0", + "tmp%2#0", + "encoded_tuple_buffer%4#0" + ] + }, + "2756": { + "op": "uncover 2", + "stack_out": [ + "tmp%2#0", + "encoded_tuple_buffer%4#0", + "tmp%1#0" + ] + }, + "2758": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%5#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0", + "encoded_tuple_buffer%5#0" + ] + }, + "2759": { + "op": "swap", + "stack_out": [ + "encoded_tuple_buffer%5#0", + "tmp%2#0" + ] + }, + "2760": { + "op": "concat", + "defined_out": [ + "encoded_tuple_buffer%6#0" + ], + "stack_out": [ + "encoded_tuple_buffer%6#0" + ] + }, + "2761": { + "retsub": true, + "op": "retsub" + }, + "2762": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_text_labels", + "params": { + "asset#0": "uint64" + }, + "block": "get_asset_text_labels", + "stack_in": [], + "op": "proto 1 1" + }, + "2765": { + "op": "frame_dig -1", + "defined_out": [ + "asset#0 (copy)" + ], + "stack_out": [ + "asset#0 (copy)" + ] + }, + "2767": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_text_labels", + "op": "callsub _get_asset_text_labels", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2770": { + "retsub": true, + "op": "retsub" + }, + "2771": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_text_labels", + "params": { + "assets#0": "bytes" + }, + "block": "get_assets_text_labels", + "stack_in": [], + "op": "proto 1 0" + }, + "2774": { + "op": "frame_dig -1", + "defined_out": [ + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)" + ] + }, + "2776": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)", + "0" + ] + }, + "2777": { + "op": "extract_uint16", + "defined_out": [ + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0" + ] + }, + "2778": { + "op": "intc_1 // 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2779": { + "block": "get_assets_text_labels_for_header@1", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "_i#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2781": { + "op": "frame_dig 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_length%0#0" + ] + }, + "2783": { + "op": "<", + "defined_out": [ + "_i#0", + "array_length%0#0", + "continue_looping%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "continue_looping%0#0" + ] + }, + "2784": { + "op": "bz get_assets_text_labels_after_for@4", + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2787": { + "op": "frame_dig -1", + "defined_out": [ + "_i#0", + "array_length%0#0", + "assets#0 (copy)" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "assets#0 (copy)" + ] + }, + "2789": { + "op": "extract 2 0", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0" + ] + }, + "2792": { + "op": "frame_dig 1", + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0" + ] + }, + "2794": { + "op": "dup", + "defined_out": [ + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "_i#0 (copy)" + ] + }, + "2795": { + "op": "cover 2", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)" + ] + }, + "2797": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "8" + ] + }, + "2798": { + "op": "*", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_offset%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "2799": { + "op": "extract_uint64", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%0#0" + ] + }, + "2800": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_text_labels", + "op": "callsub _get_asset_text_labels", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%1#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%1#0" + ] + }, + "2803": { + "op": "log", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2804": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "1" + ] + }, + "2805": { + "op": "+", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2806": { + "op": "frame_bury 1", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2808": { + "op": "b get_assets_text_labels_for_header@1" + }, + "2811": { + "block": "get_assets_text_labels_after_for@4", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "retsub": true, + "op": "retsub" + }, + "2812": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_small", + "params": { + "asset_id#0": "uint64" + }, + "block": "_get_asset_small", + "stack_in": [], + "op": "proto 1 1" + }, + "2815": { + "op": "frame_dig -1", + "defined_out": [ + "asset_id#0 (copy)" + ], + "stack_out": [ + "asset_id#0 (copy)" + ] + }, + "2817": { + "op": "asset_params_get AssetName", + "defined_out": [ + "check%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "check%0#0" + ] + }, + "2819": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "value%0#0" + ] + }, + "2820": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2823": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "asset_id#0 (copy)" + ] + }, + "2825": { + "op": "asset_params_get AssetUnitName", + "defined_out": [ + "check%1#0", + "tmp%0#0", + "value%1#0" + ], + "stack_out": [ + "tmp%0#0", + "value%1#0", + "check%1#0" + ] + }, + "2827": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "value%1#0" + ] + }, + "2828": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0" + ] + }, + "2831": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "asset_id#0 (copy)" + ] + }, + "2833": { + "op": "asset_params_get AssetDecimals", + "defined_out": [ + "check%2#0", + "tmp%0#0", + "tmp%1#0", + "value%2#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "value%2#0", + "check%2#0" + ] + }, + "2835": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "value%2#0" + ] + }, + "2836": { + "op": "itob", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0" + ] + }, + "2837": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0", + "val_as_bytes%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0", + "val_as_bytes%0#0 (copy)" + ] + }, + "2838": { + "op": "bitlen", + "defined_out": [ + "bitlen%0#0", + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0", + "bitlen%0#0" + ] + }, + "2839": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "bitlen%0#0", + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0", + "bitlen%0#0", + "8" + ] + }, + "2840": { + "op": "<=", + "defined_out": [ + "no_overflow%0#0", + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0", + "no_overflow%0#0" + ] + }, + "2841": { + "error": "overflow", + "op": "assert // overflow", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "val_as_bytes%0#0" + ] + }, + "2842": { + "op": "extract 7 1", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0" + ] + }, + "2845": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "asset_id#0 (copy)" + ] + }, + "2847": { + "op": "asset_params_get AssetTotal", + "defined_out": [ + "check%3#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "value%3#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "value%3#0", + "check%3#0" + ] + }, + "2849": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "value%3#0" + ] + }, + "2850": { + "op": "itob", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ] + }, + "2851": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "asset_id#0 (copy)" + ] + }, + "2853": { + "op": "asset_params_get AssetFreeze", + "defined_out": [ + "check%4#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "value%4#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "value%4#0", + "check%4#0" + ] + }, + "2855": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "value%4#0" + ] + }, + "2856": { + "op": "global ZeroAddress", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "tmp%2#0", + "uint8%0#0", + "val_as_bytes%1#0", + "value%4#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "value%4#0", + "tmp%2#0" + ] + }, + "2858": { + "op": "!=", + "defined_out": [ + "tmp%0#0", + "tmp%1#0", + "to_encode%0#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "to_encode%0#0" + ] + }, + "2859": { + "op": "pushbytes 0x00", + "defined_out": [ + "0x00", + "tmp%0#0", + "tmp%1#0", + "to_encode%0#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "to_encode%0#0", + "0x00" + ] + }, + "2862": { + "op": "intc_1 // 0", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "to_encode%0#0", + "0x00", + "0" + ] + }, + "2863": { + "op": "uncover 2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "0x00", + "0", + "to_encode%0#0" + ] + }, + "2865": { + "op": "setbit", + "defined_out": [ + "encoded_bool%0#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0" + ] + }, + "2866": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "asset_id#0 (copy)" + ] + }, + "2868": { + "op": "asset_params_get AssetClawback", + "defined_out": [ + "check%5#0", + "encoded_bool%0#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "value%5#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "value%5#0", + "check%5#0" + ] + }, + "2870": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "value%5#0" + ] + }, + "2871": { + "op": "global ZeroAddress", + "defined_out": [ + "encoded_bool%0#0", + "tmp%0#0", + "tmp%1#0", + "tmp%3#0", + "uint8%0#0", + "val_as_bytes%1#0", + "value%5#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "value%5#0", + "tmp%3#0" + ] + }, + "2873": { + "op": "!=", + "defined_out": [ + "encoded_bool%0#0", + "tmp%0#0", + "tmp%1#0", + "to_encode%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "to_encode%1#0" + ] + }, + "2874": { + "op": "pushbytes 0x00", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "to_encode%1#0", + "0x00" + ] + }, + "2877": { + "op": "intc_1 // 0", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "to_encode%1#0", + "0x00", + "0" + ] + }, + "2878": { + "op": "uncover 2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "0x00", + "0", + "to_encode%1#0" + ] + }, + "2880": { + "op": "setbit", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0" + ] + }, + "2881": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "asset_id#0 (copy)" + ] + }, + "2883": { + "op": "itob", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%0#0", + "tmp%1#0", + "tmp%4#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0" + ] + }, + "2884": { + "op": "dup", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%0#0", + "tmp%1#0", + "tmp%4#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "tmp%4#0" + ] + }, + "2885": { + "op": "box_len", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#0", + "tmp%1#0", + "tmp%4#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2886": { + "op": "bury 1", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "maybe_exists%0#0" + ] + }, + "2888": { + "op": "bz _get_asset_small_ternary_false@2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0" + ] + }, + "2891": { + "op": "frame_dig 6", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "tmp%4#0" + ] + }, + "2893": { + "op": "box_get", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%0#0", + "tmp%1#0", + "tmp%4#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "2894": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "tmp%4#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1" + ] + }, + "2895": { + "block": "_get_asset_small_ternary_merge@3", + "stack_in": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1" + ], + "op": "frame_dig 0", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0" + ] + }, + "2897": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "2898": { + "op": "len", + "defined_out": [ + "data_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "data_length%0#0" + ] + }, + "2899": { + "op": "pushint 16 // 16", + "defined_out": [ + "16", + "data_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "data_length%0#0", + "16" + ] + }, + "2901": { + "op": "+", + "defined_out": [ + "current_tail_offset%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0" + ] + }, + "2902": { + "op": "dup", + "defined_out": [ + "current_tail_offset%1#0", + "current_tail_offset%1#0 (copy)", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "current_tail_offset%1#0 (copy)" + ] + }, + "2903": { + "op": "itob", + "defined_out": [ + "as_bytes%1#0", + "current_tail_offset%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "as_bytes%1#0" + ] + }, + "2904": { + "op": "extract 6 2", + "defined_out": [ + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "offset_as_uint16%1#0" + ] + }, + "2907": { + "op": "pushbytes 0x0010", + "defined_out": [ + "0x0010", + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "0x0010" + ] + }, + "2911": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "0x0010", + "offset_as_uint16%1#0" + ] + }, + "2912": { + "op": "concat", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0" + ] + }, + "2913": { + "op": "frame_dig 1", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%1#0" + ] + }, + "2915": { + "op": "dup", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%1#0 (copy)", + "tmp%1#0 (copy)" + ] + }, + "2916": { + "op": "cover 3", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%1#0 (copy)" + ] + }, + "2918": { + "op": "len", + "defined_out": [ + "current_tail_offset%1#0", + "data_length%1#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "data_length%1#0" + ] + }, + "2919": { + "op": "uncover 2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%2#0", + "data_length%1#0", + "current_tail_offset%1#0" + ] + }, + "2921": { + "op": "+", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0" + ] + }, + "2922": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0" + ] + }, + "2923": { + "op": "frame_dig 2", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "uint8%0#0" + ] + }, + "2925": { + "op": "concat", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0" + ] + }, + "2926": { + "op": "frame_dig 3", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "val_as_bytes%1#0" + ] + }, + "2928": { + "op": "concat", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%4#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%4#0" + ] + }, + "2929": { + "op": "frame_dig 4", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_bool%0#0", + "encoded_tuple_buffer%4#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%4#0", + "encoded_bool%0#0" + ] + }, + "2931": { + "op": "concat", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_bool%0#0", + "encoded_tuple_buffer%5#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%5#0" + ] + }, + "2932": { + "op": "frame_dig 5", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%5#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%5#0", + "encoded_bool%1#0" + ] + }, + "2934": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "current_tail_offset%2#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%5#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%5#0", + "encoded_bool%1#0", + "0" + ] + }, + "2935": { + "op": "getbit", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%5#0", + "is_true%0#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%5#0", + "is_true%0#0" + ] + }, + "2936": { + "op": "pushint 105 // 105" + }, + "2938": { + "op": "swap", + "defined_out": [ + "105", + "current_tail_offset%2#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%5#0", + "is_true%0#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%5#0", + "105", + "is_true%0#0" + ] + }, + "2939": { + "op": "setbit", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%6#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%6#0" + ] + }, + "2940": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%6#0", + "current_tail_offset%2#0" + ] + }, + "2941": { + "op": "itob", + "defined_out": [ + "as_bytes%2#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%6#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%6#0", + "as_bytes%2#0" + ] + }, + "2942": { + "op": "extract 6 2", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%6#0", + "offset_as_uint16%2#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%6#0", + "offset_as_uint16%2#0" + ] + }, + "2945": { + "op": "concat", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%7#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "encoded_tuple_buffer%7#0" + ] + }, + "2946": { + "op": "uncover 2", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%1#0", + "encoded_tuple_buffer%7#0", + "tmp%0#0" + ] + }, + "2948": { + "op": "concat", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%8#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "tmp%1#0", + "encoded_tuple_buffer%8#0" + ] + }, + "2949": { + "op": "swap", + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "encoded_tuple_buffer%8#0", + "tmp%1#0" + ] + }, + "2950": { + "op": "concat", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%9#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1", + "encoded_tuple_buffer%9#0" + ] + }, + "2951": { + "op": "swap", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%9#0", + "ternary_result%0#1", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "encoded_tuple_buffer%9#0", + "ternary_result%0#1" + ] + }, + "2952": { + "op": "concat", + "defined_out": [ + "encoded_bool%0#0", + "encoded_bool%1#0", + "encoded_tuple_buffer%10#0", + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "encoded_tuple_buffer%10#0" + ] + }, + "2953": { + "op": "frame_bury 0" + }, + "2955": { + "retsub": true, + "op": "retsub" + }, + "2956": { + "block": "_get_asset_small_ternary_false@2", + "stack_in": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0" + ], + "op": "bytec_2 // 0x0000", + "defined_out": [ + "ternary_result%0#1" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0", + "uint8%0#0", + "val_as_bytes%1#0", + "encoded_bool%0#0", + "encoded_bool%1#0", + "tmp%4#0", + "ternary_result%0#1" + ] + }, + "2957": { + "op": "b _get_asset_small_ternary_merge@3" + }, + "2960": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_small", + "params": { + "asset#0": "uint64" + }, + "block": "get_asset_small", + "stack_in": [], + "op": "proto 1 1" + }, + "2963": { + "op": "frame_dig -1", + "defined_out": [ + "asset#0 (copy)" + ], + "stack_out": [ + "asset#0 (copy)" + ] + }, + "2965": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_small", + "op": "callsub _get_asset_small", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2968": { + "retsub": true, + "op": "retsub" + }, + "2969": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_small", + "params": { + "assets#0": "bytes" + }, + "block": "get_assets_small", + "stack_in": [], + "op": "proto 1 0" + }, + "2972": { + "op": "frame_dig -1", + "defined_out": [ + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)" + ] + }, + "2974": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "assets#0 (copy)" + ], + "stack_out": [ + "assets#0 (copy)", + "0" + ] + }, + "2975": { + "op": "extract_uint16", + "defined_out": [ + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0" + ] + }, + "2976": { + "op": "intc_1 // 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2977": { + "block": "get_assets_small_for_header@1", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "_i#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "2979": { + "op": "frame_dig 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_length%0#0" + ] + }, + "2981": { + "op": "<", + "defined_out": [ + "_i#0", + "array_length%0#0", + "continue_looping%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "continue_looping%0#0" + ] + }, + "2982": { + "op": "bz get_assets_small_after_for@4", + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "2985": { + "op": "frame_dig -1", + "defined_out": [ + "_i#0", + "array_length%0#0", + "assets#0 (copy)" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "assets#0 (copy)" + ] + }, + "2987": { + "op": "extract 2 0", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0" + ] + }, + "2990": { + "op": "frame_dig 1", + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0" + ] + }, + "2992": { + "op": "dup", + "defined_out": [ + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "_i#0 (copy)" + ] + }, + "2993": { + "op": "cover 2", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)" + ] + }, + "2995": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "8" + ] + }, + "2996": { + "op": "*", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_offset%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "2997": { + "op": "extract_uint64", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%0#0" + ] + }, + "2998": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_small", + "op": "callsub _get_asset_small", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%1#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%1#0" + ] + }, + "3001": { + "op": "log", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "3002": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "1" + ] + }, + "3003": { + "op": "+", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0" + ] + }, + "3004": { + "op": "frame_bury 1", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0" + ] + }, + "3006": { + "op": "b get_assets_small_for_header@1" + }, + "3009": { + "block": "get_assets_small_after_for@4", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], + "retsub": true, + "op": "retsub" + }, + "3010": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_full", + "params": { + "asset_id#0": "uint64" + }, + "block": "_get_asset_full", + "stack_in": [], + "op": "proto 1 1" + }, + "3013": { + "op": "intc_1 // 0", + "stack_out": [ + "encoded_value%0#0" + ] + }, + "3014": { + "op": "dupn 11", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ] + }, + "3016": { + "op": "frame_dig -1", + "defined_out": [ + "asset_id#0 (copy)" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "asset_id#0 (copy)" + ] + }, + "3018": { + "op": "asset_params_get AssetReserve", + "defined_out": [ + "check%0#0", + "reserve_acct#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "check%0#0" + ] + }, + "3020": { + "op": "swap", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "check%0#0", + "reserve_acct#0" + ] + }, + "3021": { + "op": "dup", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "check%0#0", + "reserve_acct#0", + "reserve_acct#0 (copy)" + ] + }, + "3022": { + "op": "uncover 2", + "defined_out": [ + "check%0#0", + "reserve_acct#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_acct#0", + "check%0#0" + ] + }, + "3024": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_acct#0" + ] + }, + "3025": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_acct#0", + "asset_id#0 (copy)" + ] + }, + "3027": { + "op": "asset_holding_get AssetBalance", + "defined_out": [ + "reserve_acct#0", + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "tmp%2#0", + "tmp%3#0" + ] + }, + "3029": { + "op": "bury 1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "tmp%3#0" + ] + }, + "3031": { + "op": "bz _get_asset_full_ternary_false@2", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0" + ] + }, + "3034": { + "op": "frame_dig 12", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_acct#0" + ] + }, + "3036": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_acct#0", + "asset_id#0 (copy)" + ] + }, + "3038": { + "op": "asset_holding_get AssetBalance", + "defined_out": [ + "check%1#0", + "reserve_acct#0", + "value%1#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "value%1#0", + "check%1#0" + ] + }, + "3040": { + "error": "account opted into asset", + "op": "assert // account opted into asset", + "defined_out": [ + "reserve_acct#0", + "reserve_balance#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3041": { + "block": "_get_asset_full_ternary_merge@3", + "stack_in": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ], + "op": "frame_dig -1", + "defined_out": [ + "asset_id#0 (copy)" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3043": { + "op": "asset_params_get AssetName", + "defined_out": [ + "check%2#0", + "value%2#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%2#0", + "check%2#0" + ] + }, + "3045": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%2#0" + ] + }, + "3046": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "tmp%4#0" + ] + }, + "3049": { + "op": "frame_bury 1", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3051": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3053": { + "op": "asset_params_get AssetUnitName", + "defined_out": [ + "check%3#0", + "tmp%4#0", + "value%3#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%3#0", + "check%3#0" + ] + }, + "3055": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%3#0" + ] + }, + "3056": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%4#0", + "tmp%5#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "tmp%5#0" + ] + }, + "3059": { + "op": "frame_bury 2", + "defined_out": [ + "tmp%4#0", + "tmp%5#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3061": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3063": { + "op": "asset_params_get AssetURL", + "defined_out": [ + "check%4#0", + "tmp%4#0", + "tmp%5#0", + "value%4#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%4#0", + "check%4#0" + ] + }, + "3065": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%4#0" + ] + }, + "3066": { + "callsub": "smart_contracts.asset_labeling.contract.b2str", + "op": "callsub b2str", + "defined_out": [ + "tmp%4#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "tmp%6#0" + ] + }, + "3069": { + "op": "frame_bury 3", + "defined_out": [ + "tmp%4#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3071": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3073": { + "op": "asset_params_get AssetTotal", + "defined_out": [ + "check%5#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "value%5#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%5#0", + "check%5#0" + ] + }, + "3075": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%5#0" + ] + }, + "3076": { + "op": "itob", + "defined_out": [ + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "val_as_bytes%0#0" + ] + }, + "3077": { + "op": "frame_bury 6", + "defined_out": [ + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3079": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3081": { + "op": "asset_params_get AssetDecimals", + "defined_out": [ + "check%6#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0", + "value%6#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%6#0", + "check%6#0" + ] + }, + "3083": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%6#0" + ] + }, + "3084": { + "op": "itob", + "defined_out": [ + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "val_as_bytes%1#0" + ] + }, + "3085": { + "op": "dup", + "defined_out": [ + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0", + "val_as_bytes%1#0", + "val_as_bytes%1#0 (copy)" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "val_as_bytes%1#0", + "val_as_bytes%1#0 (copy)" + ] + }, + "3086": { + "op": "bitlen", + "defined_out": [ + "bitlen%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "val_as_bytes%1#0", + "bitlen%0#0" + ] + }, + "3087": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "bitlen%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "val_as_bytes%1#0", + "bitlen%0#0", + "8" + ] + }, + "3088": { + "op": "<=", + "defined_out": [ + "no_overflow%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0", + "val_as_bytes%1#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "val_as_bytes%1#0", + "no_overflow%0#0" + ] + }, + "3089": { + "error": "overflow", + "op": "assert // overflow", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "val_as_bytes%1#0" + ] + }, + "3090": { + "op": "extract 7 1", + "defined_out": [ + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "uint8%0#0" + ] + }, + "3093": { + "op": "frame_bury 5", + "defined_out": [ + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3095": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3097": { + "op": "asset_params_get AssetManager", + "defined_out": [ + "check%7#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%7#0", + "check%7#0" + ] + }, + "3099": { + "op": "swap", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "check%7#0", + "value%7#0" + ] + }, + "3100": { + "op": "frame_bury 9", + "defined_out": [ + "check%7#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "check%7#0" + ] + }, + "3102": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3103": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3105": { + "op": "asset_params_get AssetFreeze", + "defined_out": [ + "check%8#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0", + "value%8#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%8#0", + "check%8#0" + ] + }, + "3107": { + "op": "swap", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "check%8#0", + "value%8#0" + ] + }, + "3108": { + "op": "frame_bury 10", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "check%8#0" + ] + }, + "3110": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3111": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3113": { + "op": "asset_params_get AssetClawback", + "defined_out": [ + "check%9#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%9#0", + "check%9#0" + ] + }, + "3115": { + "op": "swap", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "check%9#0", + "value%9#0" + ] + }, + "3116": { + "op": "frame_bury 11", + "defined_out": [ + "check%9#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "check%9#0" + ] + }, + "3118": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3119": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3121": { + "op": "asset_params_get AssetReserve", + "defined_out": [ + "check%10#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%10#0", + "check%10#0" + ] + }, + "3123": { + "op": "swap", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "check%10#0", + "value%10#0" + ] + }, + "3124": { + "op": "frame_bury 8", + "defined_out": [ + "check%10#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "check%10#0" + ] + }, + "3126": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3127": { + "op": "frame_dig -1", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "asset_id#0 (copy)" + ] + }, + "3129": { + "op": "asset_params_get AssetMetadataHash", + "defined_out": [ + "check%11#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%11#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%11#0", + "check%11#0" + ] + }, + "3131": { + "error": "asset exists", + "op": "assert // asset exists", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%11#0" + ] + }, + "3132": { + "op": "dup", + "defined_out": [ + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%11#0", + "value%11#0 (copy)", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%11#0", + "value%11#0 (copy)" + ] + }, + "3133": { + "op": "len", + "defined_out": [ + "length%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%11#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%11#0", + "length%0#0" + ] + }, + "3134": { + "op": "itob", + "defined_out": [ + "as_bytes%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%11#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%11#0", + "as_bytes%0#0" + ] + }, + "3135": { + "op": "extract 6 2", + "defined_out": [ + "length_uint16%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%11#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%9#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "value%11#0", + "length_uint16%0#0" ] }, - "1510": { - "op": "bz remove_label_from_asset_else_body@3", + "3138": { + "op": "swap", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "length_uint16%0#0", + "value%11#0" ] }, - "1513": { - "op": "frame_dig 3", + "3139": { + "op": "concat", + "defined_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0", + "encoded_value%0#0" ] }, - "1515": { - "op": "box_del", + "3140": { + "op": "frame_bury 0", "defined_out": [ - "found#0", - "tmp%1#0", - "{box_del}" + "encoded_value%0#0", + "reserve_balance#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "{box_del}" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3142": { + "op": "itob", + "defined_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "val_as_bytes%2#0" + ] + }, + "3143": { + "op": "frame_bury 7", + "defined_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0" ] }, - "1516": { - "op": "pop", + "3145": { + "op": "frame_dig -1", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "asset_id#0 (copy)" + ] + }, + "3147": { + "op": "itob", + "defined_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "tmp%7#0" ] }, - "1517": { - "op": "intc_0 // 1", + "3148": { + "op": "dup", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "found#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "tmp%7#0", + "tmp%7#0" ] }, - "1518": { - "op": "frame_bury 5", + "3149": { + "op": "frame_bury 4", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "tmp%7#0" ] }, - "1520": { - "block": "remove_label_from_asset_after_if_else@13", - "stack_in": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" - ], - "op": "frame_dig 5", + "3151": { + "op": "box_len", "defined_out": [ - "found#0" + "encoded_value%0#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "found#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "maybe_value%0#0", + "maybe_exists%0#0" ] }, - "1522": { - "op": "bnz remove_label_from_asset_after_if_else@16", + "3152": { + "op": "bury 1", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "maybe_exists%0#0" ] }, - "1525": { - "op": "bytec_0 // \"ERR:NOEXIST\"", - "defined_out": [ - "\"ERR:NOEXIST\"", - "found#0" - ], + "3154": { + "op": "bz _get_asset_full_ternary_false@5", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "\"ERR:NOEXIST\"" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0" ] }, - "1526": { - "op": "log", + "3157": { + "op": "frame_dig 4", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "tmp%7#0" ] }, - "1527": { - "op": "err" + "3159": { + "op": "box_get", + "defined_out": [ + "encoded_value%0#0", + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] }, - "1528": { - "block": "remove_label_from_asset_after_if_else@16", + "3160": { + "error": "check self.assets entry exists", + "op": "assert // check self.assets entry exists", + "defined_out": [ + "encoded_value%0#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1" + ] + }, + "3161": { + "block": "_get_asset_full_ternary_merge@6", "stack_in": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1" ], - "op": "frame_dig -2", + "op": "frame_dig 1", "defined_out": [ - "label#0 (copy)" + "tmp%4#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label#0 (copy)" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0" ] }, - "1530": { - "op": "box_get", + "3163": { + "op": "dup", "defined_out": [ - "label_descriptor#0", - "maybe_exists%4#0" + "tmp%4#0", + "tmp%4#0 (copy)" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "maybe_exists%4#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%4#0 (copy)" ] }, - "1531": { - "error": "check self.labels entry exists", - "op": "assert // check self.labels entry exists", + "3164": { + "op": "len", + "defined_out": [ + "data_length%0#0", + "tmp%4#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "data_length%0#0" ] }, - "1532": { - "op": "dup", + "3165": { + "op": "pushint 155 // 155", "defined_out": [ - "label_descriptor#0", - "label_descriptor#0 (copy)" + "155", + "data_length%0#0", + "tmp%4#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "label_descriptor#0 (copy)" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "data_length%0#0", + "155" ] }, - "1533": { - "op": "intc_2 // 2", + "3168": { + "op": "+", "defined_out": [ - "2", - "label_descriptor#0", - "label_descriptor#0 (copy)" + "current_tail_offset%1#0", + "tmp%4#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "label_descriptor#0 (copy)", - "2" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "current_tail_offset%1#0" ] }, - "1534": { - "op": "extract_uint64", + "3169": { + "op": "dup", "defined_out": [ - "label_descriptor#0", - "tmp%20#0" + "current_tail_offset%1#0", + "current_tail_offset%1#0 (copy)", + "tmp%4#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "tmp%20#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "current_tail_offset%1#0", + "current_tail_offset%1#0 (copy)" ] }, - "1535": { - "op": "intc_0 // 1", + "3170": { + "op": "itob", "defined_out": [ - "1", - "label_descriptor#0", - "tmp%20#0" + "as_bytes%2#0", + "current_tail_offset%1#0", + "tmp%4#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "tmp%20#0", - "1" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "current_tail_offset%1#0", + "as_bytes%2#0" ] }, - "1536": { - "op": "-", + "3171": { + "op": "extract 6 2", "defined_out": [ - "label_descriptor#0", - "to_encode%0#0" + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "tmp%4#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "to_encode%0#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "current_tail_offset%1#0", + "offset_as_uint16%1#0" ] }, - "1537": { - "op": "itob", + "3174": { + "op": "pushbytes 0x009b", "defined_out": [ - "label_descriptor#0", - "val_as_bytes%0#0" + "0x009b", + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "tmp%4#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "val_as_bytes%0#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "current_tail_offset%1#0", + "offset_as_uint16%1#0", + "0x009b" ] }, - "1538": { - "op": "replace2 2", + "3178": { + "op": "swap", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "current_tail_offset%1#0", + "0x009b", + "offset_as_uint16%1#0" ] }, - "1540": { - "op": "frame_dig -2", + "3179": { + "op": "concat", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%4#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "label#0 (copy)" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0" ] }, - "1542": { - "op": "box_del", + "3180": { + "op": "frame_dig 2", "defined_out": [ - "label_descriptor#0", - "{box_del}" + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%4#0", + "tmp%5#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "{box_del}" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%5#0" + ] + }, + "3182": { + "op": "dup", + "defined_out": [ + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%4#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%5#0 (copy)", + "tmp%5#0 (copy)" ] }, - "1543": { - "op": "pop", + "3183": { + "op": "cover 3", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "tmp%5#0 (copy)" ] }, - "1544": { - "op": "frame_dig -2", + "3185": { + "op": "len", + "defined_out": [ + "current_tail_offset%1#0", + "data_length%1#0", + "encoded_tuple_buffer%2#0", + "tmp%4#0", + "tmp%5#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label_descriptor#0", - "label#0 (copy)" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "current_tail_offset%1#0", + "encoded_tuple_buffer%2#0", + "data_length%1#0" ] }, - "1546": { - "op": "swap", + "3186": { + "op": "uncover 2", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "label#0 (copy)", - "label_descriptor#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "encoded_tuple_buffer%2#0", + "data_length%1#0", + "current_tail_offset%1#0" ] }, - "1547": { - "op": "box_put", + "3188": { + "op": "+", + "defined_out": [ + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "tmp%4#0", + "tmp%5#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0" ] }, - "1548": { - "retsub": true, - "op": "retsub" - }, - "1549": { - "block": "remove_label_from_asset_else_body@3", - "stack_in": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" - ], - "op": "intc_1 // 0", + "3189": { + "op": "dup", "defined_out": [ - "found#0" + "current_tail_offset%2#0", + "current_tail_offset%2#0 (copy)", + "encoded_tuple_buffer%2#0", + "tmp%4#0", + "tmp%5#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "found#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0", + "current_tail_offset%2#0 (copy)" ] }, - "1550": { - "op": "frame_bury 5", + "3190": { + "op": "itob", "defined_out": [ - "found#0" + "as_bytes%3#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "tmp%4#0", + "tmp%5#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0", + "as_bytes%3#0" ] }, - "1552": { - "op": "b remove_label_from_asset_after_if_else@13" - }, - "1555": { - "block": "remove_label_from_asset_else_body@5", - "stack_in": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" - ], - "op": "bytec 11 // 0x0000", + "3191": { + "op": "extract 6 2", "defined_out": [ - "next_list#0" + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "offset_as_uint16%2#0", + "tmp%4#0", + "tmp%5#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "next_list#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "encoded_tuple_buffer%2#0", + "current_tail_offset%2#0", + "offset_as_uint16%2#0" ] }, - "1557": { - "op": "frame_bury 1", + "3194": { + "op": "uncover 2", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "current_tail_offset%2#0", + "offset_as_uint16%2#0", + "encoded_tuple_buffer%2#0" + ] + }, + "3196": { + "op": "swap", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%2#0", + "offset_as_uint16%2#0" + ] + }, + "3197": { + "op": "concat", "defined_out": [ - "next_list#0" + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%4#0", + "tmp%5#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0" ] }, - "1559": { + "3198": { "op": "frame_dig 3", "defined_out": [ - "next_list#0", - "tmp%1#0" + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%6#0" ] }, - "1561": { - "op": "box_get", + "3200": { + "op": "dup", "defined_out": [ - "maybe_exists%3#0", - "maybe_value%3#0", - "next_list#0", - "tmp%1#0" + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%6#0 (copy)" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "maybe_value%3#0", - "maybe_exists%3#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%6#0 (copy)", + "tmp%6#0 (copy)" ] }, - "1562": { - "op": "swap", + "3201": { + "op": "cover 3", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "maybe_exists%3#0", - "maybe_value%3#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "tmp%6#0 (copy)" ] }, - "1563": { - "op": "dup", + "3203": { + "op": "len", + "defined_out": [ + "current_tail_offset%2#0", + "data_length%2#0", + "encoded_tuple_buffer%3#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "maybe_exists%3#0", - "maybe_value%3#0", - "maybe_value%3#0 (copy)" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%2#0", + "encoded_tuple_buffer%3#0", + "data_length%2#0" ] }, - "1564": { - "op": "cover 2", + "3204": { + "op": "uncover 2", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "maybe_value%3#0", - "maybe_exists%3#0", - "maybe_value%3#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_tuple_buffer%3#0", + "data_length%2#0", + "current_tail_offset%2#0" ] }, - "1566": { - "op": "frame_bury 0", + "3206": { + "op": "+", "defined_out": [ - "maybe_exists%3#0", - "maybe_value%3#0", - "next_list#0", - "tmp%1#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%3#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "maybe_value%3#0", - "maybe_exists%3#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_tuple_buffer%3#0", + "current_tail_offset%3#0" ] }, - "1568": { - "error": "check self.assets entry exists", - "op": "assert // check self.assets entry exists", + "3207": { + "op": "swap", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "maybe_value%3#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%3#0" ] }, - "1569": { - "op": "intc_1 // 0", + "3208": { + "op": "frame_dig 6", + "defined_out": [ + "current_tail_offset%3#0", + "encoded_tuple_buffer%3#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "maybe_value%3#0", - "0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%3#0", + "val_as_bytes%0#0" ] }, - "1570": { - "op": "extract_uint16", + "3210": { + "op": "concat", "defined_out": [ - "array_length%1#0", - "maybe_value%3#0", - "next_list#0", - "tmp%1#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%4#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "val_as_bytes%0#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_length%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%4#0" ] }, - "1571": { - "op": "frame_bury 4", + "3211": { + "op": "frame_dig 5", "defined_out": [ - "array_length%1#0", - "maybe_value%3#0", - "next_list#0", - "tmp%1#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%4#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%4#0", + "uint8%0#0" ] }, - "1573": { - "op": "intc_1 // 0", + "3213": { + "op": "concat", "defined_out": [ - "array_length%1#0", - "idx#0", - "maybe_value%3#0", - "next_list#0", - "tmp%1#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%5#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%5#0" ] }, - "1574": { - "op": "frame_bury 6", + "3214": { + "op": "frame_dig 9", "defined_out": [ - "array_length%1#0", - "idx#0", - "maybe_value%3#0", - "next_list#0", - "tmp%1#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%5#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%5#0", + "value%7#0" ] }, - "1576": { - "block": "remove_label_from_asset_for_header@6", - "stack_in": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "3216": { + "op": "concat", + "defined_out": [ + "current_tail_offset%3#0", + "encoded_tuple_buffer%6#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0" ], - "op": "frame_dig 6", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%6#0" + ] + }, + "3217": { + "op": "frame_dig 10", "defined_out": [ - "idx#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%6#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0", + "value%8#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%6#0", + "value%8#0" ] }, - "1578": { - "op": "frame_dig 4", + "3219": { + "op": "concat", "defined_out": [ - "array_length%1#0", - "idx#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%7#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0", + "value%8#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "idx#0", - "array_length%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%7#0" ] }, - "1580": { - "op": "<", + "3220": { + "op": "frame_dig 11", "defined_out": [ - "array_length%1#0", - "continue_looping%0#0", - "idx#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%7#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "continue_looping%0#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%7#0", + "value%9#0" ] }, - "1581": { - "op": "bz remove_label_from_asset_after_for@12", + "3222": { + "op": "concat", + "defined_out": [ + "current_tail_offset%3#0", + "encoded_tuple_buffer%8#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%8#0" ] }, - "1584": { - "op": "frame_dig 0", + "3223": { + "op": "frame_dig 8", "defined_out": [ - "array_length%1#0", - "idx#0", - "maybe_value%3#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%8#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "maybe_value%3#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%8#0", + "value%10#0" ] }, - "1586": { - "op": "extract 2 0", + "3225": { + "op": "concat", "defined_out": [ - "array_head_and_tail%1#0", - "array_length%1#0", - "idx#0", - "maybe_value%3#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%9#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%9#0" ] }, - "1589": { - "op": "frame_dig 6", + "3226": { + "op": "dig 1", + "defined_out": [ + "current_tail_offset%3#0", + "current_tail_offset%3#0 (copy)", + "encoded_tuple_buffer%9#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%9#0", + "current_tail_offset%3#0 (copy)" ] }, - "1591": { - "op": "intc_2 // 2", + "3228": { + "op": "itob", "defined_out": [ - "2", - "array_head_and_tail%1#0", - "array_length%1#0", - "idx#0", - "maybe_value%3#0" + "as_bytes%4#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%9#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "idx#0", - "2" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%9#0", + "as_bytes%4#0" ] }, - "1592": { - "op": "*", + "3229": { + "op": "extract 6 2", "defined_out": [ - "array_head_and_tail%1#0", - "array_length%1#0", - "idx#0", - "item_offset_offset%1#0", - "maybe_value%3#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%9#0", + "offset_as_uint16%3#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "item_offset_offset%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%9#0", + "offset_as_uint16%3#0" ] }, - "1593": { - "op": "dig 1", + "3232": { + "op": "concat", "defined_out": [ - "array_head_and_tail%1#0", - "array_head_and_tail%1#0 (copy)", - "array_length%1#0", - "idx#0", - "item_offset_offset%1#0", - "maybe_value%3#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%10#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "item_offset_offset%1#0", - "array_head_and_tail%1#0 (copy)" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%10#0" ] }, - "1595": { - "op": "swap", + "3233": { + "op": "frame_dig 0", + "defined_out": [ + "current_tail_offset%3#0", + "encoded_tuple_buffer%10#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "array_head_and_tail%1#0 (copy)", - "item_offset_offset%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%10#0", + "encoded_value%0#0" ] }, - "1596": { - "op": "extract_uint16", + "3235": { + "op": "dup", "defined_out": [ - "array_head_and_tail%1#0", - "array_length%1#0", - "idx#0", - "item_offset%1#0", - "maybe_value%3#0" + "current_tail_offset%3#0", + "encoded_tuple_buffer%10#0", + "encoded_value%0#0", + "encoded_value%0#0 (copy)", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "item_offset%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%10#0", + "encoded_value%0#0 (copy)", + "encoded_value%0#0 (copy)" ] }, - "1597": { - "op": "dup2", - "defined_out": [ - "array_head_and_tail%1#0", - "array_head_and_tail%1#0 (copy)", - "array_length%1#0", - "idx#0", - "item_offset%1#0", - "item_offset%1#0 (copy)", - "maybe_value%3#0" - ], + "3236": { + "op": "cover 3", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "item_offset%1#0", - "array_head_and_tail%1#0 (copy)", - "item_offset%1#0 (copy)" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%10#0", + "encoded_value%0#0 (copy)" ] }, - "1598": { - "op": "extract_uint16", + "3238": { + "op": "len", "defined_out": [ - "array_head_and_tail%1#0", - "array_length%1#0", - "idx#0", - "item_length%1#0", - "item_offset%1#0", - "maybe_value%3#0" + "current_tail_offset%3#0", + "data_length%3#0", + "encoded_tuple_buffer%10#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "item_offset%1#0", - "item_length%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "current_tail_offset%3#0", + "encoded_tuple_buffer%10#0", + "data_length%3#0" ] }, - "1599": { - "op": "intc_2 // 2", + "3239": { + "op": "uncover 2", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "item_offset%1#0", - "item_length%1#0", - "2" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%10#0", + "data_length%3#0", + "current_tail_offset%3#0" ] }, - "1600": { + "3241": { "op": "+", "defined_out": [ - "array_head_and_tail%1#0", - "array_length%1#0", - "idx#0", - "item_head_tail_length%1#0", - "item_offset%1#0", - "maybe_value%3#0" + "current_tail_offset%4#0", + "encoded_tuple_buffer%10#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "array_head_and_tail%1#0", - "item_offset%1#0", - "item_head_tail_length%1#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%10#0", + "current_tail_offset%4#0" ] }, - "1601": { - "op": "extract3", - "defined_out": [ - "array_length%1#0", - "idx#0", - "maybe_value%3#0", - "stored_label#0" - ], + "3242": { + "op": "swap", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "stored_label#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "current_tail_offset%4#0", + "encoded_tuple_buffer%10#0" ] }, - "1602": { - "op": "dup", + "3243": { + "op": "frame_dig 7", + "defined_out": [ + "current_tail_offset%4#0", + "encoded_tuple_buffer%10#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "stored_label#0", - "stored_label#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "current_tail_offset%4#0", + "encoded_tuple_buffer%10#0", + "val_as_bytes%2#0" ] }, - "1603": { - "op": "frame_bury 2", + "3245": { + "op": "concat", "defined_out": [ - "array_length%1#0", - "idx#0", - "maybe_value%3#0", - "stored_label#0" + "current_tail_offset%4#0", + "encoded_tuple_buffer%11#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "stored_label#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "current_tail_offset%4#0", + "encoded_tuple_buffer%11#0" ] }, - "1605": { - "op": "extract 2 0", + "3246": { + "op": "swap", + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%11#0", + "current_tail_offset%4#0" + ] + }, + "3247": { + "op": "itob", "defined_out": [ - "array_length%1#0", - "idx#0", - "maybe_value%3#0", - "stored_label#0", - "tmp%14#0" + "as_bytes%5#0", + "encoded_tuple_buffer%11#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%14#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%11#0", + "as_bytes%5#0" ] }, - "1608": { - "op": "frame_dig -2", + "3248": { + "op": "extract 6 2", "defined_out": [ - "array_length%1#0", - "idx#0", - "label#0 (copy)", - "maybe_value%3#0", - "stored_label#0", - "tmp%14#0" + "encoded_tuple_buffer%11#0", + "encoded_value%0#0", + "offset_as_uint16%4#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%14#0", - "label#0 (copy)" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%11#0", + "offset_as_uint16%4#0" ] }, - "1610": { - "op": "!=", + "3251": { + "op": "concat", "defined_out": [ - "array_length%1#0", - "idx#0", - "maybe_value%3#0", - "stored_label#0", - "tmp%15#0" + "encoded_tuple_buffer%12#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%15#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%12#0" ] }, - "1611": { - "op": "bz remove_label_from_asset_else_body@9", + "3252": { + "op": "uncover 4", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%12#0", + "tmp%4#0" ] }, - "1614": { - "op": "frame_dig 1", + "3254": { + "op": "concat", "defined_out": [ - "array_length%1#0", - "idx#0", - "maybe_value%3#0", - "next_list#0", - "stored_label#0" + "encoded_tuple_buffer%13#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "next_list#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%5#0", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%13#0" ] }, - "1616": { - "op": "frame_dig 2", + "3255": { + "op": "uncover 3", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "next_list#0", - "stored_label#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%13#0", + "tmp%5#0" ] }, - "1618": { - "op": "intc_0 // 1", + "3257": { + "op": "concat", "defined_out": [ - "1", - "array_length%1#0", - "idx#0", - "maybe_value%3#0", - "next_list#0", - "stored_label#0" + "encoded_tuple_buffer%14#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "next_list#0", - "stored_label#0", - "1" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "tmp%6#0", + "encoded_value%0#0", + "encoded_tuple_buffer%14#0" ] }, - "1619": { - "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", - "op": "callsub dynamic_array_concat_byte_length_head", + "3258": { + "op": "uncover 2", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "next_list#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "encoded_value%0#0", + "encoded_tuple_buffer%14#0", + "tmp%6#0" ] }, - "1622": { - "op": "frame_bury 1", + "3260": { + "op": "concat", "defined_out": [ - "array_length%1#0", - "idx#0", - "maybe_value%3#0", - "next_list#0", - "stored_label#0" + "encoded_tuple_buffer%15#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "encoded_value%0#0", + "encoded_tuple_buffer%15#0" ] }, - "1624": { - "block": "remove_label_from_asset_after_if_else@10", - "stack_in": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" - ], - "op": "frame_dig 6", - "defined_out": [ - "idx#0" - ], + "3261": { + "op": "swap", "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "encoded_tuple_buffer%15#0", + "encoded_value%0#0" ] }, - "1626": { - "op": "intc_0 // 1", + "3262": { + "op": "concat", "defined_out": [ - "1", - "idx#0" + "encoded_tuple_buffer%16#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "idx#0", - "1" - ] - }, - "1627": { - "op": "+", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1", + "encoded_tuple_buffer%16#0" + ] + }, + "3263": { + "op": "swap", + "defined_out": [ + "encoded_tuple_buffer%16#0", + "encoded_value%0#0", + "ternary_result%1#1", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "idx#0" - ] - }, - "1628": { - "op": "frame_bury 6", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "encoded_tuple_buffer%16#0", + "ternary_result%1#1" + ] + }, + "3264": { + "op": "concat", "defined_out": [ - "idx#0" + "encoded_tuple_buffer%17#0", + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" - ] + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "encoded_tuple_buffer%17#0" + ] + }, + "3265": { + "op": "frame_bury 0" }, - "1630": { - "op": "b remove_label_from_asset_for_header@6" + "3267": { + "retsub": true, + "op": "retsub" }, - "1633": { - "block": "remove_label_from_asset_else_body@9", + "3268": { + "block": "_get_asset_full_ternary_false@5", "stack_in": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0" ], - "op": "intc_0 // 1", + "op": "bytec_2 // 0x0000", "defined_out": [ - "found#0" + "ternary_result%1#1" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "found#0" + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "ternary_result%1#1" + ] + }, + "3269": { + "op": "b _get_asset_full_ternary_merge@6" + }, + "3272": { + "block": "_get_asset_full_ternary_false@2", + "stack_in": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0" + ], + "op": "intc_1 // 0", + "defined_out": [ + "reserve_balance#0" + ], + "stack_out": [ + "encoded_value%0#0", + "tmp%4#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "uint8%0#0", + "val_as_bytes%0#0", + "val_as_bytes%2#0", + "value%10#0", + "value%7#0", + "value%8#0", + "value%9#0", + "reserve_acct#0", + "reserve_balance#0" + ] + }, + "3273": { + "op": "b _get_asset_full_ternary_merge@3" + }, + "3276": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_full", + "params": { + "asset#0": "uint64" + }, + "block": "get_asset_full", + "stack_in": [], + "op": "proto 1 1" + }, + "3279": { + "op": "frame_dig -1", + "defined_out": [ + "asset#0 (copy)" + ], + "stack_out": [ + "asset#0 (copy)" ] }, - "1634": { - "op": "frame_bury 5", + "3281": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_full", + "op": "callsub _get_asset_full", "defined_out": [ - "found#0" + "tmp%0#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "tmp%0#0" ] }, - "1636": { - "op": "b remove_label_from_asset_after_if_else@10" + "3284": { + "retsub": true, + "op": "retsub" }, - "1639": { - "block": "remove_label_from_asset_after_for@12", - "stack_in": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" - ], - "op": "frame_dig 3", + "3285": { + "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_full", + "params": { + "assets#0": "bytes" + }, + "block": "get_assets_full", + "stack_in": [], + "op": "proto 1 0" + }, + "3288": { + "op": "frame_dig -1", "defined_out": [ - "tmp%1#0" + "assets#0 (copy)" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%1#0" + "assets#0 (copy)" ] }, - "1641": { - "op": "dup", + "3290": { + "op": "intc_1 // 0", "defined_out": [ - "tmp%1#0", - "tmp%1#0 (copy)" + "0", + "assets#0 (copy)" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%1#0", - "tmp%1#0 (copy)" + "assets#0 (copy)", + "0" ] }, - "1642": { - "op": "box_del", + "3291": { + "op": "extract_uint16", "defined_out": [ - "tmp%1#0", - "{box_del}" + "array_length%0#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%1#0", - "{box_del}" + "array_length%0#0" ] }, - "1643": { - "op": "pop", + "3292": { + "op": "intc_1 // 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%1#0" + "array_length%0#0", + "_i#0" ] }, - "1644": { + "3293": { + "block": "get_assets_full_for_header@1", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], "op": "frame_dig 1", "defined_out": [ - "next_list#0", - "tmp%1#0" + "_i#0" ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0", - "tmp%1#0", - "next_list#0" + "array_length%0#0", + "_i#0", + "_i#0" ] }, - "1646": { - "op": "box_put", + "3295": { + "op": "frame_dig 0", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], "stack_out": [ - "maybe_value%3#0", - "next_list#0", - "stored_label#0", - "tmp%1#0", - "array_length%1#0", - "found#0", - "idx#0" + "array_length%0#0", + "_i#0", + "_i#0", + "array_length%0#0" ] }, - "1647": { - "op": "b remove_label_from_asset_after_if_else@13" + "3297": { + "op": "<", + "defined_out": [ + "_i#0", + "array_length%0#0", + "continue_looping%0#0" + ], + "stack_out": [ + "array_length%0#0", + "_i#0", + "continue_looping%0#0" + ] }, - "1650": { - "subroutine": "smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_labels", - "params": { - "asset#0": "uint64" - }, - "block": "get_asset_labels", - "stack_in": [], - "op": "proto 1 1" + "3298": { + "op": "bz get_assets_full_after_for@4", + "stack_out": [ + "array_length%0#0", + "_i#0" + ] }, - "1653": { + "3301": { "op": "frame_dig -1", "defined_out": [ - "asset#0 (copy)" + "_i#0", + "array_length%0#0", + "assets#0 (copy)" ], "stack_out": [ - "asset#0 (copy)" + "array_length%0#0", + "_i#0", + "assets#0 (copy)" ] }, - "1655": { - "op": "itob", + "3303": { + "op": "extract 2 0", "defined_out": [ - "tmp%0#0" + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0" ], "stack_out": [ - "tmp%0#0" + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0" + ] + }, + "3306": { + "op": "frame_dig 1", + "stack_out": [ + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0" ] }, - "1656": { + "3308": { "op": "dup", "defined_out": [ - "tmp%0#0" + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" ], "stack_out": [ - "tmp%0#0", - "tmp%0#0" + "array_length%0#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "_i#0 (copy)" ] }, - "1657": { - "op": "box_len", + "3309": { + "op": "cover 2", + "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)" + ] + }, + "3311": { + "op": "intc_3 // 8", "defined_out": [ - "cond#0", - "maybe_value%0#0", - "tmp%0#0" + "8", + "_i#0", + "_i#0 (copy)", + "array_head_and_tail%0#0", + "array_length%0#0" ], "stack_out": [ - "tmp%0#0", - "maybe_value%0#0", - "cond#0" + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "_i#0 (copy)", + "8" ] }, - "1658": { - "op": "bury 1", + "3312": { + "op": "*", + "defined_out": [ + "_i#0", + "array_head_and_tail%0#0", + "array_length%0#0", + "item_offset%0#0" + ], "stack_out": [ - "tmp%0#0", - "cond#0" + "array_length%0#0", + "_i#0", + "_i#0", + "array_head_and_tail%0#0", + "item_offset%0#0" ] }, - "1660": { - "op": "bnz get_asset_labels_after_if_else@3", + "3313": { + "op": "extract_uint64", + "defined_out": [ + "_i#0", + "array_length%0#0", + "tmp%0#0" + ], "stack_out": [ + "array_length%0#0", + "_i#0", + "_i#0", "tmp%0#0" ] }, - "1663": { - "op": "bytec_0 // \"ERR:NOEXIST\"", + "3314": { + "callsub": "smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_full", + "op": "callsub _get_asset_full", "defined_out": [ - "\"ERR:NOEXIST\"", - "tmp%0#0" + "_i#0", + "array_length%0#0", + "tmp%1#0" ], "stack_out": [ - "tmp%0#0", - "\"ERR:NOEXIST\"" + "array_length%0#0", + "_i#0", + "_i#0", + "tmp%1#0" ] }, - "1664": { + "3317": { "op": "log", "stack_out": [ - "tmp%0#0" + "array_length%0#0", + "_i#0", + "_i#0" ] }, - "1665": { - "op": "err" - }, - "1666": { - "block": "get_asset_labels_after_if_else@3", - "stack_in": [ - "tmp%0#0" - ], - "op": "frame_dig 0", + "3318": { + "op": "intc_0 // 1", "defined_out": [ - "tmp%0#0" + "1", + "_i#0", + "array_length%0#0" ], "stack_out": [ - "tmp%0#0", - "tmp%0#0" + "array_length%0#0", + "_i#0", + "_i#0", + "1" ] }, - "1668": { - "op": "box_get", - "defined_out": [ - "maybe_exists%1#0", - "maybe_value%1#0", - "tmp%0#0" - ], + "3319": { + "op": "+", "stack_out": [ - "tmp%0#0", - "maybe_value%1#0", - "maybe_exists%1#0" + "array_length%0#0", + "_i#0", + "_i#0" ] }, - "1669": { - "error": "check self.assets entry exists", - "op": "assert // check self.assets entry exists", + "3320": { + "op": "frame_bury 1", + "defined_out": [ + "_i#0", + "array_length%0#0" + ], "stack_out": [ - "tmp%0#0", - "maybe_value%1#0" + "array_length%0#0", + "_i#0" ] }, - "1670": { - "op": "swap" + "3322": { + "op": "b get_assets_full_for_header@1" }, - "1671": { + "3325": { + "block": "get_assets_full_after_for@4", + "stack_in": [ + "array_length%0#0", + "_i#0" + ], "retsub": true, "op": "retsub" } diff --git a/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.approval.teal b/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.approval.teal index 3b2ae91..9695c2a 100644 --- a/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.approval.teal +++ b/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.approval.teal @@ -3,177 +3,449 @@ // smart_contracts.asset_labeling.contract.AssetLabeling.__algopy_entrypoint_with_init() -> uint64: main: - intcblock 1 0 2 4294967295 4294967296 - bytecblock "ERR:NOEXIST" "admin" "" 0x151f7c75 "ERR:EXISTS" "ERR:UNAUTH" "ERR:LENGTH" 0x0000000000000000 "ERR:NOEMPTY" 0x0002 0x0001 0x0000 + intcblock 1 0 2 8 4294967295 4294967296 + bytecblock 0x151f7c75 "ERR:NOEXIST" 0x0000 "" "admin" "ERR:EXISTS" 0x0002 "ERR:UNAUTH" 0x0000000000000000 "ERR:NOEMPTY" 0x0001 txn ApplicationID bnz main_after_if_else@2 - // smart_contracts/asset_labeling/contract.py:40 + // smart_contracts/asset_labeling/contract.py:57 // self.admin = Txn.sender - bytec_1 // "admin" + bytec 4 // "admin" txn Sender app_global_put main_after_if_else@2: - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txn NumAppArgs - bz main_bare_routing@15 - pushbytess 0x8f0d7d8e 0x7c1b32f6 0x17e691ae 0x33d0ffdc 0xfac1cf1b 0xb4c50b9f 0xa2dd2247 0xa37dea11 0x68f18efa 0xc2ed743f // method "change_admin(account)void", method "add_label(string,string)void", method "remove_label(string)void", method "get_label(string)(string,uint64,uint64)", method "add_operator_to_label(account,string)void", method "remove_operator_from_label(account,string)void", method "get_operator_labels(account)string[]", method "add_label_to_asset(string,asset)void", method "remove_label_from_asset(string,asset)void", method "get_asset_labels(asset)string[]" + bz main_bare_routing@29 + pushbytess 0x8f0d7d8e 0x7c1b32f6 0x17e691ae 0x33d0ffdc 0x725616e7 0xfac1cf1b 0xb4c50b9f 0xa2dd2247 0xa37dea11 0x68f18efa 0xc2ed743f 0xa67f03c2 0xaaee0c61 0xb6c39f68 0x635be362 0x7093b10d 0xe1bb95fc 0x5540b80a 0x8a412f93 0x6f17cdd5 0x7a4ce4b9 0x366c51af 0xd5d3bad3 0x03ba98db // method "change_admin(account)void", method "add_label(string,string)void", method "remove_label(string)void", method "get_label(string)(string,uint64,uint64)", method "log_labels(string[])void", method "add_operator_to_label(account,string)void", method "remove_operator_from_label(account,string)void", method "get_operator_labels(account)string[]", method "add_label_to_asset(string,asset)void", method "remove_label_from_asset(string,asset)void", method "get_asset_labels(asset)string[]", method "get_assets_labels(uint64[])string[][]", method "get_asset_micro(uint64)(string,uint8)", method "get_assets_micro(uint64[])void", method "get_asset_micro_labels(uint64)(string,uint8,string[])", method "get_assets_micro_labels(uint64[])void", method "get_asset_text(uint64)(string,string,string,string[])", method "get_assets_text(uint64[])void", method "get_asset_text_labels(uint64)(string,string,string)", method "get_assets_text_labels(uint64[])void", method "get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])", method "get_assets_small(uint64[])void", method "get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])", method "get_assets_full(uint64[])void" txna ApplicationArgs 0 - match main_change_admin_route@5 main_add_label_route@6 main_remove_label_route@7 main_get_label_route@8 main_add_operator_to_label_route@9 main_remove_operator_from_label_route@10 main_get_operator_labels_route@11 main_add_label_to_asset_route@12 main_remove_label_from_asset_route@13 main_get_asset_labels_route@14 + match main_change_admin_route@5 main_add_label_route@6 main_remove_label_route@7 main_get_label_route@8 main_log_labels_route@9 main_add_operator_to_label_route@10 main_remove_operator_from_label_route@11 main_get_operator_labels_route@12 main_add_label_to_asset_route@13 main_remove_label_from_asset_route@14 main_get_asset_labels_route@15 main_get_assets_labels_route@16 main_get_asset_micro_route@17 main_get_assets_micro_route@18 main_get_asset_micro_labels_route@19 main_get_assets_micro_labels_route@20 main_get_asset_text_route@21 main_get_assets_text_route@22 main_get_asset_text_labels_route@23 main_get_assets_text_labels_route@24 main_get_asset_small_route@25 main_get_assets_small_route@26 main_get_asset_full_route@27 main_get_assets_full_route@28 -main_after_if_else@17: - // smart_contracts/asset_labeling/contract.py:38 +main_after_if_else@33: + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): intc_1 // 0 return -main_get_asset_labels_route@14: - // smart_contracts/asset_labeling/contract.py:249 +main_get_assets_full_route@28: + // smart_contracts/asset_labeling/contract.py:441 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + // smart_contracts/asset_labeling/contract.py:441 + // @abimethod(readonly=True) + callsub get_assets_full + intc_0 // 1 + return + +main_get_asset_full_route@27: + // smart_contracts/asset_labeling/contract.py:437 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + btoi + // smart_contracts/asset_labeling/contract.py:437 + // @abimethod(readonly=True) + callsub get_asset_full + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + +main_get_assets_small_route@26: + // smart_contracts/asset_labeling/contract.py:406 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + // smart_contracts/asset_labeling/contract.py:406 + // @abimethod(readonly=True) + callsub get_assets_small + intc_0 // 1 + return + +main_get_asset_small_route@25: + // smart_contracts/asset_labeling/contract.py:402 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + btoi + // smart_contracts/asset_labeling/contract.py:402 + // @abimethod(readonly=True) + callsub get_asset_small + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + +main_get_assets_text_labels_route@24: + // smart_contracts/asset_labeling/contract.py:382 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + // smart_contracts/asset_labeling/contract.py:382 + // @abimethod(readonly=True) + callsub get_assets_text_labels + intc_0 // 1 + return + +main_get_asset_text_labels_route@23: + // smart_contracts/asset_labeling/contract.py:378 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + btoi + // smart_contracts/asset_labeling/contract.py:378 + // @abimethod(readonly=True) + callsub get_asset_text_labels + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + +main_get_assets_text_route@22: + // smart_contracts/asset_labeling/contract.py:362 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + // smart_contracts/asset_labeling/contract.py:362 + // @abimethod(readonly=True) + callsub get_assets_text + intc_0 // 1 + return + +main_get_asset_text_route@21: + // smart_contracts/asset_labeling/contract.py:358 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + btoi + // smart_contracts/asset_labeling/contract.py:358 + // @abimethod(readonly=True) + callsub get_asset_text + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + +main_get_assets_micro_labels_route@20: + // smart_contracts/asset_labeling/contract.py:341 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + // smart_contracts/asset_labeling/contract.py:341 + // @abimethod(readonly=True) + callsub get_assets_micro_labels + intc_0 // 1 + return + +main_get_asset_micro_labels_route@19: + // smart_contracts/asset_labeling/contract.py:337 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + btoi + // smart_contracts/asset_labeling/contract.py:337 + // @abimethod(readonly=True) + callsub get_asset_micro_labels + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + +main_get_assets_micro_route@18: + // smart_contracts/asset_labeling/contract.py:321 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + // smart_contracts/asset_labeling/contract.py:321 + // @abimethod(readonly=True) + callsub get_assets_micro + intc_0 // 1 + return + +main_get_asset_micro_route@17: + // smart_contracts/asset_labeling/contract.py:317 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + btoi + // smart_contracts/asset_labeling/contract.py:317 + // @abimethod(readonly=True) + callsub get_asset_micro + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + +main_get_assets_labels_route@16: + // smart_contracts/asset_labeling/contract.py:290 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + // smart_contracts/asset_labeling/contract.py:290 + // @abimethod(readonly=True) + callsub get_assets_labels + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + +main_get_asset_labels_route@15: + // smart_contracts/asset_labeling/contract.py:283 // @abimethod(readonly=True) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 btoi txnas Assets - // smart_contracts/asset_labeling/contract.py:249 + // smart_contracts/asset_labeling/contract.py:283 // @abimethod(readonly=True) callsub get_asset_labels - bytec_3 // 0x151f7c75 + bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 return -main_remove_label_from_asset_route@13: - // smart_contracts/asset_labeling/contract.py:215 +main_remove_label_from_asset_route@14: + // smart_contracts/asset_labeling/contract.py:249 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 extract 2 0 txna ApplicationArgs 2 btoi txnas Assets - // smart_contracts/asset_labeling/contract.py:215 + // smart_contracts/asset_labeling/contract.py:249 // @abimethod() callsub remove_label_from_asset intc_0 // 1 return -main_add_label_to_asset_route@12: - // smart_contracts/asset_labeling/contract.py:187 +main_add_label_to_asset_route@13: + // smart_contracts/asset_labeling/contract.py:221 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 extract 2 0 txna ApplicationArgs 2 btoi txnas Assets - // smart_contracts/asset_labeling/contract.py:187 + // smart_contracts/asset_labeling/contract.py:221 // @abimethod() callsub add_label_to_asset intc_0 // 1 return -main_get_operator_labels_route@11: - // smart_contracts/asset_labeling/contract.py:173 +main_get_operator_labels_route@12: + // smart_contracts/asset_labeling/contract.py:205 // @abimethod(readonly=True) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 btoi txnas Accounts - // smart_contracts/asset_labeling/contract.py:173 + // smart_contracts/asset_labeling/contract.py:205 // @abimethod(readonly=True) callsub get_operator_labels - bytec_3 // 0x151f7c75 + bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 return -main_remove_operator_from_label_route@10: - // smart_contracts/asset_labeling/contract.py:132 +main_remove_operator_from_label_route@11: + // smart_contracts/asset_labeling/contract.py:164 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 btoi txnas Accounts txna ApplicationArgs 2 extract 2 0 - // smart_contracts/asset_labeling/contract.py:132 + // smart_contracts/asset_labeling/contract.py:164 // @abimethod() callsub remove_operator_from_label intc_0 // 1 return -main_add_operator_to_label_route@9: - // smart_contracts/asset_labeling/contract.py:104 +main_add_operator_to_label_route@10: + // smart_contracts/asset_labeling/contract.py:136 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 btoi txnas Accounts txna ApplicationArgs 2 extract 2 0 - // smart_contracts/asset_labeling/contract.py:104 + // smart_contracts/asset_labeling/contract.py:136 // @abimethod() callsub add_operator_to_label intc_0 // 1 return +main_log_labels_route@9: + // smart_contracts/asset_labeling/contract.py:103 + // @abimethod(readonly=True) + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // smart_contracts/asset_labeling/contract.py:55 + // class AssetLabeling(ARC4Contract): + txna ApplicationArgs 1 + // smart_contracts/asset_labeling/contract.py:103 + // @abimethod(readonly=True) + callsub log_labels + intc_0 // 1 + return + main_get_label_route@8: - // smart_contracts/asset_labeling/contract.py:73 + // smart_contracts/asset_labeling/contract.py:98 // @abimethod(readonly=True) txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 extract 2 0 - // smart_contracts/asset_labeling/contract.py:73 + // smart_contracts/asset_labeling/contract.py:98 // @abimethod(readonly=True) callsub get_label - bytec_3 // 0x151f7c75 + bytec_0 // 0x151f7c75 swap concat log @@ -181,67 +453,88 @@ main_get_label_route@8: return main_remove_label_route@7: - // smart_contracts/asset_labeling/contract.py:65 + // smart_contracts/asset_labeling/contract.py:91 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 extract 2 0 - // smart_contracts/asset_labeling/contract.py:65 + // smart_contracts/asset_labeling/contract.py:91 // @abimethod() callsub remove_label intc_0 // 1 return main_add_label_route@6: - // smart_contracts/asset_labeling/contract.py:54 + // smart_contracts/asset_labeling/contract.py:80 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 extract 2 0 txna ApplicationArgs 2 extract 2 0 - // smart_contracts/asset_labeling/contract.py:54 + // smart_contracts/asset_labeling/contract.py:80 // @abimethod() callsub add_label intc_0 // 1 return main_change_admin_route@5: - // smart_contracts/asset_labeling/contract.py:49 + // smart_contracts/asset_labeling/contract.py:75 // @abimethod() txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/asset_labeling/contract.py:38 + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txna ApplicationArgs 1 btoi txnas Accounts - // smart_contracts/asset_labeling/contract.py:49 + // smart_contracts/asset_labeling/contract.py:75 // @abimethod() callsub change_admin intc_0 // 1 return -main_bare_routing@15: - // smart_contracts/asset_labeling/contract.py:38 +main_bare_routing@29: + // smart_contracts/asset_labeling/contract.py:55 // class AssetLabeling(ARC4Contract): txn OnCompletion - bnz main_after_if_else@17 + switch main___algopy_default_create@32 main_after_if_else@33 main_after_if_else@33 main_after_if_else@33 main_update@30 main_delete@31 + b main_after_if_else@33 + +main_delete@31: + // smart_contracts/asset_labeling/contract.py:67 + // @arc4.baremethod(allow_actions=("DeleteApplication",)) + txn ApplicationID + assert // can only call when not creating + callsub delete + intc_0 // 1 + return + +main_update@30: + // smart_contracts/asset_labeling/contract.py:63 + // @arc4.baremethod(allow_actions=("UpdateApplication",)) + txn ApplicationID + assert // can only call when not creating + callsub update + intc_0 // 1 + return + +main___algopy_default_create@32: txn ApplicationID ! assert // can only call when creating @@ -328,45 +621,168 @@ dynamic_array_concat_byte_length_head_after_for@5: retsub -// smart_contracts.asset_labeling.contract.AssetLabeling.admin_only() -> void: -admin_only: - // smart_contracts/asset_labeling/contract.py:47 - // ensure(Txn.sender == self.admin, S("ERR:UNAUTH")) - txn Sender +// _puya_lib.arc4.dynamic_array_concat_dynamic_element(array_items_count: uint64, array_head_and_tail: bytes, new_items_count: uint64, new_head_and_tail: bytes) -> bytes: +dynamic_array_concat_dynamic_element: + proto 4 1 + bytec_3 // "" + dup + frame_dig -2 + intc_2 // 2 + * + frame_dig -4 + intc_2 // 2 + * intc_1 // 0 - bytec_1 // "admin" - app_global_get_ex - assert // check self.admin exists - == - // smart_contracts/asset_labeling/contract.py:27 - // if not cond: - bnz admin_only_after_if_else@3 - // smart_contracts/asset_labeling/contract.py:47 - // ensure(Txn.sender == self.admin, S("ERR:UNAUTH")) - bytec 5 // "ERR:UNAUTH" - // smart_contracts/asset_labeling/contract.py:28 - // log(msg) - log - // smart_contracts/asset_labeling/contract.py:29 - // op.err() - err - -admin_only_after_if_else@3: - retsub + +dynamic_array_concat_dynamic_element_for_header@1: + frame_dig 4 + frame_dig 3 + < + bz dynamic_array_concat_dynamic_element_after_for@4 + frame_dig -3 + frame_dig 4 + dup + cover 2 + extract_uint16 + frame_dig 2 + + + itob + extract 6 2 + frame_dig 1 + swap + concat + frame_bury 1 + intc_2 // 2 + + + frame_bury 4 + b dynamic_array_concat_dynamic_element_for_header@1 + +dynamic_array_concat_dynamic_element_after_for@4: + frame_dig -3 + len + frame_bury 0 + intc_1 // 0 + frame_bury 4 + +dynamic_array_concat_dynamic_element_for_header@5: + frame_dig 4 + frame_dig 2 + < + bz dynamic_array_concat_dynamic_element_after_for@8 + frame_dig -1 + frame_dig 4 + dup + cover 2 + extract_uint16 + frame_dig 0 + + + itob + extract 6 2 + frame_dig 1 + swap + concat + frame_bury 1 + intc_2 // 2 + + + frame_bury 4 + b dynamic_array_concat_dynamic_element_for_header@5 + +dynamic_array_concat_dynamic_element_after_for@8: + frame_dig -4 + frame_dig -2 + + + itob + extract 6 2 + frame_dig 1 + concat + frame_dig -3 + frame_dig 3 + frame_dig 0 + substring3 + concat + frame_dig -1 + len + frame_dig -1 + frame_dig 2 + uncover 2 + substring3 + concat + frame_bury 0 + retsub + + +// smart_contracts.asset_labeling.contract.b2str(b: bytes) -> bytes: +b2str: + // smart_contracts/asset_labeling/contract.py:50-51 + // @subroutine + // def b2str(b: Bytes) -> arc4.String: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:52 + // return arc4.String(String.from_bytes(b)) + frame_dig -1 + len + itob + extract 6 2 + frame_dig -1 + concat + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.update() -> void: +update: + // smart_contracts/asset_labeling/contract.py:65 + // self.admin_only() + callsub admin_only + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.delete() -> void: +delete: + // smart_contracts/asset_labeling/contract.py:69 + // self.admin_only() + callsub admin_only + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.admin_only() -> void: +admin_only: + // smart_contracts/asset_labeling/contract.py:73 + // ensure(Txn.sender == self.admin, S("ERR:UNAUTH")) + txn Sender + intc_1 // 0 + bytec 4 // "admin" + app_global_get_ex + assert // check self.admin exists + == + // smart_contracts/asset_labeling/contract.py:40 + // if not cond: + bnz admin_only_after_if_else@3 + // smart_contracts/asset_labeling/contract.py:73 + // ensure(Txn.sender == self.admin, S("ERR:UNAUTH")) + bytec 7 // "ERR:UNAUTH" + // smart_contracts/asset_labeling/contract.py:41 + // log(msg) + log + // smart_contracts/asset_labeling/contract.py:42 + // op.err() + err + +admin_only_after_if_else@3: + retsub // smart_contracts.asset_labeling.contract.AssetLabeling.change_admin(new_admin: bytes) -> void: change_admin: - // smart_contracts/asset_labeling/contract.py:49-50 + // smart_contracts/asset_labeling/contract.py:75-76 // @abimethod() // def change_admin(self, new_admin: Account) -> None: proto 1 0 - // smart_contracts/asset_labeling/contract.py:51 + // smart_contracts/asset_labeling/contract.py:77 // self.admin_only() callsub admin_only - // smart_contracts/asset_labeling/contract.py:52 + // smart_contracts/asset_labeling/contract.py:78 // self.admin = new_admin - bytec_1 // "admin" + bytec 4 // "admin" frame_dig -1 app_global_put retsub @@ -374,53 +790,53 @@ change_admin: // smart_contracts.asset_labeling.contract.AssetLabeling.add_label(id: bytes, name: bytes) -> void: add_label: - // smart_contracts/asset_labeling/contract.py:54-55 + // smart_contracts/asset_labeling/contract.py:80-81 // @abimethod() // def add_label(self, id: String, name: String) -> None: proto 2 0 - // smart_contracts/asset_labeling/contract.py:56 + // smart_contracts/asset_labeling/contract.py:82 // self.admin_only() callsub admin_only - // smart_contracts/asset_labeling/contract.py:57 + // smart_contracts/asset_labeling/contract.py:83 // ensure(id not in self.labels, S("ERR:EXISTS")) frame_dig -2 box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bz add_label_after_if_else@3 - // smart_contracts/asset_labeling/contract.py:57 + // smart_contracts/asset_labeling/contract.py:83 // ensure(id not in self.labels, S("ERR:EXISTS")) - bytec 4 // "ERR:EXISTS" - // smart_contracts/asset_labeling/contract.py:28 + bytec 5 // "ERR:EXISTS" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err add_label_after_if_else@3: - // smart_contracts/asset_labeling/contract.py:58 + // smart_contracts/asset_labeling/contract.py:84 // ensure(id.bytes.length == 2, S("ERR:LENGTH")) frame_dig -2 len intc_2 // 2 == - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz add_label_after_if_else@7 - // smart_contracts/asset_labeling/contract.py:58 + // smart_contracts/asset_labeling/contract.py:84 // ensure(id.bytes.length == 2, S("ERR:LENGTH")) - bytec 6 // "ERR:LENGTH" - // smart_contracts/asset_labeling/contract.py:28 + pushbytes "ERR:LENGTH" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err add_label_after_if_else@7: - // smart_contracts/asset_labeling/contract.py:60 + // smart_contracts/asset_labeling/contract.py:86 // arc4.String(name), frame_dig -1 len @@ -428,7 +844,7 @@ add_label_after_if_else@7: extract 6 2 frame_dig -1 concat - // smart_contracts/asset_labeling/contract.py:59-63 + // smart_contracts/asset_labeling/contract.py:85-89 // self.labels[id] = LabelDescriptor( // arc4.String(name), // arc4.UInt64(0), @@ -448,75 +864,55 @@ add_label_after_if_else@7: // smart_contracts.asset_labeling.contract.AssetLabeling.remove_label(id: bytes) -> void: remove_label: - // smart_contracts/asset_labeling/contract.py:65-66 + // smart_contracts/asset_labeling/contract.py:91-92 // @abimethod() // def remove_label(self, id: String) -> None: proto 1 0 - // smart_contracts/asset_labeling/contract.py:67 + // smart_contracts/asset_labeling/contract.py:93 // self.admin_only() callsub admin_only - // smart_contracts/asset_labeling/contract.py:68 + // smart_contracts/asset_labeling/contract.py:94 // ensure(id in self.labels, S("ERR:NOEXIST")) frame_dig -1 box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz remove_label_after_if_else@3 - // smart_contracts/asset_labeling/contract.py:68 + // smart_contracts/asset_labeling/contract.py:94 // ensure(id in self.labels, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 + bytec_1 // "ERR:NOEXIST" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err remove_label_after_if_else@3: - // smart_contracts/asset_labeling/contract.py:69 - // ensure(id.bytes.length == 2, S("ERR:LENGTH")) - frame_dig -1 - len - intc_2 // 2 - == - // smart_contracts/asset_labeling/contract.py:27 - // if not cond: - bnz remove_label_after_if_else@7 - // smart_contracts/asset_labeling/contract.py:69 - // ensure(id.bytes.length == 2, S("ERR:LENGTH")) - bytec 6 // "ERR:LENGTH" - // smart_contracts/asset_labeling/contract.py:28 - // log(msg) - log - // smart_contracts/asset_labeling/contract.py:29 - // op.err() - err - -remove_label_after_if_else@7: - // smart_contracts/asset_labeling/contract.py:70 + // smart_contracts/asset_labeling/contract.py:95 // ensure(self.labels[id].num_assets == 0, S("ERR:NOEMPTY")) frame_dig -1 box_get assert // check self.labels entry exists extract 2 8 // on error: Index access is out of bounds - bytec 7 // 0x0000000000000000 + bytec 8 // 0x0000000000000000 b== - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: - bnz remove_label_after_if_else@11 - // smart_contracts/asset_labeling/contract.py:70 + bnz remove_label_after_if_else@7 + // smart_contracts/asset_labeling/contract.py:95 // ensure(self.labels[id].num_assets == 0, S("ERR:NOEMPTY")) - bytec 8 // "ERR:NOEMPTY" - // smart_contracts/asset_labeling/contract.py:28 + bytec 9 // "ERR:NOEMPTY" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err -remove_label_after_if_else@11: - // smart_contracts/asset_labeling/contract.py:71 +remove_label_after_if_else@7: + // smart_contracts/asset_labeling/contract.py:96 // del self.labels[id] frame_dig -1 box_del @@ -526,30 +922,30 @@ remove_label_after_if_else@11: // smart_contracts.asset_labeling.contract.AssetLabeling.get_label(id: bytes) -> bytes: get_label: - // smart_contracts/asset_labeling/contract.py:73-74 + // smart_contracts/asset_labeling/contract.py:98-99 // @abimethod(readonly=True) // def get_label(self, id: String) -> LabelDescriptor: proto 1 1 - // smart_contracts/asset_labeling/contract.py:75 + // smart_contracts/asset_labeling/contract.py:100 // ensure(id in self.labels, S("ERR:NOEXIST")) frame_dig -1 box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz get_label_after_if_else@3 - // smart_contracts/asset_labeling/contract.py:75 + // smart_contracts/asset_labeling/contract.py:100 // ensure(id in self.labels, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 + bytec_1 // "ERR:NOEXIST" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err get_label_after_if_else@3: - // smart_contracts/asset_labeling/contract.py:76 + // smart_contracts/asset_labeling/contract.py:101 // return self.labels[id] frame_dig -1 box_get @@ -557,27 +953,77 @@ get_label_after_if_else@3: retsub +// smart_contracts.asset_labeling.contract.AssetLabeling.log_labels(ids: bytes) -> void: +log_labels: + // smart_contracts/asset_labeling/contract.py:103-104 + // @abimethod(readonly=True) + // def log_labels(self, ids: arc4.DynamicArray[arc4.String]) -> None: + proto 1 0 + // smart_contracts/asset_labeling/contract.py:105 + // for _idx, label_id in uenumerate(ids): + frame_dig -1 + intc_1 // 0 + extract_uint16 + intc_1 // 0 + +log_labels_for_header@1: + // smart_contracts/asset_labeling/contract.py:105 + // for _idx, label_id in uenumerate(ids): + frame_dig 1 + frame_dig 0 + < + bz log_labels_after_for@4 + frame_dig -1 + extract 2 0 + frame_dig 1 + dup + cover 2 + intc_2 // 2 + * + dig 1 + swap + extract_uint16 + dup2 + extract_uint16 + intc_2 // 2 + + + extract3 + // smart_contracts/asset_labeling/contract.py:106 + // log(self.labels[label_id.native]) + extract 2 0 + box_get + assert // check self.labels entry exists + log + intc_0 // 1 + + + frame_bury 1 + b log_labels_for_header@1 + +log_labels_after_for@4: + retsub + + // smart_contracts.asset_labeling.contract.AssetLabeling.admin_or_operator_only(label: bytes) -> void: admin_or_operator_only: - // smart_contracts/asset_labeling/contract.py:80-81 + // smart_contracts/asset_labeling/contract.py:112-113 // @subroutine // def admin_or_operator_only(self, label: String) -> None: proto 1 0 - // smart_contracts/asset_labeling/contract.py:82 + // smart_contracts/asset_labeling/contract.py:114 // if Txn.sender == self.admin: txn Sender intc_1 // 0 - bytec_1 // "admin" + bytec 4 // "admin" app_global_get_ex assert // check self.admin exists == bz admin_or_operator_only_after_if_else@2 - // smart_contracts/asset_labeling/contract.py:83 + // smart_contracts/asset_labeling/contract.py:115 // return retsub admin_or_operator_only_after_if_else@2: - // smart_contracts/asset_labeling/contract.py:84 + // smart_contracts/asset_labeling/contract.py:116 // self.operator_only(label) frame_dig -1 callsub operator_only @@ -586,52 +1032,46 @@ admin_or_operator_only_after_if_else@2: // smart_contracts.asset_labeling.contract.AssetLabeling.operator_only(label: bytes) -> void: operator_only: - // smart_contracts/asset_labeling/contract.py:86-87 + // smart_contracts/asset_labeling/contract.py:118-119 // @subroutine // def operator_only(self, label: String) -> None: proto 1 0 - // smart_contracts/asset_labeling/contract.py:89 - // self.get_operator_label_index(Txn.sender, label) != UInt64(NOT_FOUND_KEY) + // smart_contracts/asset_labeling/contract.py:120 + // operator_index = self.get_operator_label_index(Txn.sender, label) txn Sender frame_dig -1 callsub get_operator_label_index - intc 4 // 4294967296 + dup + // smart_contracts/asset_labeling/contract.py:122 + // operator_index != UInt64(NOT_FOUND_KEY) + intc 5 // 4294967296 != - // smart_contracts/asset_labeling/contract.py:89-91 - // self.get_operator_label_index(Txn.sender, label) != UInt64(NOT_FOUND_KEY) - // and self.get_operator_label_index(Txn.sender, label) - // != UInt64(NOT_FOUND_VALUE), + // smart_contracts/asset_labeling/contract.py:122-123 + // operator_index != UInt64(NOT_FOUND_KEY) + // and operator_index != UInt64(NOT_FOUND_VALUE), bz operator_only_bool_false@3 - // smart_contracts/asset_labeling/contract.py:90 - // and self.get_operator_label_index(Txn.sender, label) - txn Sender - frame_dig -1 - callsub get_operator_label_index - // smart_contracts/asset_labeling/contract.py:91 - // != UInt64(NOT_FOUND_VALUE), - intc_3 // 4294967295 - // smart_contracts/asset_labeling/contract.py:90-91 - // and self.get_operator_label_index(Txn.sender, label) - // != UInt64(NOT_FOUND_VALUE), + // smart_contracts/asset_labeling/contract.py:123 + // and operator_index != UInt64(NOT_FOUND_VALUE), + frame_dig 0 + intc 4 // 4294967295 != - // smart_contracts/asset_labeling/contract.py:89-91 - // self.get_operator_label_index(Txn.sender, label) != UInt64(NOT_FOUND_KEY) - // and self.get_operator_label_index(Txn.sender, label) - // != UInt64(NOT_FOUND_VALUE), + // smart_contracts/asset_labeling/contract.py:122-123 + // operator_index != UInt64(NOT_FOUND_KEY) + // and operator_index != UInt64(NOT_FOUND_VALUE), bz operator_only_bool_false@3 intc_0 // 1 operator_only_bool_merge@4: - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz operator_only_after_if_else@7 - // smart_contracts/asset_labeling/contract.py:92 + // smart_contracts/asset_labeling/contract.py:124 // S("ERR:UNAUTH"), - bytec 5 // "ERR:UNAUTH" - // smart_contracts/asset_labeling/contract.py:28 + bytec 7 // "ERR:UNAUTH" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err @@ -645,27 +1085,27 @@ operator_only_bool_false@3: // smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_label_index(operator: bytes, label: bytes) -> uint64: get_operator_label_index: - // smart_contracts/asset_labeling/contract.py:95-96 + // smart_contracts/asset_labeling/contract.py:127-128 // @subroutine // def get_operator_label_index(self, operator: Account, label: String) -> UInt64: proto 2 1 intc_1 // 0 - bytec_2 // "" + bytec_3 // "" dup - // smart_contracts/asset_labeling/contract.py:97 + // smart_contracts/asset_labeling/contract.py:129 // if operator not in self.operators: frame_dig -2 box_len bury 1 bnz get_operator_label_index_after_if_else@2 - // smart_contracts/asset_labeling/contract.py:98 + // smart_contracts/asset_labeling/contract.py:130 // return UInt64(NOT_FOUND_KEY) - intc 4 // 4294967296 + intc 5 // 4294967296 frame_bury 0 retsub get_operator_label_index_after_if_else@2: - // smart_contracts/asset_labeling/contract.py:99 + // smart_contracts/asset_labeling/contract.py:131 // for idx, stored_label in uenumerate(self.operators[operator]): frame_dig -2 box_get @@ -681,7 +1121,7 @@ get_operator_label_index_after_if_else@2: frame_bury 2 get_operator_label_index_for_header@3: - // smart_contracts/asset_labeling/contract.py:99 + // smart_contracts/asset_labeling/contract.py:131 // for idx, stored_label in uenumerate(self.operators[operator]): frame_dig 2 frame_dig 1 @@ -700,13 +1140,13 @@ get_operator_label_index_for_header@3: intc_2 // 2 + extract3 - // smart_contracts/asset_labeling/contract.py:100 + // smart_contracts/asset_labeling/contract.py:132 // if stored_label == label: extract 2 0 frame_dig -1 == bz get_operator_label_index_after_if_else@6 - // smart_contracts/asset_labeling/contract.py:101 + // smart_contracts/asset_labeling/contract.py:133 // return idx frame_dig 2 frame_bury 0 @@ -720,82 +1160,82 @@ get_operator_label_index_after_if_else@6: b get_operator_label_index_for_header@3 get_operator_label_index_after_for@8: - // smart_contracts/asset_labeling/contract.py:102 + // smart_contracts/asset_labeling/contract.py:134 // return UInt64(NOT_FOUND_VALUE) - intc_3 // 4294967295 + intc 4 // 4294967295 frame_bury 0 retsub // smart_contracts.asset_labeling.contract.AssetLabeling.add_operator_to_label(operator: bytes, label: bytes) -> void: add_operator_to_label: - // smart_contracts/asset_labeling/contract.py:104-105 + // smart_contracts/asset_labeling/contract.py:136-137 // @abimethod() // def add_operator_to_label(self, operator: Account, label: String) -> None: proto 2 0 - // smart_contracts/asset_labeling/contract.py:106 + // smart_contracts/asset_labeling/contract.py:138 // self.admin_or_operator_only(label) frame_dig -1 callsub admin_or_operator_only - // smart_contracts/asset_labeling/contract.py:107 + // smart_contracts/asset_labeling/contract.py:139 // ensure(label in self.labels, S("ERR:NOEXIST")) frame_dig -1 box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz add_operator_to_label_after_if_else@10 - // smart_contracts/asset_labeling/contract.py:107 + // smart_contracts/asset_labeling/contract.py:139 // ensure(label in self.labels, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 + bytec_1 // "ERR:NOEXIST" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err add_operator_to_label_after_if_else@10: - // smart_contracts/asset_labeling/contract.py:108-109 + // smart_contracts/asset_labeling/contract.py:140-141 // # check if operator exists already // if operator in self.operators: frame_dig -2 box_len bury 1 bz add_operator_to_label_else_body@2 - // smart_contracts/asset_labeling/contract.py:112 + // smart_contracts/asset_labeling/contract.py:144 // self.get_operator_label_index(operator, label) frame_dig -2 frame_dig -1 callsub get_operator_label_index - // smart_contracts/asset_labeling/contract.py:113 + // smart_contracts/asset_labeling/contract.py:145 // == UInt64(NOT_FOUND_VALUE), - intc_3 // 4294967295 - // smart_contracts/asset_labeling/contract.py:112-113 + intc 4 // 4294967295 + // smart_contracts/asset_labeling/contract.py:144-145 // self.get_operator_label_index(operator, label) // == UInt64(NOT_FOUND_VALUE), == - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz add_operator_to_label_after_if_else@6 - // smart_contracts/asset_labeling/contract.py:114 + // smart_contracts/asset_labeling/contract.py:146 // S("ERR:EXISTS"), - bytec 4 // "ERR:EXISTS" - // smart_contracts/asset_labeling/contract.py:28 + bytec 5 // "ERR:EXISTS" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err add_operator_to_label_after_if_else@6: - // smart_contracts/asset_labeling/contract.py:117-118 + // smart_contracts/asset_labeling/contract.py:149-150 // # add label to operator // existing = self.operators[operator].copy() frame_dig -2 box_get assert // check self.operators entry exists - // smart_contracts/asset_labeling/contract.py:119 + // smart_contracts/asset_labeling/contract.py:151 // existing.append(arc4.String(label)) frame_dig -1 len @@ -805,7 +1245,7 @@ add_operator_to_label_after_if_else@6: concat intc_0 // 1 callsub dynamic_array_concat_byte_length_head - // smart_contracts/asset_labeling/contract.py:120 + // smart_contracts/asset_labeling/contract.py:152 // self.operators[operator] = existing.copy() frame_dig -2 box_del @@ -815,26 +1255,26 @@ add_operator_to_label_after_if_else@6: box_put add_operator_to_label_after_if_else@3: - // smart_contracts/asset_labeling/contract.py:125-126 + // smart_contracts/asset_labeling/contract.py:157-158 // # increment label operators // label_descriptor = self.labels[label].copy() frame_dig -1 box_get assert // check self.labels entry exists - // smart_contracts/asset_labeling/contract.py:128 + // smart_contracts/asset_labeling/contract.py:160 // label_descriptor.num_operators.native + UInt64(1) dup pushint 10 // 10 extract_uint64 intc_0 // 1 + - // smart_contracts/asset_labeling/contract.py:127-129 + // smart_contracts/asset_labeling/contract.py:159-161 // label_descriptor.num_operators = arc4.UInt64( // label_descriptor.num_operators.native + UInt64(1) // ) itob replace2 10 - // smart_contracts/asset_labeling/contract.py:130 + // smart_contracts/asset_labeling/contract.py:162 // self.labels[label] = label_descriptor.copy() frame_dig -1 box_del @@ -845,7 +1285,7 @@ add_operator_to_label_after_if_else@3: retsub add_operator_to_label_else_body@2: - // smart_contracts/asset_labeling/contract.py:122-123 + // smart_contracts/asset_labeling/contract.py:154-155 // # new operator, create new box // self.operators[operator] = arc4.DynamicArray(arc4.String(label)) frame_dig -1 @@ -854,7 +1294,7 @@ add_operator_to_label_else_body@2: extract 6 2 frame_dig -1 concat - bytec 9 // 0x0002 + bytec 6 // 0x0002 swap concat bytec 10 // 0x0001 @@ -871,57 +1311,57 @@ add_operator_to_label_else_body@2: // smart_contracts.asset_labeling.contract.AssetLabeling.remove_operator_from_label(operator: bytes, label: bytes) -> void: remove_operator_from_label: - // smart_contracts/asset_labeling/contract.py:132-133 + // smart_contracts/asset_labeling/contract.py:164-165 // @abimethod() // def remove_operator_from_label(self, operator: Account, label: String) -> None: proto 2 0 intc_1 // 0 dupn 4 - bytec_2 // "" + bytec_3 // "" dupn 2 - // smart_contracts/asset_labeling/contract.py:134 + // smart_contracts/asset_labeling/contract.py:166 // self.admin_or_operator_only(label) frame_dig -1 callsub admin_or_operator_only - // smart_contracts/asset_labeling/contract.py:136 + // smart_contracts/asset_labeling/contract.py:168 // ensure(label in self.labels, S("ERR:NOEXIST")) frame_dig -1 box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz remove_operator_from_label_after_if_else@28 - // smart_contracts/asset_labeling/contract.py:136 + // smart_contracts/asset_labeling/contract.py:168 // ensure(label in self.labels, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 + bytec_1 // "ERR:NOEXIST" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err remove_operator_from_label_after_if_else@28: - // smart_contracts/asset_labeling/contract.py:137 + // smart_contracts/asset_labeling/contract.py:169 // ensure(operator in self.operators, S("ERR:NOEXIST")) frame_dig -2 box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz remove_operator_from_label_after_if_else@32 - // smart_contracts/asset_labeling/contract.py:137 + // smart_contracts/asset_labeling/contract.py:169 // ensure(operator in self.operators, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 + bytec_1 // "ERR:NOEXIST" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err remove_operator_from_label_after_if_else@32: - // smart_contracts/asset_labeling/contract.py:139-140 + // smart_contracts/asset_labeling/contract.py:171-172 // # ensure label exists in operator // label_idx = self.get_operator_label_index(operator, label) frame_dig -2 @@ -929,27 +1369,27 @@ remove_operator_from_label_after_if_else@32: callsub get_operator_label_index dup frame_bury 7 - // smart_contracts/asset_labeling/contract.py:142 + // smart_contracts/asset_labeling/contract.py:174 // label_idx != UInt64(NOT_FOUND_VALUE) - intc_3 // 4294967295 + intc 4 // 4294967295 != - // smart_contracts/asset_labeling/contract.py:142-144 + // smart_contracts/asset_labeling/contract.py:174-176 // label_idx != UInt64(NOT_FOUND_VALUE) // and label_idx // != UInt64(NOT_FOUND_KEY), # key check redundant, checked above bz remove_operator_from_label_bool_false@3 - // smart_contracts/asset_labeling/contract.py:143-144 + // smart_contracts/asset_labeling/contract.py:175-176 // and label_idx // != UInt64(NOT_FOUND_KEY), # key check redundant, checked above frame_dig 7 - // smart_contracts/asset_labeling/contract.py:144 + // smart_contracts/asset_labeling/contract.py:176 // != UInt64(NOT_FOUND_KEY), # key check redundant, checked above - intc 4 // 4294967296 - // smart_contracts/asset_labeling/contract.py:143-144 + intc 5 // 4294967296 + // smart_contracts/asset_labeling/contract.py:175-176 // and label_idx // != UInt64(NOT_FOUND_KEY), # key check redundant, checked above != - // smart_contracts/asset_labeling/contract.py:142-144 + // smart_contracts/asset_labeling/contract.py:174-176 // label_idx != UInt64(NOT_FOUND_VALUE) // and label_idx // != UInt64(NOT_FOUND_KEY), # key check redundant, checked above @@ -957,21 +1397,21 @@ remove_operator_from_label_after_if_else@32: intc_0 // 1 remove_operator_from_label_bool_merge@4: - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz remove_operator_from_label_after_if_else@24 - // smart_contracts/asset_labeling/contract.py:145 + // smart_contracts/asset_labeling/contract.py:177 // S("ERR:NOEXIST"), - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 + bytec_1 // "ERR:NOEXIST" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err remove_operator_from_label_after_if_else@24: - // smart_contracts/asset_labeling/contract.py:148-149 + // smart_contracts/asset_labeling/contract.py:180-181 // # ensure only empty labels can be left operator-less // label_descriptor = self.labels[label].copy() frame_dig -1 @@ -981,7 +1421,7 @@ remove_operator_from_label_after_if_else@24: cover 2 frame_bury 0 assert // check self.labels entry exists - // smart_contracts/asset_labeling/contract.py:151 + // smart_contracts/asset_labeling/contract.py:183 // label_descriptor.num_operators > 1 or label_descriptor.num_assets == 0, extract 10 8 // on error: Index access is out of bounds pushbytes 0x0000000000000001 @@ -989,7 +1429,7 @@ remove_operator_from_label_after_if_else@24: bnz remove_operator_from_label_bool_true@6 frame_dig 0 extract 2 8 // on error: Index access is out of bounds - bytec 7 // 0x0000000000000000 + bytec 8 // 0x0000000000000000 b== bz remove_operator_from_label_bool_false@7 @@ -997,21 +1437,21 @@ remove_operator_from_label_bool_true@6: intc_0 // 1 remove_operator_from_label_bool_merge@8: - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz remove_operator_from_label_after_if_else@20 - // smart_contracts/asset_labeling/contract.py:152 + // smart_contracts/asset_labeling/contract.py:184 // S("ERR:NOEMPTY"), - bytec 8 // "ERR:NOEMPTY" - // smart_contracts/asset_labeling/contract.py:28 + bytec 9 // "ERR:NOEMPTY" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err remove_operator_from_label_after_if_else@20: - // smart_contracts/asset_labeling/contract.py:156 + // smart_contracts/asset_labeling/contract.py:188 // label_descriptor.num_operators.native - UInt64(1) frame_dig 0 dup @@ -1019,14 +1459,14 @@ remove_operator_from_label_after_if_else@20: extract_uint64 intc_0 // 1 - - // smart_contracts/asset_labeling/contract.py:154-157 + // smart_contracts/asset_labeling/contract.py:186-189 // # decr operator count // label_descriptor.num_operators = arc4.UInt64( // label_descriptor.num_operators.native - UInt64(1) // ) itob replace2 10 - // smart_contracts/asset_labeling/contract.py:158 + // smart_contracts/asset_labeling/contract.py:190 // self.labels[label] = label_descriptor.copy() frame_dig -1 box_del @@ -1034,7 +1474,7 @@ remove_operator_from_label_after_if_else@20: frame_dig -1 swap box_put - // smart_contracts/asset_labeling/contract.py:160 + // smart_contracts/asset_labeling/contract.py:192 // if self.operators[operator].length == 1: frame_dig -2 box_get @@ -1044,7 +1484,7 @@ remove_operator_from_label_after_if_else@20: intc_0 // 1 == bz remove_operator_from_label_else_body@10 - // smart_contracts/asset_labeling/contract.py:161 + // smart_contracts/asset_labeling/contract.py:193 // del self.operators[operator] frame_dig -2 box_del @@ -1052,11 +1492,11 @@ remove_operator_from_label_after_if_else@20: retsub remove_operator_from_label_else_body@10: - // smart_contracts/asset_labeling/contract.py:163 + // smart_contracts/asset_labeling/contract.py:195 // next_list = arc4.DynamicArray[arc4.String]() - bytec 11 // 0x0000 + bytec_2 // 0x0000 frame_bury 2 - // smart_contracts/asset_labeling/contract.py:164-167 + // smart_contracts/asset_labeling/contract.py:196-199 // # walk, push everything except index // # this implementation walks twice (once in get_operator_label_index) // # could be more efficient @@ -1075,7 +1515,7 @@ remove_operator_from_label_else_body@10: frame_bury 6 remove_operator_from_label_for_header@11: - // smart_contracts/asset_labeling/contract.py:164-167 + // smart_contracts/asset_labeling/contract.py:196-199 // # walk, push everything except index // # this implementation walks twice (once in get_operator_label_index) // # could be more efficient @@ -1100,14 +1540,14 @@ remove_operator_from_label_for_header@11: + extract3 frame_bury 4 - // smart_contracts/asset_labeling/contract.py:168 + // smart_contracts/asset_labeling/contract.py:200 // if label_idx != idx: frame_dig 7 != frame_dig 2 frame_bury 3 bz remove_operator_from_label_after_if_else@14 - // smart_contracts/asset_labeling/contract.py:169 + // smart_contracts/asset_labeling/contract.py:201 // next_list.append(stored_label) frame_dig 2 frame_dig 4 @@ -1125,7 +1565,7 @@ remove_operator_from_label_after_if_else@14: b remove_operator_from_label_for_header@11 remove_operator_from_label_after_for@16: - // smart_contracts/asset_labeling/contract.py:171 + // smart_contracts/asset_labeling/contract.py:203 // self.operators[operator] = next_list.copy() frame_dig -2 box_del @@ -1146,71 +1586,67 @@ remove_operator_from_label_bool_false@3: // smart_contracts.asset_labeling.contract.AssetLabeling.get_operator_labels(operator: bytes) -> bytes: get_operator_labels: - // smart_contracts/asset_labeling/contract.py:173-174 + // smart_contracts/asset_labeling/contract.py:205-206 // @abimethod(readonly=True) // def get_operator_labels(self, operator: Account) -> LabelList: proto 1 1 - // smart_contracts/asset_labeling/contract.py:175 - // ensure(operator in self.operators, S("ERR:NOEXIST")) + // smart_contracts/asset_labeling/contract.py:207 + // if operator in self.operators: frame_dig -1 box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 - // if not cond: - bnz get_operator_labels_after_if_else@3 - // smart_contracts/asset_labeling/contract.py:175 - // ensure(operator in self.operators, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 - // log(msg) - log - // smart_contracts/asset_labeling/contract.py:29 - // op.err() - err - -get_operator_labels_after_if_else@3: - // smart_contracts/asset_labeling/contract.py:176 + bz get_operator_labels_after_if_else@2 + // smart_contracts/asset_labeling/contract.py:208 // return self.operators[operator] frame_dig -1 box_get assert // check self.operators entry exists retsub +get_operator_labels_after_if_else@2: + // smart_contracts/asset_labeling/contract.py:47 + // return arc4.DynamicArray[arc4.String]() + bytec_2 // 0x0000 + // smart_contracts/asset_labeling/contract.py:209-210 + // # return empty list + // return empty_list() + retsub + // smart_contracts.asset_labeling.contract.AssetLabeling.add_label_to_asset(label: bytes, asset: uint64) -> void: add_label_to_asset: - // smart_contracts/asset_labeling/contract.py:187-188 + // smart_contracts/asset_labeling/contract.py:221-222 // @abimethod() // def add_label_to_asset(self, label: String, asset: Asset) -> None: proto 2 0 intc_1 // 0 dup - bytec_2 // "" + bytec_3 // "" dup - // smart_contracts/asset_labeling/contract.py:189 + // smart_contracts/asset_labeling/contract.py:223 // ensure(label in self.labels, S("ERR:NOEXIST")) frame_dig -2 box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz add_label_to_asset_after_if_else@19 - // smart_contracts/asset_labeling/contract.py:189 + // smart_contracts/asset_labeling/contract.py:223 // ensure(label in self.labels, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 + bytec_1 // "ERR:NOEXIST" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err add_label_to_asset_after_if_else@19: - // smart_contracts/asset_labeling/contract.py:191 + // smart_contracts/asset_labeling/contract.py:225 // self.operator_only(label) frame_dig -2 callsub operator_only - // smart_contracts/asset_labeling/contract.py:193 + // smart_contracts/asset_labeling/contract.py:227 // if asset in self.assets: frame_dig -1 itob @@ -1219,43 +1655,43 @@ add_label_to_asset_after_if_else@19: box_len bury 1 bz add_label_to_asset_else_body@2 - // smart_contracts/asset_labeling/contract.py:180 + // smart_contracts/asset_labeling/contract.py:214 // if asset not in self.assets: frame_dig 1 box_len bury 1 bnz add_label_to_asset_after_if_else@6 - // smart_contracts/asset_labeling/contract.py:181 + // smart_contracts/asset_labeling/contract.py:215 // return UInt64(NOT_FOUND_KEY) - intc 4 // 4294967296 + intc 5 // 4294967296 add_label_to_asset_after_inlined_smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_label_index@12: - // smart_contracts/asset_labeling/contract.py:196 + // smart_contracts/asset_labeling/contract.py:230 // self.get_asset_label_index(asset, label) == UInt64(NOT_FOUND_VALUE), - intc_3 // 4294967295 + intc 4 // 4294967295 == - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz add_label_to_asset_after_if_else@15 - // smart_contracts/asset_labeling/contract.py:197 + // smart_contracts/asset_labeling/contract.py:231 // S("ERR:EXISTS"), - bytec 4 // "ERR:EXISTS" - // smart_contracts/asset_labeling/contract.py:28 + bytec 5 // "ERR:EXISTS" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err add_label_to_asset_after_if_else@15: - // smart_contracts/asset_labeling/contract.py:200-201 + // smart_contracts/asset_labeling/contract.py:234-235 // # add label to operator // existing = self.assets[asset].copy() frame_dig 1 dup box_get assert // check self.assets entry exists - // smart_contracts/asset_labeling/contract.py:202 + // smart_contracts/asset_labeling/contract.py:236 // existing.append(arc4.String(label)) frame_dig -2 len @@ -1265,7 +1701,7 @@ add_label_to_asset_after_if_else@15: concat intc_0 // 1 callsub dynamic_array_concat_byte_length_head - // smart_contracts/asset_labeling/contract.py:203 + // smart_contracts/asset_labeling/contract.py:237 // self.assets[asset] = existing.copy() dig 1 box_del @@ -1273,26 +1709,26 @@ add_label_to_asset_after_if_else@15: box_put add_label_to_asset_after_if_else@3: - // smart_contracts/asset_labeling/contract.py:208-209 + // smart_contracts/asset_labeling/contract.py:242-243 // # incr asset count // label_descriptor = self.labels[label].copy() frame_dig -2 box_get assert // check self.labels entry exists - // smart_contracts/asset_labeling/contract.py:211 + // smart_contracts/asset_labeling/contract.py:245 // label_descriptor.num_assets.native + UInt64(1) dup intc_2 // 2 extract_uint64 intc_0 // 1 + - // smart_contracts/asset_labeling/contract.py:210-212 + // smart_contracts/asset_labeling/contract.py:244-246 // label_descriptor.num_assets = arc4.UInt64( // label_descriptor.num_assets.native + UInt64(1) // ) itob replace2 2 - // smart_contracts/asset_labeling/contract.py:213 + // smart_contracts/asset_labeling/contract.py:247 // self.labels[label] = label_descriptor.copy() frame_dig -2 box_del @@ -1303,7 +1739,7 @@ add_label_to_asset_after_if_else@3: retsub add_label_to_asset_after_if_else@6: - // smart_contracts/asset_labeling/contract.py:182 + // smart_contracts/asset_labeling/contract.py:216 // for idx, stored_label in uenumerate(self.assets[asset]): frame_dig 1 box_get @@ -1319,7 +1755,7 @@ add_label_to_asset_after_if_else@6: frame_bury 3 add_label_to_asset_for_header@7: - // smart_contracts/asset_labeling/contract.py:182 + // smart_contracts/asset_labeling/contract.py:216 // for idx, stored_label in uenumerate(self.assets[asset]): frame_dig 3 frame_dig 2 @@ -1338,14 +1774,14 @@ add_label_to_asset_for_header@7: intc_2 // 2 + extract3 - // smart_contracts/asset_labeling/contract.py:183 + // smart_contracts/asset_labeling/contract.py:217 // if stored_label == label: extract 2 0 frame_dig -2 == bz add_label_to_asset_after_if_else@10 frame_dig 3 - // smart_contracts/asset_labeling/contract.py:196 + // smart_contracts/asset_labeling/contract.py:230 // self.get_asset_label_index(asset, label) == UInt64(NOT_FOUND_VALUE), b add_label_to_asset_after_inlined_smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_label_index@12 @@ -1357,15 +1793,15 @@ add_label_to_asset_after_if_else@10: b add_label_to_asset_for_header@7 add_label_to_asset_after_for@11: - // smart_contracts/asset_labeling/contract.py:185 + // smart_contracts/asset_labeling/contract.py:219 // return UInt64(NOT_FOUND_VALUE) - intc_3 // 4294967295 - // smart_contracts/asset_labeling/contract.py:196 + intc 4 // 4294967295 + // smart_contracts/asset_labeling/contract.py:230 // self.get_asset_label_index(asset, label) == UInt64(NOT_FOUND_VALUE), b add_label_to_asset_after_inlined_smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_label_index@12 add_label_to_asset_else_body@2: - // smart_contracts/asset_labeling/contract.py:205-206 + // smart_contracts/asset_labeling/contract.py:239-240 // # new operator, create new box // self.assets[asset] = arc4.DynamicArray(arc4.String(label)) frame_dig -2 @@ -1374,7 +1810,7 @@ add_label_to_asset_else_body@2: extract 6 2 frame_dig -2 concat - bytec 9 // 0x0002 + bytec 6 // 0x0002 swap concat bytec 10 // 0x0001 @@ -1391,42 +1827,42 @@ add_label_to_asset_else_body@2: // smart_contracts.asset_labeling.contract.AssetLabeling.remove_label_from_asset(label: bytes, asset: uint64) -> void: remove_label_from_asset: - // smart_contracts/asset_labeling/contract.py:215-216 + // smart_contracts/asset_labeling/contract.py:249-250 // @abimethod() // def remove_label_from_asset(self, label: String, asset: Asset) -> None: proto 2 0 intc_1 // 0 dupn 3 - bytec_2 // "" + bytec_3 // "" dupn 2 - // smart_contracts/asset_labeling/contract.py:217 + // smart_contracts/asset_labeling/contract.py:251 // ensure(label in self.labels, S("ERR:NOEXIST")) frame_dig -2 box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: bnz remove_label_from_asset_after_if_else@20 - // smart_contracts/asset_labeling/contract.py:217 + // smart_contracts/asset_labeling/contract.py:251 // ensure(label in self.labels, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 + bytec_1 // "ERR:NOEXIST" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err remove_label_from_asset_after_if_else@20: - // smart_contracts/asset_labeling/contract.py:219 + // smart_contracts/asset_labeling/contract.py:253 // self.operator_only(label) frame_dig -2 callsub operator_only - // smart_contracts/asset_labeling/contract.py:221 + // smart_contracts/asset_labeling/contract.py:255 // found = False intc_1 // 0 frame_bury 5 - // smart_contracts/asset_labeling/contract.py:222 + // smart_contracts/asset_labeling/contract.py:256 // if self.assets[asset].length == 1: frame_dig -1 itob @@ -1439,7 +1875,7 @@ remove_label_from_asset_after_if_else@20: intc_0 // 1 == bz remove_label_from_asset_else_body@5 - // smart_contracts/asset_labeling/contract.py:223 + // smart_contracts/asset_labeling/contract.py:257 // if self.assets[asset][0] == label: frame_dig 3 box_get @@ -1462,52 +1898,52 @@ remove_label_from_asset_after_if_else@20: frame_dig -2 == bz remove_label_from_asset_else_body@3 - // smart_contracts/asset_labeling/contract.py:224 + // smart_contracts/asset_labeling/contract.py:258 // del self.assets[asset] frame_dig 3 box_del pop - // smart_contracts/asset_labeling/contract.py:225 + // smart_contracts/asset_labeling/contract.py:259 // found = True intc_0 // 1 frame_bury 5 remove_label_from_asset_after_if_else@13: - // smart_contracts/asset_labeling/contract.py:27 + // smart_contracts/asset_labeling/contract.py:40 // if not cond: frame_dig 5 bnz remove_label_from_asset_after_if_else@16 - // smart_contracts/asset_labeling/contract.py:240 + // smart_contracts/asset_labeling/contract.py:274 // ensure(found, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 + bytec_1 // "ERR:NOEXIST" + // smart_contracts/asset_labeling/contract.py:41 // log(msg) log - // smart_contracts/asset_labeling/contract.py:29 + // smart_contracts/asset_labeling/contract.py:42 // op.err() err remove_label_from_asset_after_if_else@16: - // smart_contracts/asset_labeling/contract.py:242-243 + // smart_contracts/asset_labeling/contract.py:276-277 // # decr asset count // label_descriptor = self.labels[label].copy() frame_dig -2 box_get assert // check self.labels entry exists - // smart_contracts/asset_labeling/contract.py:245 + // smart_contracts/asset_labeling/contract.py:279 // label_descriptor.num_assets.native - UInt64(1) dup intc_2 // 2 extract_uint64 intc_0 // 1 - - // smart_contracts/asset_labeling/contract.py:244-246 + // smart_contracts/asset_labeling/contract.py:278-280 // label_descriptor.num_assets = arc4.UInt64( // label_descriptor.num_assets.native - UInt64(1) // ) itob replace2 2 - // smart_contracts/asset_labeling/contract.py:247 + // smart_contracts/asset_labeling/contract.py:281 // self.labels[label] = label_descriptor.copy() frame_dig -2 box_del @@ -1518,18 +1954,18 @@ remove_label_from_asset_after_if_else@16: retsub remove_label_from_asset_else_body@3: - // smart_contracts/asset_labeling/contract.py:227 + // smart_contracts/asset_labeling/contract.py:261 // found = False intc_1 // 0 frame_bury 5 b remove_label_from_asset_after_if_else@13 remove_label_from_asset_else_body@5: - // smart_contracts/asset_labeling/contract.py:229 + // smart_contracts/asset_labeling/contract.py:263 // next_list = arc4.DynamicArray[arc4.String]() - bytec 11 // 0x0000 + bytec_2 // 0x0000 frame_bury 1 - // smart_contracts/asset_labeling/contract.py:230-232 + // smart_contracts/asset_labeling/contract.py:264-266 // # walk, push everything to new box except label // # save $found to throw if not found // for idx, stored_label in uenumerate(self.assets[asset]): @@ -1547,7 +1983,7 @@ remove_label_from_asset_else_body@5: frame_bury 6 remove_label_from_asset_for_header@6: - // smart_contracts/asset_labeling/contract.py:230-232 + // smart_contracts/asset_labeling/contract.py:264-266 // # walk, push everything to new box except label // # save $found to throw if not found // for idx, stored_label in uenumerate(self.assets[asset]): @@ -1570,13 +2006,13 @@ remove_label_from_asset_for_header@6: extract3 dup frame_bury 2 - // smart_contracts/asset_labeling/contract.py:233 + // smart_contracts/asset_labeling/contract.py:267 // if stored_label != label: extract 2 0 frame_dig -2 != bz remove_label_from_asset_else_body@9 - // smart_contracts/asset_labeling/contract.py:234 + // smart_contracts/asset_labeling/contract.py:268 // next_list.append(stored_label) frame_dig 1 frame_dig 2 @@ -1592,14 +2028,14 @@ remove_label_from_asset_after_if_else@10: b remove_label_from_asset_for_header@6 remove_label_from_asset_else_body@9: - // smart_contracts/asset_labeling/contract.py:236 + // smart_contracts/asset_labeling/contract.py:270 // found = True intc_0 // 1 frame_bury 5 b remove_label_from_asset_after_if_else@10 remove_label_from_asset_after_for@12: - // smart_contracts/asset_labeling/contract.py:238 + // smart_contracts/asset_labeling/contract.py:272 // self.assets[asset] = next_list.copy() frame_dig 3 dup @@ -1612,35 +2048,1067 @@ remove_label_from_asset_after_for@12: // smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_labels(asset: uint64) -> bytes: get_asset_labels: - // smart_contracts/asset_labeling/contract.py:249-250 + // smart_contracts/asset_labeling/contract.py:283-284 // @abimethod(readonly=True) // def get_asset_labels(self, asset: Asset) -> LabelList: proto 1 1 - // smart_contracts/asset_labeling/contract.py:251 - // ensure(asset in self.assets, S("ERR:NOEXIST")) + // smart_contracts/asset_labeling/contract.py:285 + // if asset in self.assets: frame_dig -1 itob dup box_len bury 1 - // smart_contracts/asset_labeling/contract.py:27 - // if not cond: - bnz get_asset_labels_after_if_else@3 - // smart_contracts/asset_labeling/contract.py:251 - // ensure(asset in self.assets, S("ERR:NOEXIST")) - bytec_0 // "ERR:NOEXIST" - // smart_contracts/asset_labeling/contract.py:28 - // log(msg) + bz get_asset_labels_after_if_else@2 + // smart_contracts/asset_labeling/contract.py:286 + // return self.assets[asset] + frame_dig 0 + box_get + assert // check self.assets entry exists + swap + retsub + +get_asset_labels_after_if_else@2: + // smart_contracts/asset_labeling/contract.py:47 + // return arc4.DynamicArray[arc4.String]() + bytec_2 // 0x0000 + // smart_contracts/asset_labeling/contract.py:287-288 + // # return empty + // return empty_list() + swap + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_labels(assets: bytes) -> bytes: +get_assets_labels: + // smart_contracts/asset_labeling/contract.py:290-293 + // @abimethod(readonly=True) + // def get_assets_labels( + // self, assets: arc4.DynamicArray[arc4.UInt64] + // ) -> arc4.DynamicArray[LabelList]: + proto 1 1 + intc_1 // 0 + // smart_contracts/asset_labeling/contract.py:294 + // out = arc4.DynamicArray[LabelList]() + bytec_2 // 0x0000 + // smart_contracts/asset_labeling/contract.py:295 + // for _i, asset_id in uenumerate(assets): + frame_dig -1 + intc_1 // 0 + extract_uint16 + intc_1 // 0 + +get_assets_labels_for_header@1: + // smart_contracts/asset_labeling/contract.py:295 + // for _i, asset_id in uenumerate(assets): + frame_dig 3 + frame_dig 2 + < + bz get_assets_labels_after_for@7 + frame_dig -1 + extract 2 0 + frame_dig 3 + intc_3 // 8 + * + // smart_contracts/asset_labeling/contract.py:296 + // asset = Asset(asset_id.native) + extract_uint64 + // smart_contracts/asset_labeling/contract.py:297 + // if asset in self.assets: + itob + dup + frame_bury 0 + box_len + bury 1 + bz get_assets_labels_else_body@4 + // smart_contracts/asset_labeling/contract.py:298 + // out.append(self.assets[asset].copy()) + frame_dig 0 + box_get + assert // check self.assets entry exists + bytec 6 // 0x0002 + swap + concat + frame_dig 1 + dup + intc_1 // 0 + extract_uint16 + swap + extract 2 0 + intc_0 // 1 + uncover 3 + callsub dynamic_array_concat_dynamic_element + frame_bury 1 + +get_assets_labels_after_if_else@5: + frame_dig 3 + intc_0 // 1 + + + frame_bury 3 + b get_assets_labels_for_header@1 + +get_assets_labels_else_body@4: + // smart_contracts/asset_labeling/contract.py:300 + // out.append(empty_list()) + frame_dig 1 + dup + intc_1 // 0 + extract_uint16 + swap + extract 2 0 + intc_0 // 1 + pushbytes 0x00020000 + callsub dynamic_array_concat_dynamic_element + frame_bury 1 + b get_assets_labels_after_if_else@5 + +get_assets_labels_after_for@7: + // smart_contracts/asset_labeling/contract.py:301 + // return out + frame_dig 1 + frame_bury 0 + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_micro(asset_id: uint64) -> bytes: +_get_asset_micro: + // smart_contracts/asset_labeling/contract.py:309-310 + // @subroutine + // def _get_asset_micro(self, asset_id: UInt64) -> AssetMicro: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:313 + // unit_name=b2str(asset.unit_name), + frame_dig -1 + asset_params_get AssetUnitName + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:314 + // decimals=arc4.UInt8(asset.decimals), + frame_dig -1 + asset_params_get AssetDecimals + assert // asset exists + itob + dup + bitlen + intc_3 // 8 + <= + assert // overflow + extract 7 1 + // smart_contracts/asset_labeling/contract.py:312-315 + // return AssetMicro( + // unit_name=b2str(asset.unit_name), + // decimals=arc4.UInt8(asset.decimals), + // ) + pushbytes 0x0003 + swap + concat + swap + concat + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_micro(asset: uint64) -> bytes: +get_asset_micro: + // smart_contracts/asset_labeling/contract.py:317-318 + // @abimethod(readonly=True) + // def get_asset_micro(self, asset: UInt64) -> AssetMicro: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:319 + // return self._get_asset_micro(asset) + frame_dig -1 + callsub _get_asset_micro + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_micro(assets: bytes) -> void: +get_assets_micro: + // smart_contracts/asset_labeling/contract.py:321-322 + // @abimethod(readonly=True) + // def get_assets_micro(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + proto 1 0 + // smart_contracts/asset_labeling/contract.py:323 + // for _i, asset_id in uenumerate(assets): + frame_dig -1 + intc_1 // 0 + extract_uint16 + intc_1 // 0 + +get_assets_micro_for_header@1: + // smart_contracts/asset_labeling/contract.py:323 + // for _i, asset_id in uenumerate(assets): + frame_dig 1 + frame_dig 0 + < + bz get_assets_micro_after_for@4 + frame_dig -1 + extract 2 0 + frame_dig 1 + dup + cover 2 + intc_3 // 8 + * + // smart_contracts/asset_labeling/contract.py:324 + // log(self._get_asset_micro(asset_id.native)) + extract_uint64 + callsub _get_asset_micro log - // smart_contracts/asset_labeling/contract.py:29 - // op.err() - err + intc_0 // 1 + + + frame_bury 1 + b get_assets_micro_for_header@1 -get_asset_labels_after_if_else@3: - // smart_contracts/asset_labeling/contract.py:252 - // return self.assets[asset] +get_assets_micro_after_for@4: + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_micro_labels(asset_id: uint64) -> bytes: +_get_asset_micro_labels: + // smart_contracts/asset_labeling/contract.py:328-329 + // @subroutine + // def _get_asset_micro_labels(self, asset_id: UInt64) -> AssetMicroLabels: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:332 + // unit_name=b2str(asset.unit_name), + frame_dig -1 + asset_params_get AssetUnitName + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:333 + // decimals=arc4.UInt8(asset.decimals), + frame_dig -1 + asset_params_get AssetDecimals + assert // asset exists + itob + dup + bitlen + intc_3 // 8 + <= + assert // overflow + extract 7 1 + // smart_contracts/asset_labeling/contract.py:334 + // labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + frame_dig -1 + itob + dup + box_len + bury 1 + bz _get_asset_micro_labels_ternary_false@2 + frame_dig 2 + box_get + assert // check self.assets entry exists + +_get_asset_micro_labels_ternary_merge@3: + // smart_contracts/asset_labeling/contract.py:331-335 + // return AssetMicroLabels( + // unit_name=b2str(asset.unit_name), + // decimals=arc4.UInt8(asset.decimals), + // labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + // ) + frame_dig 0 + dup + len + pushint 5 // 5 + + + pushbytes 0x0005 + frame_dig 1 + concat + swap + itob + extract 6 2 + concat + swap + concat + swap + concat + frame_bury 0 + retsub + +_get_asset_micro_labels_ternary_false@2: + // smart_contracts/asset_labeling/contract.py:47 + // return arc4.DynamicArray[arc4.String]() + bytec_2 // 0x0000 + b _get_asset_micro_labels_ternary_merge@3 + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_micro_labels(asset: uint64) -> bytes: +get_asset_micro_labels: + // smart_contracts/asset_labeling/contract.py:337-338 + // @abimethod(readonly=True) + // def get_asset_micro_labels(self, asset: UInt64) -> AssetMicroLabels: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:339 + // return self._get_asset_micro_labels(asset) + frame_dig -1 + callsub _get_asset_micro_labels + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_micro_labels(assets: bytes) -> void: +get_assets_micro_labels: + // smart_contracts/asset_labeling/contract.py:341-342 + // @abimethod(readonly=True) + // def get_assets_micro_labels(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + proto 1 0 + // smart_contracts/asset_labeling/contract.py:343 + // for _i, asset_id in uenumerate(assets): + frame_dig -1 + intc_1 // 0 + extract_uint16 + intc_1 // 0 + +get_assets_micro_labels_for_header@1: + // smart_contracts/asset_labeling/contract.py:343 + // for _i, asset_id in uenumerate(assets): + frame_dig 1 frame_dig 0 + < + bz get_assets_micro_labels_after_for@4 + frame_dig -1 + extract 2 0 + frame_dig 1 + dup + cover 2 + intc_3 // 8 + * + // smart_contracts/asset_labeling/contract.py:344 + // log(self._get_asset_micro_labels(asset_id.native)) + extract_uint64 + callsub _get_asset_micro_labels + log + intc_0 // 1 + + + frame_bury 1 + b get_assets_micro_labels_for_header@1 + +get_assets_micro_labels_after_for@4: + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_text(asset_id: uint64) -> bytes: +_get_asset_text: + // smart_contracts/asset_labeling/contract.py:348-349 + // @subroutine + // def _get_asset_text(self, asset_id: UInt64) -> AssetText: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:352 + // name=b2str(asset.name), + frame_dig -1 + asset_params_get AssetName + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:353 + // unit_name=b2str(asset.unit_name), + frame_dig -1 + asset_params_get AssetUnitName + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:354 + // url=b2str(asset.url), + frame_dig -1 + asset_params_get AssetURL + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:355 + // labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + frame_dig -1 + itob + dup + box_len + bury 1 + bz _get_asset_text_ternary_false@2 + frame_dig 3 box_get assert // check self.assets entry exists + +_get_asset_text_ternary_merge@3: + // smart_contracts/asset_labeling/contract.py:351-356 + // return AssetText( + // name=b2str(asset.name), + // unit_name=b2str(asset.unit_name), + // url=b2str(asset.url), + // labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + // ) + frame_dig 0 + dup + len + intc_3 // 8 + + + dup + itob + extract 6 2 + pushbytes 0x0008 + swap + concat + frame_dig 1 + dup + cover 3 + len + uncover 2 + + + dup + itob + extract 6 2 + uncover 2 swap + concat + frame_dig 2 + dup + cover 3 + len + uncover 2 + + + itob + extract 6 2 + concat + uncover 3 + concat + uncover 2 + concat + swap + concat + swap + concat + frame_bury 0 + retsub + +_get_asset_text_ternary_false@2: + // smart_contracts/asset_labeling/contract.py:47 + // return arc4.DynamicArray[arc4.String]() + bytec_2 // 0x0000 + b _get_asset_text_ternary_merge@3 + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_text(asset: uint64) -> bytes: +get_asset_text: + // smart_contracts/asset_labeling/contract.py:358-359 + // @abimethod(readonly=True) + // def get_asset_text(self, asset: UInt64) -> AssetText: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:360 + // return self._get_asset_text(asset) + frame_dig -1 + callsub _get_asset_text + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_text(assets: bytes) -> void: +get_assets_text: + // smart_contracts/asset_labeling/contract.py:362-363 + // @abimethod(readonly=True) + // def get_assets_text(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + proto 1 0 + // smart_contracts/asset_labeling/contract.py:364 + // for _i, asset_id in uenumerate(assets): + frame_dig -1 + intc_1 // 0 + extract_uint16 + intc_1 // 0 + +get_assets_text_for_header@1: + // smart_contracts/asset_labeling/contract.py:364 + // for _i, asset_id in uenumerate(assets): + frame_dig 1 + frame_dig 0 + < + bz get_assets_text_after_for@4 + frame_dig -1 + extract 2 0 + frame_dig 1 + dup + cover 2 + intc_3 // 8 + * + // smart_contracts/asset_labeling/contract.py:365 + // log(self._get_asset_text(asset_id.native)) + extract_uint64 + callsub _get_asset_text + log + intc_0 // 1 + + + frame_bury 1 + b get_assets_text_for_header@1 + +get_assets_text_after_for@4: + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_text_labels(asset_id: uint64) -> bytes: +_get_asset_text_labels: + // smart_contracts/asset_labeling/contract.py:369-370 + // @subroutine + // def _get_asset_text_labels(self, asset_id: UInt64) -> AssetTextLabels: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:373 + // name=b2str(asset.name), + frame_dig -1 + asset_params_get AssetName + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:374 + // unit_name=b2str(asset.unit_name), + frame_dig -1 + asset_params_get AssetUnitName + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:375 + // url=b2str(asset.url), + frame_dig -1 + asset_params_get AssetURL + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:372-376 + // return AssetTextLabels( + // name=b2str(asset.name), + // unit_name=b2str(asset.unit_name), + // url=b2str(asset.url), + // ) + dig 2 + len + pushint 6 // 6 + + + dup + itob + extract 6 2 + pushbytes 0x0006 + swap + concat + dig 3 + len + uncover 2 + + + itob + extract 6 2 + concat + uncover 3 + concat + uncover 2 + concat + swap + concat + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_text_labels(asset: uint64) -> bytes: +get_asset_text_labels: + // smart_contracts/asset_labeling/contract.py:378-379 + // @abimethod(readonly=True) + // def get_asset_text_labels(self, asset: UInt64) -> AssetTextLabels: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:380 + // return self._get_asset_text_labels(asset) + frame_dig -1 + callsub _get_asset_text_labels + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_text_labels(assets: bytes) -> void: +get_assets_text_labels: + // smart_contracts/asset_labeling/contract.py:382-383 + // @abimethod(readonly=True) + // def get_assets_text_labels(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + proto 1 0 + // smart_contracts/asset_labeling/contract.py:384 + // for _i, asset_id in uenumerate(assets): + frame_dig -1 + intc_1 // 0 + extract_uint16 + intc_1 // 0 + +get_assets_text_labels_for_header@1: + // smart_contracts/asset_labeling/contract.py:384 + // for _i, asset_id in uenumerate(assets): + frame_dig 1 + frame_dig 0 + < + bz get_assets_text_labels_after_for@4 + frame_dig -1 + extract 2 0 + frame_dig 1 + dup + cover 2 + intc_3 // 8 + * + // smart_contracts/asset_labeling/contract.py:385 + // log(self._get_asset_text_labels(asset_id.native)) + extract_uint64 + callsub _get_asset_text_labels + log + intc_0 // 1 + + + frame_bury 1 + b get_assets_text_labels_for_header@1 + +get_assets_text_labels_after_for@4: + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_small(asset_id: uint64) -> bytes: +_get_asset_small: + // smart_contracts/asset_labeling/contract.py:389-390 + // @subroutine + // def _get_asset_small(self, asset_id: UInt64) -> AssetSmall: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:393 + // name=b2str(asset.name), + frame_dig -1 + asset_params_get AssetName + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:394 + // unit_name=b2str(asset.unit_name), + frame_dig -1 + asset_params_get AssetUnitName + assert // asset exists + callsub b2str + // smart_contracts/asset_labeling/contract.py:395 + // decimals=arc4.UInt8(asset.decimals), + frame_dig -1 + asset_params_get AssetDecimals + assert // asset exists + itob + dup + bitlen + intc_3 // 8 + <= + assert // overflow + extract 7 1 + // smart_contracts/asset_labeling/contract.py:396 + // total=arc4.UInt64(asset.total), + frame_dig -1 + asset_params_get AssetTotal + assert // asset exists + itob + // smart_contracts/asset_labeling/contract.py:397 + // has_freeze=arc4.Bool(asset.freeze != Global.zero_address), + frame_dig -1 + asset_params_get AssetFreeze + assert // asset exists + global ZeroAddress + != + pushbytes 0x00 + intc_1 // 0 + uncover 2 + setbit + // smart_contracts/asset_labeling/contract.py:398 + // has_clawback=arc4.Bool(asset.clawback != Global.zero_address), + frame_dig -1 + asset_params_get AssetClawback + assert // asset exists + global ZeroAddress + != + pushbytes 0x00 + intc_1 // 0 + uncover 2 + setbit + // smart_contracts/asset_labeling/contract.py:399 + // labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + frame_dig -1 + itob + dup + box_len + bury 1 + bz _get_asset_small_ternary_false@2 + frame_dig 6 + box_get + assert // check self.assets entry exists + +_get_asset_small_ternary_merge@3: + // smart_contracts/asset_labeling/contract.py:392-400 + // return AssetSmall( + // name=b2str(asset.name), + // unit_name=b2str(asset.unit_name), + // decimals=arc4.UInt8(asset.decimals), + // total=arc4.UInt64(asset.total), + // has_freeze=arc4.Bool(asset.freeze != Global.zero_address), + // has_clawback=arc4.Bool(asset.clawback != Global.zero_address), + // labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + // ) + frame_dig 0 + dup + len + pushint 16 // 16 + + + dup + itob + extract 6 2 + pushbytes 0x0010 + swap + concat + frame_dig 1 + dup + cover 3 + len + uncover 2 + + + swap + frame_dig 2 + concat + frame_dig 3 + concat + frame_dig 4 + concat + frame_dig 5 + intc_1 // 0 + getbit + pushint 105 // 105 + swap + setbit + swap + itob + extract 6 2 + concat + uncover 2 + concat + swap + concat + swap + concat + frame_bury 0 + retsub + +_get_asset_small_ternary_false@2: + // smart_contracts/asset_labeling/contract.py:47 + // return arc4.DynamicArray[arc4.String]() + bytec_2 // 0x0000 + b _get_asset_small_ternary_merge@3 + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_small(asset: uint64) -> bytes: +get_asset_small: + // smart_contracts/asset_labeling/contract.py:402-403 + // @abimethod(readonly=True) + // def get_asset_small(self, asset: UInt64) -> AssetSmall: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:404 + // return self._get_asset_small(asset) + frame_dig -1 + callsub _get_asset_small + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_small(assets: bytes) -> void: +get_assets_small: + // smart_contracts/asset_labeling/contract.py:406-407 + // @abimethod(readonly=True) + // def get_assets_small(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + proto 1 0 + // smart_contracts/asset_labeling/contract.py:408 + // for _i, asset_id in uenumerate(assets): + frame_dig -1 + intc_1 // 0 + extract_uint16 + intc_1 // 0 + +get_assets_small_for_header@1: + // smart_contracts/asset_labeling/contract.py:408 + // for _i, asset_id in uenumerate(assets): + frame_dig 1 + frame_dig 0 + < + bz get_assets_small_after_for@4 + frame_dig -1 + extract 2 0 + frame_dig 1 + dup + cover 2 + intc_3 // 8 + * + // smart_contracts/asset_labeling/contract.py:409 + // log(self._get_asset_small(asset_id.native)) + extract_uint64 + callsub _get_asset_small + log + intc_0 // 1 + + + frame_bury 1 + b get_assets_small_for_header@1 + +get_assets_small_after_for@4: + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling._get_asset_full(asset_id: uint64) -> bytes: +_get_asset_full: + // smart_contracts/asset_labeling/contract.py:413-414 + // @subroutine + // def _get_asset_full(self, asset_id: UInt64) -> AssetFull: + proto 1 1 + intc_1 // 0 + dupn 11 + // smart_contracts/asset_labeling/contract.py:416 + // reserve_acct = Account(asset.reserve.bytes) + frame_dig -1 + asset_params_get AssetReserve + swap + dup + uncover 2 + assert // asset exists + // smart_contracts/asset_labeling/contract.py:419 + // if reserve_acct.is_opted_in(asset) + frame_dig -1 + asset_holding_get AssetBalance + bury 1 + // smart_contracts/asset_labeling/contract.py:418-420 + // asset.balance(reserve_acct) + // if reserve_acct.is_opted_in(asset) + // else UInt64(0) + bz _get_asset_full_ternary_false@2 + // smart_contracts/asset_labeling/contract.py:418 + // asset.balance(reserve_acct) + frame_dig 12 + frame_dig -1 + asset_holding_get AssetBalance + assert // account opted into asset + +_get_asset_full_ternary_merge@3: + // smart_contracts/asset_labeling/contract.py:423 + // name=b2str(asset.name), + frame_dig -1 + asset_params_get AssetName + assert // asset exists + callsub b2str + frame_bury 1 + // smart_contracts/asset_labeling/contract.py:424 + // unit_name=b2str(asset.unit_name), + frame_dig -1 + asset_params_get AssetUnitName + assert // asset exists + callsub b2str + frame_bury 2 + // smart_contracts/asset_labeling/contract.py:425 + // url=b2str(asset.url), + frame_dig -1 + asset_params_get AssetURL + assert // asset exists + callsub b2str + frame_bury 3 + // smart_contracts/asset_labeling/contract.py:426 + // total=arc4.UInt64(asset.total), + frame_dig -1 + asset_params_get AssetTotal + assert // asset exists + itob + frame_bury 6 + // smart_contracts/asset_labeling/contract.py:427 + // decimals=arc4.UInt8(asset.decimals), + frame_dig -1 + asset_params_get AssetDecimals + assert // asset exists + itob + dup + bitlen + intc_3 // 8 + <= + assert // overflow + extract 7 1 + frame_bury 5 + // smart_contracts/asset_labeling/contract.py:428 + // manager=arc4.Address(asset.manager), + frame_dig -1 + asset_params_get AssetManager + swap + frame_bury 9 + assert // asset exists + // smart_contracts/asset_labeling/contract.py:429 + // freeze=arc4.Address(asset.freeze), + frame_dig -1 + asset_params_get AssetFreeze + swap + frame_bury 10 + assert // asset exists + // smart_contracts/asset_labeling/contract.py:430 + // clawback=arc4.Address(asset.clawback), + frame_dig -1 + asset_params_get AssetClawback + swap + frame_bury 11 + assert // asset exists + // smart_contracts/asset_labeling/contract.py:431 + // reserve=arc4.Address(asset.reserve), + frame_dig -1 + asset_params_get AssetReserve + swap + frame_bury 8 + assert // asset exists + // smart_contracts/asset_labeling/contract.py:433 + // metadata_hash=arc4.DynamicBytes(asset.metadata_hash), + frame_dig -1 + asset_params_get AssetMetadataHash + assert // asset exists + dup + len + itob + extract 6 2 + swap + concat + frame_bury 0 + // smart_contracts/asset_labeling/contract.py:432 + // reserve_balance=arc4.UInt64(reserve_balance), + itob + frame_bury 7 + // smart_contracts/asset_labeling/contract.py:434 + // labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + frame_dig -1 + itob + dup + frame_bury 4 + box_len + bury 1 + bz _get_asset_full_ternary_false@5 + frame_dig 4 + box_get + assert // check self.assets entry exists + +_get_asset_full_ternary_merge@6: + // smart_contracts/asset_labeling/contract.py:422-435 + // return AssetFull( + // name=b2str(asset.name), + // unit_name=b2str(asset.unit_name), + // url=b2str(asset.url), + // total=arc4.UInt64(asset.total), + // decimals=arc4.UInt8(asset.decimals), + // manager=arc4.Address(asset.manager), + // freeze=arc4.Address(asset.freeze), + // clawback=arc4.Address(asset.clawback), + // reserve=arc4.Address(asset.reserve), + // reserve_balance=arc4.UInt64(reserve_balance), + // metadata_hash=arc4.DynamicBytes(asset.metadata_hash), + // labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + // ) + frame_dig 1 + dup + len + pushint 155 // 155 + + + dup + itob + extract 6 2 + pushbytes 0x009b + swap + concat + frame_dig 2 + dup + cover 3 + len + uncover 2 + + + dup + itob + extract 6 2 + uncover 2 + swap + concat + frame_dig 3 + dup + cover 3 + len + uncover 2 + + + swap + frame_dig 6 + concat + frame_dig 5 + concat + frame_dig 9 + concat + frame_dig 10 + concat + frame_dig 11 + concat + frame_dig 8 + concat + dig 1 + itob + extract 6 2 + concat + frame_dig 0 + dup + cover 3 + len + uncover 2 + + + swap + frame_dig 7 + concat + swap + itob + extract 6 2 + concat + uncover 4 + concat + uncover 3 + concat + uncover 2 + concat + swap + concat + swap + concat + frame_bury 0 + retsub + +_get_asset_full_ternary_false@5: + // smart_contracts/asset_labeling/contract.py:47 + // return arc4.DynamicArray[arc4.String]() + bytec_2 // 0x0000 + b _get_asset_full_ternary_merge@6 + +_get_asset_full_ternary_false@2: + // smart_contracts/asset_labeling/contract.py:420 + // else UInt64(0) + intc_1 // 0 + b _get_asset_full_ternary_merge@3 + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_asset_full(asset: uint64) -> bytes: +get_asset_full: + // smart_contracts/asset_labeling/contract.py:437-438 + // @abimethod(readonly=True) + // def get_asset_full(self, asset: UInt64) -> AssetFull: + proto 1 1 + // smart_contracts/asset_labeling/contract.py:439 + // return self._get_asset_full(asset) + frame_dig -1 + callsub _get_asset_full + retsub + + +// smart_contracts.asset_labeling.contract.AssetLabeling.get_assets_full(assets: bytes) -> void: +get_assets_full: + // smart_contracts/asset_labeling/contract.py:441-442 + // @abimethod(readonly=True) + // def get_assets_full(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + proto 1 0 + // smart_contracts/asset_labeling/contract.py:443 + // for _i, asset_id in uenumerate(assets): + frame_dig -1 + intc_1 // 0 + extract_uint16 + intc_1 // 0 + +get_assets_full_for_header@1: + // smart_contracts/asset_labeling/contract.py:443 + // for _i, asset_id in uenumerate(assets): + frame_dig 1 + frame_dig 0 + < + bz get_assets_full_after_for@4 + frame_dig -1 + extract 2 0 + frame_dig 1 + dup + cover 2 + intc_3 // 8 + * + // smart_contracts/asset_labeling/contract.py:444 + // log(self._get_asset_full(asset_id.native)) + extract_uint64 + callsub _get_asset_full + log + intc_0 // 1 + + + frame_bury 1 + b get_assets_full_for_header@1 + +get_assets_full_after_for@4: retsub diff --git a/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.arc56.json b/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.arc56.json index 2af8c01..a0b15fc 100644 --- a/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.arc56.json +++ b/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabeling.arc56.json @@ -1,6 +1,142 @@ { "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": "manager", + "type": "address" + }, + { + "name": "freeze", + "type": "address" + }, + { + "name": "clawback", + "type": "address" + }, + { + "name": "reserve", + "type": "address" + }, + { + "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" + }, + { + "name": "labels", + "type": "string[]" + } + ], + "AssetTextLabels": [ + { + "name": "name", + "type": "string" + }, + { + "name": "unit_name", + "type": "string" + }, + { + "name": "url", + "type": "string" + } + ], "LabelDescriptor": [ { "name": "name", @@ -106,6 +242,27 @@ "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": [ @@ -247,6 +404,285 @@ "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": "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_text", + "args": [ + { + "type": "uint64", + "name": "asset" + } + ], + "returns": { + "type": "(string,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)", + "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,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": [ @@ -302,94 +738,180 @@ "create": [ "NoOp" ], - "call": [] + "call": [ + "DeleteApplication", + "UpdateApplication" + ] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ - 668, - 1051, - 1070, - 1495 + 1181, + 1616, + 1635, + 2060 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ - 201, - 223, - 247, - 271, - 293, - 317, - 341, - 363, - 381, - 405 + 290, + 305, + 325, + 340, + 360, + 375, + 395, + 410, + 430, + 445, + 465, + 480, + 500, + 519, + 541, + 565, + 589, + 611, + 635, + 659, + 674, + 696, + 714, + 738 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 428 + 3040 + ], + "errorMessage": "account opted into asset" + }, + { + "pc": [ + 2344, + 2352, + 2428, + 2436, + 2548, + 2556, + 2564, + 2705, + 2713, + 2721, + 2819, + 2827, + 2835, + 2849, + 2855, + 2870, + 3024, + 3045, + 3055, + 3065, + 3075, + 3083, + 3102, + 3110, + 3118, + 3126, + 3131 + ], + "errorMessage": "asset exists" + }, + { + "pc": [ + 791 ], "errorMessage": "can only call when creating" }, { "pc": [ - 204, - 226, - 250, - 274, - 296, - 320, - 344, - 366, - 384, - 408 + 293, + 308, + 328, + 343, + 363, + 378, + 398, + 413, + 433, + 448, + 468, + 483, + 503, + 522, + 544, + 568, + 592, + 614, + 638, + 662, + 677, + 699, + 717, + 741, + 774, + 782 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 543, - 713 + 1057, + 1278 ], "errorMessage": "check self.admin exists" }, { "pc": [ - 1302, - 1352, - 1476, - 1487, - 1568, - 1669 + 1866, + 1916, + 2041, + 2052, + 2132, + 2230, + 2277, + 2459, + 2581, + 2894, + 3160 ], "errorMessage": "check self.assets entry exists" }, { "pc": [ - 667, - 703, - 927, - 1050, - 1325, - 1531 + 1180, + 1216, + 1259, + 1491, + 1615, + 1889, + 2096 ], "errorMessage": "check self.labels entry exists" }, { "pc": [ - 794, - 901, - 1109, - 1135, - 1242 + 1356, + 1465, + 1674, + 1699, + 1803 ], "errorMessage": "check self.operators entry exists" + }, + { + "pc": [ + 2358, + 2442, + 2841, + 3089 + ], + "errorMessage": "overflow" } ], "pcOffsetMethod": "none" @@ -400,11 +922,11 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA0Mjk0OTY3Mjk1IDQyOTQ5NjcyOTYKICAgIGJ5dGVjYmxvY2sgIkVSUjpOT0VYSVNUIiAiYWRtaW4iICIiIDB4MTUxZjdjNzUgIkVSUjpFWElTVFMiICJFUlI6VU5BVVRIIiAiRVJSOkxFTkdUSCIgMHgwMDAwMDAwMDAwMDAwMDAwICJFUlI6Tk9FTVBUWSIgMHgwMDAyIDB4MDAwMSAweDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gc2VsZi5hZG1pbiA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjXzEgLy8gImFkbWluIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTUKICAgIHB1c2hieXRlc3MgMHg4ZjBkN2Q4ZSAweDdjMWIzMmY2IDB4MTdlNjkxYWUgMHgzM2QwZmZkYyAweGZhYzFjZjFiIDB4YjRjNTBiOWYgMHhhMmRkMjI0NyAweGEzN2RlYTExIDB4NjhmMThlZmEgMHhjMmVkNzQzZiAvLyBtZXRob2QgImNoYW5nZV9hZG1pbihhY2NvdW50KXZvaWQiLCBtZXRob2QgImFkZF9sYWJlbChzdHJpbmcsc3RyaW5nKXZvaWQiLCBtZXRob2QgInJlbW92ZV9sYWJlbChzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZ2V0X2xhYmVsKHN0cmluZykoc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJhZGRfb3BlcmF0b3JfdG9fbGFiZWwoYWNjb3VudCxzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWwoYWNjb3VudCxzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZ2V0X29wZXJhdG9yX2xhYmVscyhhY2NvdW50KXN0cmluZ1tdIiwgbWV0aG9kICJhZGRfbGFiZWxfdG9fYXNzZXQoc3RyaW5nLGFzc2V0KXZvaWQiLCBtZXRob2QgInJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0KHN0cmluZyxhc3NldCl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfbGFiZWxzKGFzc2V0KXN0cmluZ1tdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9jaGFuZ2VfYWRtaW5fcm91dGVANSBtYWluX2FkZF9sYWJlbF9yb3V0ZUA2IG1haW5fcmVtb3ZlX2xhYmVsX3JvdXRlQDcgbWFpbl9nZXRfbGFiZWxfcm91dGVAOCBtYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUA5IG1haW5fcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfcm91dGVAMTAgbWFpbl9nZXRfb3BlcmF0b3JfbGFiZWxzX3JvdXRlQDExIG1haW5fYWRkX2xhYmVsX3RvX2Fzc2V0X3JvdXRlQDEyIG1haW5fcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfcm91dGVAMTMgbWFpbl9nZXRfYXNzZXRfbGFiZWxzX3JvdXRlQDE0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2xhYmVsc19yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X2xhYmVscwogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsX3RvX2Fzc2V0CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTczCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOAogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVscwogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOAogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX29wZXJhdG9yX3RvX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9sYWJlbF9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjczCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOAogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfbGFiZWwKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlX2xhYmVsX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjUKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjUKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkX2xhYmVsX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NoYW5nZV9hZG1pbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2FkbWluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOAogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA1OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRtaW5fb25seSgpIC0+IHZvaWQ6CmFkbWluX29ubHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDcKICAgIC8vIGVuc3VyZShUeG4uc2VuZGVyID09IHNlbGYuYWRtaW4sIFMoIkVSUjpVTkFVVEgiKSkKICAgIHR4biBTZW5kZXIKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18xIC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkbWluX29ubHlfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDcKICAgIC8vIGVuc3VyZShUeG4uc2VuZGVyID09IHNlbGYuYWRtaW4sIFMoIkVSUjpVTkFVVEgiKSkKICAgIGJ5dGVjIDUgLy8gIkVSUjpVTkFVVEgiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRtaW5fb25seV9hZnRlcl9pZl9lbHNlQDM6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5jaGFuZ2VfYWRtaW4obmV3X2FkbWluOiBieXRlcykgLT4gdm9pZDoKY2hhbmdlX2FkbWluOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ5LTUwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBjaGFuZ2VfYWRtaW4oc2VsZiwgbmV3X2FkbWluOiBBY2NvdW50KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTEKICAgIC8vIHNlbGYuYWRtaW5fb25seSgpCiAgICBjYWxsc3ViIGFkbWluX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5hZG1pbiA9IG5ld19hZG1pbgogICAgYnl0ZWNfMSAvLyAiYWRtaW4iCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZGRfbGFiZWwoaWQ6IGJ5dGVzLCBuYW1lOiBieXRlcykgLT4gdm9pZDoKYWRkX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU0LTU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBhZGRfbGFiZWwoc2VsZiwgaWQ6IFN0cmluZywgbmFtZTogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTYKICAgIC8vIHNlbGYuYWRtaW5fb25seSgpCiAgICBjYWxsc3ViIGFkbWluX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NwogICAgLy8gZW5zdXJlKGlkIG5vdCBpbiBzZWxmLmxhYmVscywgUygiRVJSOkVYSVNUUyIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBieiBhZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTcKICAgIC8vIGVuc3VyZShpZCBub3QgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpFWElTVFMiKSkKICAgIGJ5dGVjIDQgLy8gIkVSUjpFWElTVFMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRkX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1OAogICAgLy8gZW5zdXJlKGlkLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkZF9sYWJlbF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1OAogICAgLy8gZW5zdXJlKGlkLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBieXRlYyA2IC8vICJFUlI6TEVOR1RIIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9sYWJlbF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjAKICAgIC8vIGFyYzQuU3RyaW5nKG5hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU5LTYzCiAgICAvLyBzZWxmLmxhYmVsc1tpZF0gPSBMYWJlbERlc2NyaXB0b3IoCiAgICAvLyAgICAgYXJjNC5TdHJpbmcobmFtZSksCiAgICAvLyAgICAgYXJjNC5VSW50NjQoMCksCiAgICAvLyAgICAgYXJjNC5VSW50NjQoMCksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcucmVtb3ZlX2xhYmVsKGlkOiBieXRlcykgLT4gdm9pZDoKcmVtb3ZlX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjY1LTY2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiByZW1vdmVfbGFiZWwoc2VsZiwgaWQ6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBzZWxmLmFkbWluX29ubHkoKQogICAgY2FsbHN1YiBhZG1pbl9vbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjgKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2OAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMCAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2OQogICAgLy8gZW5zdXJlKGlkLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2OQogICAgLy8gZW5zdXJlKGlkLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBieXRlYyA2IC8vICJFUlI6TEVOR1RIIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzAKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX2Fzc2V0cyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDcgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MAogICAgLy8gZW5zdXJlKHNlbGYubGFiZWxzW2lkXS5udW1fYXNzZXRzID09IDAsIFMoIkVSUjpOT0VNUFRZIikpCiAgICBieXRlYyA4IC8vICJFUlI6Tk9FTVBUWSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOAogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MQogICAgLy8gZGVsIHNlbGYubGFiZWxzW2lkXQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9sYWJlbChpZDogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzMtNzQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfbGFiZWwoc2VsZiwgaWQ6IFN0cmluZykgLT4gTGFiZWxEZXNjcmlwdG9yOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzUKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGdldF9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3NQogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMCAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3NgogICAgLy8gcmV0dXJuIHNlbGYubGFiZWxzW2lkXQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsOiBieXRlcykgLT4gdm9pZDoKYWRtaW5fb3Jfb3BlcmF0b3Jfb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MC04MQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBhZG1pbl9vcl9vcGVyYXRvcl9vbmx5KHNlbGYsIGxhYmVsOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MgogICAgLy8gaWYgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluOgogICAgdHhuIFNlbmRlcgogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjXzEgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIGJ6IGFkbWluX29yX29wZXJhdG9yX29ubHlfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODMKICAgIC8vIHJldHVybgogICAgcmV0c3ViCgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4NAogICAgLy8gc2VsZi5vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIG9wZXJhdG9yX29ubHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLm9wZXJhdG9yX29ubHkobGFiZWw6IGJ5dGVzKSAtPiB2b2lkOgpvcGVyYXRvcl9vbmx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg2LTg3CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIG9wZXJhdG9yX29ubHkoc2VsZiwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChUeG4uc2VuZGVyLCBsYWJlbCkgIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NgogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4OS05MQogICAgLy8gc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoVHhuLnNlbmRlciwgbGFiZWwpICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKQogICAgLy8gYW5kIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KFR4bi5zZW5kZXIsIGxhYmVsKQogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBieiBvcGVyYXRvcl9vbmx5X2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjkwCiAgICAvLyBhbmQgc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoVHhuLnNlbmRlciwgbGFiZWwpCiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgaW50Y18zIC8vIDQyOTQ5NjcyOTUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MC05MQogICAgLy8gYW5kIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KFR4bi5zZW5kZXIsIGxhYmVsKQogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICAhPQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg5LTkxCiAgICAvLyBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChUeG4uc2VuZGVyLCBsYWJlbCkgIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICAvLyBhbmQgc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoVHhuLnNlbmRlciwgbGFiZWwpCiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGJ6IG9wZXJhdG9yX29ubHlfYm9vbF9mYWxzZUAzCiAgICBpbnRjXzAgLy8gMQoKb3BlcmF0b3Jfb25seV9ib29sX21lcmdlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IG9wZXJhdG9yX29ubHlfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTIKICAgIC8vIFMoIkVSUjpVTkFVVEgiKSwKICAgIGJ5dGVjIDUgLy8gIkVSUjpVTkFVVEgiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKb3BlcmF0b3Jfb25seV9hZnRlcl9pZl9lbHNlQDc6CiAgICByZXRzdWIKCm9wZXJhdG9yX29ubHlfYm9vbF9mYWxzZUAzOgogICAgaW50Y18xIC8vIDAKICAgIGIgb3BlcmF0b3Jfb25seV9ib29sX21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgob3BlcmF0b3I6IGJ5dGVzLCBsYWJlbDogYnl0ZXMpIC0+IHVpbnQ2NDoKZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk1LTk2CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChzZWxmLCBvcGVyYXRvcjogQWNjb3VudCwgbGFiZWw6IFN0cmluZykgLT4gVUludDY0OgogICAgcHJvdG8gMiAxCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMiAvLyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTcKICAgIC8vIGlmIG9wZXJhdG9yIG5vdCBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTkKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSk6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgZnJhbWVfYnVyeSAwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgMgoKZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2Zvcl9oZWFkZXJAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5OQogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdKToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2ZvckA4CiAgICBmcmFtZV9kaWcgMAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTAwCiAgICAvLyBpZiBzdG9yZWRfbGFiZWwgPT0gbGFiZWw6CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYnogZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gcmV0dXJuIGlkeAogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUA2OgogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2Zvcl9oZWFkZXJAMwoKZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2ZvckA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gcmV0dXJuIFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICBpbnRjXzMgLy8gNDI5NDk2NzI5NQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZGRfb3BlcmF0b3JfdG9fbGFiZWwob3BlcmF0b3I6IGJ5dGVzLCBsYWJlbDogYnl0ZXMpIC0+IHZvaWQ6CmFkZF9vcGVyYXRvcl90b19sYWJlbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDQtMTA1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBhZGRfb3BlcmF0b3JfdG9fbGFiZWwoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDYKICAgIC8vIHNlbGYuYWRtaW5fb3Jfb3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBhZG1pbl9vcl9vcGVyYXRvcl9vbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA3CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3CiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBhZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMCAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA4LTEwOQogICAgLy8gIyBjaGVjayBpZiBvcGVyYXRvciBleGlzdHMgYWxyZWFkeQogICAgLy8gaWYgb3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnM6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogYWRkX29wZXJhdG9yX3RvX2xhYmVsX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTEyCiAgICAvLyBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChvcGVyYXRvciwgbGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTMKICAgIC8vID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgaW50Y18zIC8vIDQyOTQ5NjcyOTUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTItMTEzCiAgICAvLyBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChvcGVyYXRvciwgbGFiZWwpCiAgICAvLyA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTQKICAgIC8vIFMoIkVSUjpFWElTVFMiKSwKICAgIGJ5dGVjIDQgLy8gIkVSUjpFWElTVFMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTctMTE4CiAgICAvLyAjIGFkZCBsYWJlbCB0byBvcGVyYXRvcgogICAgLy8gZXhpc3RpbmcgPSBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0uY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTkKICAgIC8vIGV4aXN0aW5nLmFwcGVuZChhcmM0LlN0cmluZyhsYWJlbCkpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBpbnRjXzAgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIwCiAgICAvLyBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0gPSBleGlzdGluZy5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKCmFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI1LTEyNgogICAgLy8gIyBpbmNyZW1lbnQgbGFiZWwgb3BlcmF0b3JzCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI4CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9vcGVyYXRvcnMubmF0aXZlICsgVUludDY0KDEpCiAgICBkdXAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyNy0xMjkKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgKyBVSW50NjQoMSkKICAgIC8vICkKICAgIGl0b2IKICAgIHJlcGxhY2UyIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMwCiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIyLTEyMwogICAgLy8gIyBuZXcgb3BlcmF0b3IsIGNyZWF0ZSBuZXcgYm94CiAgICAvLyBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0gPSBhcmM0LkR5bmFtaWNBcnJheShhcmM0LlN0cmluZyhsYWJlbCkpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBieXRlYyA5IC8vIDB4MDAwMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAxMCAvLyAweDAwMDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgYiBhZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcucmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWwob3BlcmF0b3I6IGJ5dGVzLCBsYWJlbDogYnl0ZXMpIC0+IHZvaWQ6CnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzMi0xMzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsKHNlbGYsIG9wZXJhdG9yOiBBY2NvdW50LCBsYWJlbDogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiA0CiAgICBieXRlY18yIC8vICIiCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYuYWRtaW5fb3Jfb3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBhZG1pbl9vcl9vcGVyYXRvcl9vbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM2CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3CiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM2CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18wIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOAogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gZW5zdXJlKG9wZXJhdG9yIGluIHNlbGYub3BlcmF0b3JzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gZW5zdXJlKG9wZXJhdG9yIGluIHNlbGYub3BlcmF0b3JzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMCAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzktMTQwCiAgICAvLyAjIGVuc3VyZSBsYWJlbCBleGlzdHMgaW4gb3BlcmF0b3IKICAgIC8vIGxhYmVsX2lkeCA9IHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDIKICAgIC8vIGxhYmVsX2lkeCAhPSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKQogICAgaW50Y18zIC8vIDQyOTQ5NjcyOTUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTQyLTE0NAogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICAvLyBhbmQgbGFiZWxfaWR4CiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSksICAjIGtleSBjaGVjayByZWR1bmRhbnQsIGNoZWNrZWQgYWJvdmUKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0My0xNDQKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgZnJhbWVfZGlnIDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDQKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgaW50YyA0IC8vIDQyOTQ5NjcyOTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDMtMTQ0CiAgICAvLyBhbmQgbGFiZWxfaWR4CiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSksICAjIGtleSBjaGVjayByZWR1bmRhbnQsIGNoZWNrZWQgYWJvdmUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTQyLTE0NAogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICAvLyBhbmQgbGFiZWxfaWR4CiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSksICAjIGtleSBjaGVjayByZWR1bmRhbnQsIGNoZWNrZWQgYWJvdmUKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMwogICAgaW50Y18wIC8vIDEKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gUygiRVJSOk5PRVhJU1QiKSwKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTQ4LTE0OQogICAgLy8gIyBlbnN1cmUgb25seSBlbXB0eSBsYWJlbHMgY2FuIGJlIGxlZnQgb3BlcmF0b3ItbGVzcwogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTEKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycyA+IDEgb3IgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID09IDAsCiAgICBleHRyYWN0IDEwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBiPgogICAgYm56IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgMAogICAgZXh0cmFjdCAyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlYyA3IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgYj09CiAgICBieiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX2ZhbHNlQDcKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfdHJ1ZUA2OgogICAgaW50Y18wIC8vIDEKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gUygiRVJSOk5PRU1QVFkiKSwKICAgIGJ5dGVjIDggLy8gIkVSUjpOT0VNUFRZIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTU2CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9vcGVyYXRvcnMubmF0aXZlIC0gVUludDY0KDEpCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTQtMTU3CiAgICAvLyAjIGRlY3Igb3BlcmF0b3IgY291bnQKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgLSBVSW50NjQoMSkKICAgIC8vICkKICAgIGl0b2IKICAgIHJlcGxhY2UyIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTU4CiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2MAogICAgLy8gaWYgc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdLmxlbmd0aCA9PSAxOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfZWxzZV9ib2R5QDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTYxCiAgICAvLyBkZWwgc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgcmV0c3ViCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9lbHNlX2JvZHlAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTYzCiAgICAvLyBuZXh0X2xpc3QgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWMgMTEgLy8gMHgwMDAwCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjQtMTY3CiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyBleGNlcHQgaW5kZXgKICAgIC8vICMgdGhpcyBpbXBsZW1lbnRhdGlvbiB3YWxrcyB0d2ljZSAob25jZSBpbiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgpCiAgICAvLyAjIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50CiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDYKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Zvcl9oZWFkZXJAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY0LTE2NwogICAgLy8gIyB3YWxrLCBwdXNoIGV2ZXJ5dGhpbmcgZXhjZXB0IGluZGV4CiAgICAvLyAjIHRoaXMgaW1wbGVtZW50YXRpb24gd2Fsa3MgdHdpY2UgKG9uY2UgaW4gZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KQogICAgLy8gIyBjb3VsZCBiZSBtb3JlIGVmZmljaWVudAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdKToKICAgIGZyYW1lX2RpZyA2CiAgICBmcmFtZV9kaWcgNQogICAgPAogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfZm9yQDE2CiAgICBmcmFtZV9kaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIGZyYW1lX2J1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gaWYgbGFiZWxfaWR4ICE9IGlkeDoKICAgIGZyYW1lX2RpZyA3CiAgICAhPQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMwogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gbmV4dF9saXN0LmFwcGVuZChzdG9yZWRfbGFiZWwpCiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDQKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIGZyYW1lX2J1cnkgMwoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxNDoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9idXJ5IDIKICAgIGZyYW1lX2RpZyA2CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSA2CiAgICBiIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Zvcl9oZWFkZXJAMTEKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2ZvckAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzEKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IG5leHRfbGlzdC5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAyCiAgICBib3hfcHV0CiAgICByZXRzdWIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VANzoKICAgIGludGNfMSAvLyAwCiAgICBiIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VAOAoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzOgogICAgaW50Y18xIC8vIDAKICAgIGIgcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X29wZXJhdG9yX2xhYmVscyhvcGVyYXRvcjogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfb3BlcmF0b3JfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3My0xNzQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfb3BlcmF0b3JfbGFiZWxzKHNlbGYsIG9wZXJhdG9yOiBBY2NvdW50KSAtPiBMYWJlbExpc3Q6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzUKICAgIC8vIGVuc3VyZShvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9ycywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGdldF9vcGVyYXRvcl9sYWJlbHNfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc1CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18wIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOAogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpnZXRfb3BlcmF0b3JfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzYKICAgIC8vIHJldHVybiBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRkX2xhYmVsX3RvX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYWRkX2xhYmVsX3RvX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4Ny0xODgKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbF90b19hc3NldChzZWxmLCBsYWJlbDogU3RyaW5nLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzIgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODkKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gc2VsZi5vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIG9wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTMKICAgIC8vIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfbGFiZWxfdG9fYXNzZXRfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODAKICAgIC8vIGlmIGFzc2V0IG5vdCBpbiBzZWxmLmFzc2V0czoKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTgxCiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5NgogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGludGNfMyAvLyA0Mjk0OTY3Mjk1CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3CiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5NwogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNCAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOAogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDAtMjAxCiAgICAvLyAjIGFkZCBsYWJlbCB0byBvcGVyYXRvcgogICAgLy8gZXhpc3RpbmcgPSBzZWxmLmFzc2V0c1thc3NldF0uY29weSgpCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjAyCiAgICAvLyBleGlzdGluZy5hcHBlbmQoYXJjNC5TdHJpbmcobGFiZWwpKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gZXhpc3RpbmcuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwOC0yMDkKICAgIC8vICMgaW5jciBhc3NldCBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxMQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjEwLTIxMgogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxMwogICAgLy8gc2VsZi5sYWJlbHNbbGFiZWxdID0gbGFiZWxfZGVzY3JpcHRvci5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODIKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgphZGRfbGFiZWxfdG9fYXNzZXRfZm9yX2hlYWRlckA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2ZvckAxMQogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gaWYgc3RvcmVkX2xhYmVsID09IGxhYmVsOgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IGFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDEwCiAgICBmcmFtZV9kaWcgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5NgogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyAzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGFkZF9sYWJlbF90b19hc3NldF9mb3JfaGVhZGVyQDcKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9mb3JAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg1CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGNfMyAvLyA0Mjk0OTY3Mjk1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTk2CiAgICAvLyBzZWxmLmdldF9hc3NldF9sYWJlbF9pbmRleChhc3NldCwgbGFiZWwpID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgYiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfbGFiZWxfaW5kZXhAMTIKCmFkZF9sYWJlbF90b19hc3NldF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUtMjA2CiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYuYXNzZXRzW2Fzc2V0XSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjIDkgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE1LTIxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQoc2VsZiwgbGFiZWw6IFN0cmluZywgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18yIC8vICIiCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTcKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTcKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE5CiAgICAvLyBzZWxmLm9wZXJhdG9yX29ubHkobGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgb3BlcmF0b3Jfb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMQogICAgLy8gZm91bmQgPSBGYWxzZQogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMgogICAgLy8gaWYgc2VsZi5hc3NldHNbYXNzZXRdLmxlbmd0aCA9PSAxOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIzCiAgICAvLyBpZiBzZWxmLmFzc2V0c1thc3NldF1bMF0gPT0gbGFiZWw6CiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBhc3NlcnQgLy8gSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjQKICAgIC8vIGRlbCBzZWxmLmFzc2V0c1thc3NldF0KICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjUKICAgIC8vIGZvdW5kID0gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIGZyYW1lX2J1cnkgNQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBmcmFtZV9kaWcgNQogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDAKICAgIC8vIGVuc3VyZShmb3VuZCwgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQyLTI0MwogICAgLy8gIyBkZWNyIGFzc2V0IGNvdW50CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ1CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDQtMjQ2CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ3CiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjcKICAgIC8vIGZvdW5kID0gRmFsc2UKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMwoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjI5CiAgICAvLyBuZXh0X2xpc3QgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWMgMTEgLy8gMHgwMDAwCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzAtMjMyCiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyB0byBuZXcgYm94IGV4Y2VwdCBsYWJlbAogICAgLy8gIyBzYXZlICRmb3VuZCB0byB0aHJvdyBpZiBub3QgZm91bmQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA2CgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9mb3JfaGVhZGVyQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMwLTIzMgogICAgLy8gIyB3YWxrLCBwdXNoIGV2ZXJ5dGhpbmcgdG8gbmV3IGJveCBleGNlcHQgbGFiZWwKICAgIC8vICMgc2F2ZSAkZm91bmQgdG8gdGhyb3cgaWYgbm90IGZvdW5kCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLmFzc2V0c1thc3NldF0pOgogICAgZnJhbWVfZGlnIDYKICAgIGZyYW1lX2RpZyA0CiAgICA8CiAgICBieiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9mb3JAMTIKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMzCiAgICAvLyBpZiBzdG9yZWRfbGFiZWwgIT0gbGFiZWw6CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICAhPQogICAgYnogcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzQKICAgIC8vIG5leHRfbGlzdC5hcHBlbmQoc3RvcmVkX2xhYmVsKQogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICBmcmFtZV9idXJ5IDEKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTA6CiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNgogICAgYiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9mb3JfaGVhZGVyQDYKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzNgogICAgLy8gZm91bmQgPSBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgZnJhbWVfYnVyeSA1CiAgICBiIHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTAKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2ZvckAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzgKICAgIC8vIHNlbGYuYXNzZXRzW2Fzc2V0XSA9IG5leHRfbGlzdC5jb3B5KCkKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9wdXQKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9sYWJlbHMoYXNzZXQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9hc3NldF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ5LTI1MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9sYWJlbHMoc2VsZiwgYXNzZXQ6IEFzc2V0KSAtPiBMYWJlbExpc3Q6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShhc3NldCBpbiBzZWxmLmFzc2V0cywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogZ2V0X2Fzc2V0X2xhYmVsc19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShhc3NldCBpbiBzZWxmLmFzc2V0cywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmdldF9hc3NldF9sYWJlbHNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1MgogICAgLy8gcmV0dXJuIHNlbGYuYXNzZXRzW2Fzc2V0XQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIHN3YXAKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA4IDQyOTQ5NjcyOTUgNDI5NDk2NzI5NgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJFUlI6Tk9FWElTVCIgMHgwMDAwICIiICJhZG1pbiIgIkVSUjpFWElTVFMiIDB4MDAwMiAiRVJSOlVOQVVUSCIgMHgwMDAwMDAwMDAwMDAwMDAwICJFUlI6Tk9FTVBUWSIgMHgwMDAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTcKICAgIC8vIHNlbGYuYWRtaW4gPSBUeG4uc2VuZGVyCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDI5CiAgICBwdXNoYnl0ZXNzIDB4OGYwZDdkOGUgMHg3YzFiMzJmNiAweDE3ZTY5MWFlIDB4MzNkMGZmZGMgMHg3MjU2MTZlNyAweGZhYzFjZjFiIDB4YjRjNTBiOWYgMHhhMmRkMjI0NyAweGEzN2RlYTExIDB4NjhmMThlZmEgMHhjMmVkNzQzZiAweGE2N2YwM2MyIDB4YWFlZTBjNjEgMHhiNmMzOWY2OCAweDYzNWJlMzYyIDB4NzA5M2IxMGQgMHhlMWJiOTVmYyAweDU1NDBiODBhIDB4OGE0MTJmOTMgMHg2ZjE3Y2RkNSAweDdhNGNlNGI5IDB4MzY2YzUxYWYgMHhkNWQzYmFkMyAweDAzYmE5OGRiIC8vIG1ldGhvZCAiY2hhbmdlX2FkbWluKGFjY291bnQpdm9pZCIsIG1ldGhvZCAiYWRkX2xhYmVsKHN0cmluZyxzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmVtb3ZlX2xhYmVsKHN0cmluZyl2b2lkIiwgbWV0aG9kICJnZXRfbGFiZWwoc3RyaW5nKShzdHJpbmcsdWludDY0LHVpbnQ2NCkiLCBtZXRob2QgImxvZ19sYWJlbHMoc3RyaW5nW10pdm9pZCIsIG1ldGhvZCAiYWRkX29wZXJhdG9yX3RvX2xhYmVsKGFjY291bnQsc3RyaW5nKXZvaWQiLCBtZXRob2QgInJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsKGFjY291bnQsc3RyaW5nKXZvaWQiLCBtZXRob2QgImdldF9vcGVyYXRvcl9sYWJlbHMoYWNjb3VudClzdHJpbmdbXSIsIG1ldGhvZCAiYWRkX2xhYmVsX3RvX2Fzc2V0KHN0cmluZyxhc3NldCl2b2lkIiwgbWV0aG9kICJyZW1vdmVfbGFiZWxfZnJvbV9hc3NldChzdHJpbmcsYXNzZXQpdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2xhYmVscyhhc3NldClzdHJpbmdbXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19sYWJlbHModWludDY0W10pc3RyaW5nW11bXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0X21pY3JvKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4KSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNybyh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfbWljcm9fbGFiZWxzKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4LHN0cmluZ1tdKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNyb19sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3RleHQodWludDY0KShzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmdbXSkiLCBtZXRob2QgImdldF9hc3NldHNfdGV4dCh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfdGV4dF9sYWJlbHModWludDY0KShzdHJpbmcsc3RyaW5nLHN0cmluZykiLCBtZXRob2QgImdldF9hc3NldHNfdGV4dF9sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3NtYWxsKHVpbnQ2NCkoc3RyaW5nLHN0cmluZyx1aW50OCx1aW50NjQsYm9vbCxib29sLHN0cmluZ1tdKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19zbWFsbCh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfZnVsbCh1aW50NjQpKHN0cmluZyxzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50OCxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLGJ5dGVbXSx1aW50NjQsc3RyaW5nW10pIiwgbWV0aG9kICJnZXRfYXNzZXRzX2Z1bGwodWludDY0W10pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY2hhbmdlX2FkbWluX3JvdXRlQDUgbWFpbl9hZGRfbGFiZWxfcm91dGVANiBtYWluX3JlbW92ZV9sYWJlbF9yb3V0ZUA3IG1haW5fZ2V0X2xhYmVsX3JvdXRlQDggbWFpbl9sb2dfbGFiZWxzX3JvdXRlQDkgbWFpbl9hZGRfb3BlcmF0b3JfdG9fbGFiZWxfcm91dGVAMTAgbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMSBtYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTIgbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTMgbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxNCBtYWluX2dldF9hc3NldF9sYWJlbHNfcm91dGVAMTUgbWFpbl9nZXRfYXNzZXRzX2xhYmVsc19yb3V0ZUAxNiBtYWluX2dldF9hc3NldF9taWNyb19yb3V0ZUAxNyBtYWluX2dldF9hc3NldHNfbWljcm9fcm91dGVAMTggbWFpbl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3JvdXRlQDE5IG1haW5fZ2V0X2Fzc2V0c19taWNyb19sYWJlbHNfcm91dGVAMjAgbWFpbl9nZXRfYXNzZXRfdGV4dF9yb3V0ZUAyMSBtYWluX2dldF9hc3NldHNfdGV4dF9yb3V0ZUAyMiBtYWluX2dldF9hc3NldF90ZXh0X2xhYmVsc19yb3V0ZUAyMyBtYWluX2dldF9hc3NldHNfdGV4dF9sYWJlbHNfcm91dGVAMjQgbWFpbl9nZXRfYXNzZXRfc21hbGxfcm91dGVAMjUgbWFpbl9nZXRfYXNzZXRzX3NtYWxsX3JvdXRlQDI2IG1haW5fZ2V0X2Fzc2V0X2Z1bGxfcm91dGVAMjcgbWFpbl9nZXRfYXNzZXRzX2Z1bGxfcm91dGVAMjgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAzMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRzX2Z1bGxfcm91dGVAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRzX2Z1bGwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2Z1bGxfcm91dGVAMjc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDM3CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfZnVsbAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRzX3NtYWxsX3JvdXRlQDI2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwNgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDYKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19zbWFsbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfc21hbGxfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwMgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfc21hbGwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19yb3V0ZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGV4dF9sYWJlbHMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X3RleHRfbGFiZWxzX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM3OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X3RleHRfbGFiZWxzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfdGV4dF9yb3V0ZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzYyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGV4dAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfdGV4dF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF90ZXh0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfbWljcm9fbGFiZWxzX3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19taWNyb19sYWJlbHMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVsc19yb3V0ZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMzcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM3CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF9taWNyb19sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c19taWNyb19yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzIxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfbWljcm8KICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX3JvdXRlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMTcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X21pY3JvCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfbGFiZWxzX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTAKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2xhYmVsc19yb3V0ZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsX3RvX2Fzc2V0CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZF9vcGVyYXRvcl90b19sYWJlbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sb2dfbGFiZWxzX3JvdXRlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTAzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBsb2dfbGFiZWxzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9sYWJlbF9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfbGFiZWwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlX2xhYmVsX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkX2xhYmVsX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NoYW5nZV9hZG1pbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2FkbWluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AyOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc3dpdGNoIG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMzIgbWFpbl9hZnRlcl9pZl9lbHNlQDMzIG1haW5fYWZ0ZXJfaWZfZWxzZUAzMyBtYWluX2FmdGVyX2lmX2Vsc2VAMzMgbWFpbl91cGRhdGVAMzAgbWFpbl9kZWxldGVAMzEKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDMzCgptYWluX2RlbGV0ZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2NwogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiRGVsZXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3VwZGF0ZUAzMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiVXBkYXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDMyOgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA1OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18zIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMSAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LmIyc3RyKGI6IGJ5dGVzKSAtPiBieXRlczoKYjJzdHI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTAtNTEKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYjJzdHIoYjogQnl0ZXMpIC0+IGFyYzQuU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTIKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZyhTdHJpbmcuZnJvbV9ieXRlcyhiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2NQogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjY5CiAgICAvLyBzZWxmLmFkbWluX29ubHkoKQogICAgY2FsbHN1YiBhZG1pbl9vbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZG1pbl9vbmx5KCkgLT4gdm9pZDoKYWRtaW5fb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDQgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRtaW5fb25seV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgYnl0ZWMgNyAvLyAiRVJSOlVOQVVUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZG1pbl9vbmx5X2FmdGVyX2lmX2Vsc2VAMzoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmNoYW5nZV9hZG1pbihuZXdfYWRtaW46IGJ5dGVzKSAtPiB2b2lkOgpjaGFuZ2VfYWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzUtNzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGNoYW5nZV9hZG1pbihzZWxmLCBuZXdfYWRtaW46IEFjY291bnQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3NwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBzZWxmLmFkbWluID0gbmV3X2FkbWluCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkZF9sYWJlbChpZDogYnl0ZXMsIG5hbWU6IGJ5dGVzKSAtPiB2b2lkOgphZGRfbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODAtODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbChzZWxmLCBpZDogU3RyaW5nLCBuYW1lOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MgogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBlbnN1cmUoaWQgbm90IGluIHNlbGYubGFiZWxzLCBTKCJFUlI6RVhJU1RTIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJ6IGFkZF9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MwogICAgLy8gZW5zdXJlKGlkIG5vdCBpbiBzZWxmLmxhYmVscywgUygiRVJSOkVYSVNUUyIpKQogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIHB1c2hieXRlcyAiRVJSOkxFTkdUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBhcmM0LlN0cmluZyhuYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4NS04OQogICAgLy8gc2VsZi5sYWJlbHNbaWRdID0gTGFiZWxEZXNjcmlwdG9yKAogICAgLy8gICAgIGFyYzQuU3RyaW5nKG5hbWUpLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4MDAxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbChpZDogYnl0ZXMpIC0+IHZvaWQ6CnJlbW92ZV9sYWJlbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MS05MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsKHNlbGYsIGlkOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBlbnN1cmUoaWQgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTQKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTUKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX2Fzc2V0cyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDggLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBlbnN1cmUoc2VsZi5sYWJlbHNbaWRdLm51bV9hc3NldHMgPT0gMCwgUygiRVJSOk5PRU1QVFkiKSkKICAgIGJ5dGVjIDkgLy8gIkVSUjpOT0VNUFRZIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTYKICAgIC8vIGRlbCBzZWxmLmxhYmVsc1tpZF0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfbGFiZWwoaWQ6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4LTk5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2xhYmVsKHNlbGYsIGlkOiBTdHJpbmcpIC0+IExhYmVsRGVzY3JpcHRvcjoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMSAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDEKICAgIC8vIHJldHVybiBzZWxmLmxhYmVsc1tpZF0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcubG9nX2xhYmVscyhpZHM6IGJ5dGVzKSAtPiB2b2lkOgpsb2dfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMy0xMDQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBsb2dfbGFiZWxzKHNlbGYsIGlkczogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA1CiAgICAvLyBmb3IgX2lkeCwgbGFiZWxfaWQgaW4gdWVudW1lcmF0ZShpZHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpsb2dfbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDUKICAgIC8vIGZvciBfaWR4LCBsYWJlbF9pZCBpbiB1ZW51bWVyYXRlKGlkcyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGxvZ19sYWJlbHNfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDYKICAgIC8vIGxvZyhzZWxmLmxhYmVsc1tsYWJlbF9pZC5uYXRpdmVdKQogICAgZXh0cmFjdCAyIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBsb2dfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKbG9nX2xhYmVsc19hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkbWluX29yX29wZXJhdG9yX29ubHkobGFiZWw6IGJ5dGVzKSAtPiB2b2lkOgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjExMi0xMTMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYWRtaW5fb3Jfb3BlcmF0b3Jfb25seShzZWxmLCBsYWJlbDogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTE0CiAgICAvLyBpZiBUeG4uc2VuZGVyID09IHNlbGYuYWRtaW46CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWRtaW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRtaW4gZXhpc3RzCiAgICA9PQogICAgYnogYWRtaW5fb3Jfb3BlcmF0b3Jfb25seV9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTUKICAgIC8vIHJldHVybgogICAgcmV0c3ViCgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTYKICAgIC8vIHNlbGYub3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBvcGVyYXRvcl9vbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5vcGVyYXRvcl9vbmx5KGxhYmVsOiBieXRlcykgLT4gdm9pZDoKb3BlcmF0b3Jfb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTgtMTE5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIG9wZXJhdG9yX29ubHkoc2VsZiwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gb3BlcmF0b3JfaW5kZXggPSBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChUeG4uc2VuZGVyLCBsYWJlbCkKICAgIHR4biBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyMgogICAgLy8gb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjItMTIzCiAgICAvLyBvcGVyYXRvcl9pbmRleCAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSkKICAgIC8vIGFuZCBvcGVyYXRvcl9pbmRleCAhPSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGJ6IG9wZXJhdG9yX29ubHlfYm9vbF9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIzCiAgICAvLyBhbmQgb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBmcmFtZV9kaWcgMAogICAgaW50YyA0IC8vIDQyOTQ5NjcyOTUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIyLTEyMwogICAgLy8gb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICAvLyBhbmQgb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBieiBvcGVyYXRvcl9vbmx5X2Jvb2xfZmFsc2VAMwogICAgaW50Y18wIC8vIDEKCm9wZXJhdG9yX29ubHlfYm9vbF9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBvcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyNAogICAgLy8gUygiRVJSOlVOQVVUSCIpLAogICAgYnl0ZWMgNyAvLyAiRVJSOlVOQVVUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpvcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VANzoKICAgIHJldHN1YgoKb3BlcmF0b3Jfb25seV9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzEgLy8gMAogICAgYiBvcGVyYXRvcl9vbmx5X2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdWludDY0OgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI3LTEyOAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gaWYgb3BlcmF0b3Igbm90IGluIHNlbGYub3BlcmF0b3JzOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMwCiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMxCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9mb3JfaGVhZGVyQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMxCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzIKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCA9PSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMzCiAgICAvLyByZXR1cm4gaWR4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDY6CiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfZm9yX2hlYWRlckAzCgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM0CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkZF9vcGVyYXRvcl90b19sYWJlbChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdm9pZDoKYWRkX29wZXJhdG9yX3RvX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNi0xMzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9vcGVyYXRvcl90b19sYWJlbChzZWxmLCBvcGVyYXRvcjogQWNjb3VudCwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gc2VsZi5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGFkbWluX29yX29wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzkKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM5CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18xIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDAtMTQxCiAgICAvLyAjIGNoZWNrIGlmIG9wZXJhdG9yIGV4aXN0cyBhbHJlYWR5CiAgICAvLyBpZiBvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfb3BlcmF0b3JfdG9fbGFiZWxfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDQKICAgIC8vIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gPT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NC0xNDUKICAgIC8vIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIC8vID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0OS0xNTAKICAgIC8vICMgYWRkIGxhYmVsIHRvIG9wZXJhdG9yCiAgICAvLyBleGlzdGluZyA9IHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gZXhpc3RpbmcuYXBwZW5kKGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTIKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IGV4aXN0aW5nLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAoKYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTctMTU4CiAgICAvLyAjIGluY3JlbWVudCBsYWJlbCBvcGVyYXRvcnMKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IgPSBzZWxmLmxhYmVsc1tsYWJlbF0uY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjAKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgKyBVSW50NjQoMSkKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTU5LTE2MQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjIKICAgIC8vIHNlbGYubGFiZWxzW2xhYmVsXSA9IGxhYmVsX2Rlc2NyaXB0b3IuY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCmFkZF9vcGVyYXRvcl90b19sYWJlbF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTQtMTU1CiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICBiIGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdm9pZDoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY0LTE2NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWwoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXBuIDQKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gc2VsZi5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGFkbWluX29yX29wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjgKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjgKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY5CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY5CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18xIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3MS0xNzIKICAgIC8vICMgZW5zdXJlIGxhYmVsIGV4aXN0cyBpbiBvcGVyYXRvcgogICAgLy8gbGFiZWxfaWR4ID0gc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgob3BlcmF0b3IsIGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NQogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzQtMTc2CiAgICAvLyBsYWJlbF9pZHggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc1LTE3NgogICAgLy8gYW5kIGxhYmVsX2lkeAogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9LRVkpLCAgIyBrZXkgY2hlY2sgcmVkdW5kYW50LCBjaGVja2VkIGFib3ZlCiAgICBmcmFtZV9kaWcgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9LRVkpLCAgIyBrZXkgY2hlY2sgcmVkdW5kYW50LCBjaGVja2VkIGFib3ZlCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NS0xNzYKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzQtMTc2CiAgICAvLyBsYWJlbF9pZHggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzCiAgICBpbnRjXzAgLy8gMQoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc3CiAgICAvLyBTKCJFUlI6Tk9FWElTVCIpLAogICAgYnl0ZWNfMSAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODAtMTgxCiAgICAvLyAjIGVuc3VyZSBvbmx5IGVtcHR5IGxhYmVscyBjYW4gYmUgbGVmdCBvcGVyYXRvci1sZXNzCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID4gMSBvciBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPT0gMCwKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGI+CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDggLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VANwoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF90cnVlQDY6CiAgICBpbnRjXzAgLy8gMQoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg0CiAgICAvLyBTKCJFUlI6Tk9FTVBUWSIpLAogICAgYnl0ZWMgOSAvLyAiRVJSOk5PRU1QVFkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODgKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgLSBVSW50NjQoMSkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4Ni0xODkKICAgIC8vICMgZGVjciBvcGVyYXRvciBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzLm5hdGl2ZSAtIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTAKICAgIC8vIHNlbGYubGFiZWxzW2xhYmVsXSA9IGxhYmVsX2Rlc2NyaXB0b3IuY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTkyCiAgICAvLyBpZiBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0ubGVuZ3RoID09IDE6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBieiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9lbHNlX2JvZHlAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTMKICAgIC8vIGRlbCBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0KICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Vsc2VfYm9keUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTUKICAgIC8vIG5leHRfbGlzdCA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTk2LTE5OQogICAgLy8gIyB3YWxrLCBwdXNoIGV2ZXJ5dGhpbmcgZXhjZXB0IGluZGV4CiAgICAvLyAjIHRoaXMgaW1wbGVtZW50YXRpb24gd2Fsa3MgdHdpY2UgKG9uY2UgaW4gZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KQogICAgLy8gIyBjb3VsZCBiZSBtb3JlIGVmZmljaWVudAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdKToKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSA1CiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA2CgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9mb3JfaGVhZGVyQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5Ni0xOTkKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIGV4Y2VwdCBpbmRleAogICAgLy8gIyB0aGlzIGltcGxlbWVudGF0aW9uIHdhbGtzIHR3aWNlIChvbmNlIGluIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleCkKICAgIC8vICMgY291bGQgYmUgbW9yZSBlZmZpY2llbnQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSk6CiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDUKICAgIDwKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2ZvckAxNgogICAgZnJhbWVfZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBmcmFtZV9idXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDAKICAgIC8vIGlmIGxhYmVsX2lkeCAhPSBpZHg6CiAgICBmcmFtZV9kaWcgNwogICAgIT0KICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDMKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDEKICAgIC8vIG5leHRfbGlzdC5hcHBlbmQoc3RvcmVkX2xhYmVsKQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyA0CiAgICBpbnRjXzAgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICBmcmFtZV9idXJ5IDMKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTQ6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNgogICAgYiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9mb3JfaGVhZGVyQDExCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9mb3JAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjAzCiAgICAvLyBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0gPSBuZXh0X2xpc3QuY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgMgogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX2ZhbHNlQDc6CiAgICBpbnRjXzEgLy8gMAogICAgYiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX21lcmdlQDgKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMSAvLyAwCiAgICBiIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9vcGVyYXRvcl9sYWJlbHMob3BlcmF0b3I6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X29wZXJhdG9yX2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X29wZXJhdG9yX2xhYmVscyhzZWxmLCBvcGVyYXRvcjogQWNjb3VudCkgLT4gTGFiZWxMaXN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA3CiAgICAvLyBpZiBvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwOAogICAgLy8gcmV0dXJuIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbHNfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA5LTIxMAogICAgLy8gIyByZXR1cm4gZW1wdHkgbGlzdAogICAgLy8gcmV0dXJuIGVtcHR5X2xpc3QoKQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRkX2xhYmVsX3RvX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYWRkX2xhYmVsX3RvX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMS0yMjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbF90b19hc3NldChzZWxmLCBsYWJlbDogU3RyaW5nLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjMKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyNQogICAgLy8gc2VsZi5vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIG9wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjcKICAgIC8vIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfbGFiZWxfdG9fYXNzZXRfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTQKICAgIC8vIGlmIGFzc2V0IG5vdCBpbiBzZWxmLmFzc2V0czoKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE1CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMQogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzQtMjM1CiAgICAvLyAjIGFkZCBsYWJlbCB0byBvcGVyYXRvcgogICAgLy8gZXhpc3RpbmcgPSBzZWxmLmFzc2V0c1thc3NldF0uY29weSgpCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjM2CiAgICAvLyBleGlzdGluZy5hcHBlbmQoYXJjNC5TdHJpbmcobGFiZWwpKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzNwogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gZXhpc3RpbmcuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0Mi0yNDMKICAgIC8vICMgaW5jciBhc3NldCBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ0LTI0NgogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NwogICAgLy8gc2VsZi5sYWJlbHNbbGFiZWxdID0gbGFiZWxfZGVzY3JpcHRvci5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTYKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgphZGRfbGFiZWxfdG9fYXNzZXRfZm9yX2hlYWRlckA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2ZvckAxMQogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxNwogICAgLy8gaWYgc3RvcmVkX2xhYmVsID09IGxhYmVsOgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IGFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDEwCiAgICBmcmFtZV9kaWcgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyAzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGFkZF9sYWJlbF90b19hc3NldF9mb3JfaGVhZGVyQDcKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9mb3JAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE5CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMwCiAgICAvLyBzZWxmLmdldF9hc3NldF9sYWJlbF9pbmRleChhc3NldCwgbGFiZWwpID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgYiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfbGFiZWxfaW5kZXhAMTIKCmFkZF9sYWJlbF90b19hc3NldF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzktMjQwCiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYuYXNzZXRzW2Fzc2V0XSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ5LTI1MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQoc2VsZiwgbGFiZWw6IFN0cmluZywgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18zIC8vICIiCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjUzCiAgICAvLyBzZWxmLm9wZXJhdG9yX29ubHkobGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgb3BlcmF0b3Jfb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NQogICAgLy8gZm91bmQgPSBGYWxzZQogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gaWYgc2VsZi5hc3NldHNbYXNzZXRdLmxlbmd0aCA9PSAxOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjU3CiAgICAvLyBpZiBzZWxmLmFzc2V0c1thc3NldF1bMF0gPT0gbGFiZWw6CiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBhc3NlcnQgLy8gSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTgKICAgIC8vIGRlbCBzZWxmLmFzc2V0c1thc3NldF0KICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTkKICAgIC8vIGZvdW5kID0gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIGZyYW1lX2J1cnkgNQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBmcmFtZV9kaWcgNQogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzQKICAgIC8vIGVuc3VyZShmb3VuZCwgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc2LTI3NwogICAgLy8gIyBkZWNyIGFzc2V0IGNvdW50CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc5CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzgtMjgwCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgxCiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjEKICAgIC8vIGZvdW5kID0gRmFsc2UKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMwoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjYzCiAgICAvLyBuZXh0X2xpc3QgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2NC0yNjYKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIHRvIG5ldyBib3ggZXhjZXB0IGxhYmVsCiAgICAvLyAjIHNhdmUgJGZvdW5kIHRvIHRocm93IGlmIG5vdCBmb3VuZAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDQKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDYKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Zvcl9oZWFkZXJANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjQtMjY2CiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyB0byBuZXcgYm94IGV4Y2VwdCBsYWJlbAogICAgLy8gIyBzYXZlICRmb3VuZCB0byB0aHJvdyBpZiBub3QgZm91bmQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDQKICAgIDwKICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2ZvckAxMgogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjcKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCAhPSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgICE9CiAgICBieiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2OAogICAgLy8gbmV4dF9saXN0LmFwcGVuZChzdG9yZWRfbGFiZWwpCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIGZyYW1lX2J1cnkgMQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyA2CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSA2CiAgICBiIHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Zvcl9oZWFkZXJANgoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcwCiAgICAvLyBmb3VuZCA9IFRydWUKICAgIGludGNfMCAvLyAxCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMAoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfZm9yQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gbmV4dF9saXN0LmNvcHkoKQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgMQogICAgYm94X3B1dAogICAgYiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVscyhhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMtMjg0CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X2xhYmVscyhzZWxmLCBhc3NldDogQXNzZXQpIC0+IExhYmVsTGlzdDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NQogICAgLy8gaWYgYXNzZXQgaW4gc2VsZi5hc3NldHM6CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRfYXNzZXRfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gcmV0dXJuIHNlbGYuYXNzZXRzW2Fzc2V0XQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIHN3YXAKICAgIHJldHN1YgoKZ2V0X2Fzc2V0X2xhYmVsc19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDcKICAgIC8vIHJldHVybiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODctMjg4CiAgICAvLyAjIHJldHVybiBlbXB0eQogICAgLy8gcmV0dXJuIGVtcHR5X2xpc3QoKQogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c19sYWJlbHMoYXNzZXRzOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hc3NldHNfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5MC0yOTMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX2xhYmVscygKICAgIC8vICAgICBzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XQogICAgLy8gKSAtPiBhcmM0LkR5bmFtaWNBcnJheVtMYWJlbExpc3RdOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5NAogICAgLy8gb3V0ID0gYXJjNC5EeW5hbWljQXJyYXlbTGFiZWxMaXN0XSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5NQogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTUKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX2xhYmVsc19hZnRlcl9mb3JANwogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk2CiAgICAvLyBhc3NldCA9IEFzc2V0KGFzc2V0X2lkLm5hdGl2ZSkKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk3CiAgICAvLyBpZiBhc3NldCBpbiBzZWxmLmFzc2V0czoKICAgIGl0b2IKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGdldF9hc3NldHNfbGFiZWxzX2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk4CiAgICAvLyBvdXQuYXBwZW5kKHNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkpCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgYnl0ZWMgNiAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGZyYW1lX2J1cnkgMQoKZ2V0X2Fzc2V0c19sYWJlbHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDMKICAgIGIgZ2V0X2Fzc2V0c19sYWJlbHNfZm9yX2hlYWRlckAxCgpnZXRfYXNzZXRzX2xhYmVsc19lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMDAKICAgIC8vIG91dC5hcHBlbmQoZW1wdHlfbGlzdCgpKQogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDEKICAgIHB1c2hieXRlcyAweDAwMDIwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfbGFiZWxzX2FmdGVyX2lmX2Vsc2VANQoKZ2V0X2Fzc2V0c19sYWJlbHNfYWZ0ZXJfZm9yQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzAxCiAgICAvLyByZXR1cm4gb3V0CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X21pY3JvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMwOS0zMTAKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgX2dldF9hc3NldF9taWNybyhzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldE1pY3JvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzEzCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE0CiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzEyLTMxNQogICAgLy8gcmV0dXJuIEFzc2V0TWljcm8oCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X21pY3JvKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfbWljcm86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE3LTMxOAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9taWNybyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldE1pY3JvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE5CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfbWljcm8KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfbWljcm8oYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c19taWNybzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjEtMzIyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c19taWNybyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbWljcm9fZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI0CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X21pY3JvCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19taWNyb19mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhhc3NldF9pZDogdWludDY0KSAtPiBieXRlczoKX2dldF9hc3NldF9taWNyb19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI4LTMyOQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldE1pY3JvTGFiZWxzOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzMyCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzMzCiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM0CiAgICAvLyBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IF9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKCl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMzEtMzM1CiAgICAvLyByZXR1cm4gQXNzZXRNaWNyb0xhYmVscygKICAgIC8vICAgICB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIC8vICAgICBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA1IC8vIDUKICAgICsKICAgIHB1c2hieXRlcyAweDAwMDUKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKX2dldF9hc3NldF9taWNyb19sYWJlbHNfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9taWNyb19sYWJlbHMoYXNzZXQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9hc3NldF9taWNyb19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM3LTMzOAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9taWNyb19sYWJlbHMoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRNaWNyb0xhYmVsczoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMzOQogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9taWNyb19sYWJlbHMoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF9taWNyb19sYWJlbHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfbWljcm9fbGFiZWxzKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfbWljcm9fbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MS0zNDIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX21pY3JvX2xhYmVscyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbWljcm9fbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDMKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX21pY3JvX2xhYmVsc19hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDQKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVscwogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfbWljcm9fbGFiZWxzX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c19taWNyb19sYWJlbHNfYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDgtMzQ5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIF9nZXRfYXNzZXRfdGV4dChzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldFRleHQ6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTIKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzUzCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU0CiAgICAvLyB1cmw9YjJzdHIoYXNzZXQudXJsKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVSTAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM1NQogICAgLy8gbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBfZ2V0X2Fzc2V0X3RleHRfdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwoKX2dldF9hc3NldF90ZXh0X3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTEtMzU2CiAgICAvLyByZXR1cm4gQXNzZXRUZXh0KAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICAvLyAgICAgbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBwdXNoYnl0ZXMgMHgwMDA4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3RleHRfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfdGV4dF90ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfdGV4dChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3RleHQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU4LTM1OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0KHNlbGYsIGFzc2V0OiBVSW50NjQpIC0+IEFzc2V0VGV4dDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM2MAogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF90ZXh0KGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0KGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjItMzYzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c190ZXh0KHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjQKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3RleHRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY1CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfdGV4dF9mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfdGV4dF9hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY5LTM3MAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0VGV4dExhYmVsczoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM3MwogICAgLy8gbmFtZT1iMnN0cihhc3NldC5uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzQKICAgIC8vIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzUKICAgIC8vIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzcyLTM3NgogICAgLy8gcmV0dXJuIEFzc2V0VGV4dExhYmVscygKICAgIC8vICAgICBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgLy8gKQogICAgZGlnIDIKICAgIGxlbgogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweDAwMDYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzc4LTM3OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0X2xhYmVscyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldFRleHRMYWJlbHM6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODAKICAgIC8vIHJldHVybiBzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF90ZXh0X2xhYmVscwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0X2xhYmVscyhhc3NldHM6IGJ5dGVzKSAtPiB2b2lkOgpnZXRfYXNzZXRzX3RleHRfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4Mi0zODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODUKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dF9sYWJlbHMKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfc21hbGwoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg5LTM5MAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3NtYWxsKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0U21hbGw6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTMKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk0CiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk1CiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk2CiAgICAvLyB0b3RhbD1hcmM0LlVJbnQ2NChhc3NldC50b3RhbCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM5NwogICAgLy8gaGFzX2ZyZWV6ZT1hcmM0LkJvb2woYXNzZXQuZnJlZXplICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RnJlZXplCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk4CiAgICAvLyBoYXNfY2xhd2JhY2s9YXJjNC5Cb29sKGFzc2V0LmNsYXdiYWNrICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q2xhd2JhY2sKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTkKICAgIC8vIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogX2dldF9hc3NldF9zbWFsbF90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyA2CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTItNDAwCiAgICAvLyByZXR1cm4gQXNzZXRTbWFsbCgKICAgIC8vICAgICBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIHRvdGFsPWFyYzQuVUludDY0KGFzc2V0LnRvdGFsKSwKICAgIC8vICAgICBoYXNfZnJlZXplPWFyYzQuQm9vbChhc3NldC5mcmVlemUgIT0gR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgaGFzX2NsYXdiYWNrPWFyYzQuQm9vbChhc3NldC5jbGF3YmFjayAhPSBHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDAxMAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDUKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHB1c2hpbnQgMTA1IC8vIDEwNQogICAgc3dhcAogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NwogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgYiBfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9zbWFsbChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3NtYWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwMi00MDMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRfc21hbGwoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRTbWFsbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwNAogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X3NtYWxsCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX3NtYWxsKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDA2LTQwNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldHNfc21hbGwoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDgKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpnZXRfYXNzZXRzX3NtYWxsX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDgKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwOQogICAgLy8gbG9nKHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9zbWFsbAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfc21hbGxfZm9yX2hlYWRlckAxCgpnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuX2dldF9hc3NldF9mdWxsKGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X2Z1bGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEzLTQxNAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X2Z1bGwoc2VsZiwgYXNzZXRfaWQ6IFVJbnQ2NCkgLT4gQXNzZXRGdWxsOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxNgogICAgLy8gcmVzZXJ2ZV9hY2N0ID0gQWNjb3VudChhc3NldC5yZXNlcnZlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTkKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTgtNDIwCiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIC8vIGVsc2UgVUludDY0KDApCiAgICBieiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDE4CiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIGZyYW1lX2RpZyAxMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKCl9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIzCiAgICAvLyBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDI0CiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjUKICAgIC8vIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjYKICAgIC8vIHRvdGFsPWFyYzQuVUludDY0KGFzc2V0LnRvdGFsKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBmcmFtZV9idXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjcKICAgIC8vIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzMgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyOAogICAgLy8gbWFuYWdlcj1hcmM0LkFkZHJlc3MoYXNzZXQubWFuYWdlciksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNYW5hZ2VyCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDkKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjkKICAgIC8vIGZyZWV6ZT1hcmM0LkFkZHJlc3MoYXNzZXQuZnJlZXplKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldEZyZWV6ZQogICAgc3dhcAogICAgZnJhbWVfYnVyeSAxMAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMAogICAgLy8gY2xhd2JhY2s9YXJjNC5BZGRyZXNzKGFzc2V0LmNsYXdiYWNrKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENsYXdiYWNrCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDExCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMxCiAgICAvLyByZXNlcnZlPWFyYzQuQWRkcmVzcyhhc3NldC5yZXNlcnZlKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFJlc2VydmUKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgOAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMwogICAgLy8gbWV0YWRhdGFfaGFzaD1hcmM0LkR5bmFtaWNCeXRlcyhhc3NldC5tZXRhZGF0YV9oYXNoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE1ldGFkYXRhSGFzaAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMgogICAgLy8gcmVzZXJ2ZV9iYWxhbmNlPWFyYzQuVUludDY0KHJlc2VydmVfYmFsYW5jZSksCiAgICBpdG9iCiAgICBmcmFtZV9idXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzQKICAgIC8vIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA1CiAgICBmcmFtZV9kaWcgNAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwoKX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfbWVyZ2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjItNDM1CiAgICAvLyByZXR1cm4gQXNzZXRGdWxsKAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICAvLyAgICAgdG90YWw9YXJjNC5VSW50NjQoYXNzZXQudG90YWwpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIG1hbmFnZXI9YXJjNC5BZGRyZXNzKGFzc2V0Lm1hbmFnZXIpLAogICAgLy8gICAgIGZyZWV6ZT1hcmM0LkFkZHJlc3MoYXNzZXQuZnJlZXplKSwKICAgIC8vICAgICBjbGF3YmFjaz1hcmM0LkFkZHJlc3MoYXNzZXQuY2xhd2JhY2spLAogICAgLy8gICAgIHJlc2VydmU9YXJjNC5BZGRyZXNzKGFzc2V0LnJlc2VydmUpLAogICAgLy8gICAgIHJlc2VydmVfYmFsYW5jZT1hcmM0LlVJbnQ2NChyZXNlcnZlX2JhbGFuY2UpLAogICAgLy8gICAgIG1ldGFkYXRhX2hhc2g9YXJjNC5EeW5hbWljQnl0ZXMoYXNzZXQubWV0YWRhdGFfaGFzaCksCiAgICAvLyAgICAgbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMTU1IC8vIDE1NQogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDA5YgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICBmcmFtZV9kaWcgNgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgOQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMTAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDExCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyA4CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDcKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X21lcmdlQDYKCl9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIwCiAgICAvLyBlbHNlIFVJbnQ2NCgwKQogICAgaW50Y18xIC8vIDAKICAgIGIgX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9mdWxsKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfZnVsbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzctNDM4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X2Z1bGwoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRGdWxsOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDM5CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X2Z1bGwoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF9mdWxsCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX2Z1bGwoYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c19mdWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MS00NDIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX2Z1bGwoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDMKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpnZXRfYXNzZXRzX2Z1bGxfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfZnVsbF9hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDQKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfZnVsbChhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9mdWxsCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19mdWxsX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c19mdWxsX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { - "approval": "CiAFAQAC/////w+AgICAECYMC0VSUjpOT0VYSVNUBWFkbWluAAQVH3x1CkVSUjpFWElTVFMKRVJSOlVOQVVUSApFUlI6TEVOR1RICAAAAAAAAAAAC0VSUjpOT0VNUFRZAgACAgABAgAAMRhAAAQpMQBnMRtBAS2CCgSPDX2OBHwbMvYEF+aRrgQz0P/cBPrBzxsEtMULnwSi3SJHBKN96hEEaPGO+gTC7XQ/NhoAjgoAzgC2AKQAjgB2AF4ASAAwABgAAiNDMRkURDEYRDYaARfAMIgFnCtMULAiQzEZFEQxGEQ2GgFXAgA2GgIXwDCIBK8iQzEZFEQxGEQ2GgFXAgA2GgIXwDCIA9IiQzEZFEQxGEQ2GgEXwByIA60rTFCwIkMxGRREMRhENhoBF8AcNhoCVwIAiAKXIkMxGRREMRhENhoBF8AcNhoCVwIAiAIHIkMxGRREMRhENhoBVwIAiAFMK0xQsCJDMRkURDEYRDYaAVcCAIgBAyJDMRkURDEYRDYaAVcCADYaAlcCAIgApCJDMRkURDEYRDYaARfAHIgAhyJDMRlA/xsxGBREIkOKAwGL/SNZSYv/CEwkCyQISwEWVwYCTgKL/SRLAlKL/yQLr1CL/RWL/U8DTwJSUIv+UEwkC0kjTIsDiwIMQQAjiwRJFlcGAosBiwNJTgRPAl1JjAFLAVkkCAiMBCQIjANC/9WLAIsBUIwAiTEAIyllRBJAAAQnBbAAiYoBAIj/6ymL/2eJigIAiP/gi/69RQFBAAQnBLAAi/4VJBJAAAQnBrAAi/8VFlcGAov/UIASABIAAAAAAAAAAAAAAAAAAAAATFCL/rxIi/5Mv4mKAQCI/5mL/71FAUAAAyiwAIv/FSQSQAAEJwawAIv/vkRXAggnB6hAAAQnCLAAi/+8SImKAQGL/71FAUAAAyiwAIv/vkSJigEAMQAjKWVEEkEAAYmL/4gAAYmKAQAxAIv/iAAfIQQTQQAVMQCL/4gAEiUTQQAJIkAABCcFsACJI0L/9IoCASMqSYv+vUUBQAAFIQSMAImL/r5MSU4CjABEI1mMASOMAosCiwEMQQApiwBXAgCLAiQLSwFMWUpZJAhYVwIAi/8SQQAFiwKMAImLAiIIjAJC/88ljACJigIAi/+I/2KL/71FAUAAAyiwAIv+vUUBQQBAi/6L/4j/hSUSQAAEJwSwAIv+vkSL/xUWVwYCi/9QIoj+G4v+vEiL/ky/i/++REmBClsiCBZcCov/vEiL/0y/iYv/FRZXBgKL/1AnCUxQJwpMUIv+vEiL/ky/Qv/NigIAI0cEKkcCi/+I/uSL/71FAUAAAyiwAIv+vUUBQAADKLAAi/6L/4j/BEmMByUTQQDDiwchBBNBALsiQAADKLAAi/++TElOAowARFcKCIAIAAAAAAAAAAGlQAALiwBXAggnB6hBAIoiQAAEJwiwAIsASYEKWyIJFlwKi/+8SIv/TL+L/r5EI1kiEkEABYv+vEiJJwuMAov+vkxJTgKMAUQjWYwFI4wGiwaLBQxBADiLAVcCAIsGSU4CJAtLAUxZSlkkCFiMBIsHE4sCjANBAAqLAosEIoj9B4wDiwOMAosGIgiMBkL/wIv+vEiL/osCv4kjQv9zI0L/QooBAYv/vUUBQAADKLAAi/++RImKAgAjSSpJi/69RQFAAAMosACL/oj94ov/FkmMAb1FAUEAhosBvUUBQAA4IQQlEkAABCcEsACLAUm+RIv+FRZXBgKL/lAiiPyKSwG8SL+L/r5ESSRbIggWXAKL/rxIi/5Mv4mLAb5MSU4CjABEI1mMAiOMA4sDiwIMQQApiwBXAgCLAyQLSwFMWUpZJAhYVwIAi/4SQQAFiwNC/5GLAyIIjANC/88lQv+Ei/4VFlcGAov+UCcJTFAnCkxQiwFJvEhMv0L/iYoCACNHAypHAov+vUUBQAADKLAAi/6I/RsjjAWL/xZJjAO+RCNZIhJBAEeLA75ESVcCAEwjWURJI1lKWSQIWFcCAIv+EkEAJIsDvEgijAWLBUAAAyiwAIv+vkRJJFsiCRZcAov+vEiL/ky/iSOMBUL/3ScLjAGLA75MSU4CjABEI1mMBCOMBosGiwQMQQA3iwBXAgCLBiQLSwFMWUpZJAhYSYwCVwIAi/4TQQATiwGLAiKI+1mMAYsGIgiMBkL/xyKMBUL/8YsDSbxIiwG/Qv9+igEBi/8WSb1FAUAAAyiwAIsAvkRMiQ==", + "approval": "CiAGAQACCP////8PgICAgBAmCwQVH3x1C0VSUjpOT0VYSVNUAgAAAAVhZG1pbgpFUlI6RVhJU1RTAgACCkVSUjpVTkFVVEgIAAAAAAAAAAALRVJSOk5PRU1QVFkCAAExGEAABScEMQBnMRtBAoOCGASPDX2OBHwbMvYEF+aRrgQz0P/cBHJWFucE+sHPGwS0xQufBKLdIkcEo33qEQRo8Y76BMLtdD8Epn8DwgSq7gxhBLbDn2gEY1vjYgRwk7ENBOG7lfwEVUC4CgSKQS+TBG8XzdUEekzkuQQ2bFGvBNXTutMEA7qY2zYaAI4YAcIBqgGYAYIBcwFbAUMBLQEVAP0A5wDUAMAAsQCdAI4AegBrAFcASAA0ACUAEQACI0MxGRREMRhENhoBiAupIkMxGRREMRhENhoBF4gLkChMULAiQzEZFEQxGEQ2GgGICkoiQzEZFEQxGEQ2GgEXiAoxKExQsCJDMRkURDEYRDYaAYgJYSJDMRkURDEYRDYaAReICUgoTFCwIkMxGRREMRhENhoBiAjMIkMxGRREMRhENhoBF4gIsyhMULAiQzEZFEQxGEQ2GgGICAwiQzEZFEQxGEQ2GgEXiAfzKExQsCJDMRkURDEYRDYaAYgHcSJDMRkURDEYRDYaAReIB1goTFCwIkMxGRREMRhENhoBiAa+KExQsCJDMRkURDEYRDYaARfAMIgGkihMULAiQzEZFEQxGEQ2GgFXAgA2GgIXwDCIBaYiQzEZFEQxGEQ2GgFXAgA2GgIXwDCIBMciQzEZFEQxGEQ2GgEXwByIBKMoTFCwIkMxGRREMRhENhoBF8AcNhoCVwIAiAONIkMxGRREMRhENhoBF8AcNhoCVwIAiAL8IkMxGRREMRhENhoBiAIlIkMxGRREMRhENhoBVwIAiAIAKExQsCJDMRkURDEYRDYaAVcCAIgBwyJDMRkURDEYRDYaAVcCADYaAlcCAIgBWiJDMRkURDEYRDYaARfAHIgBPCJDMRmNBgAT/hz+HP4cAAsAA0L+GTEYRIgBDSJDMRhEiAEBIkMxGBREIkOKAwGL/SNZSYv/CEwkCyQISwEWVwYCTgKL/SRLAlKL/yQLr1CL/RWL/U8DTwJSUIv+UEwkC0kjTIsDiwIMQQAjiwRJFlcGAosBiwNJTgRPAl1JjAFLAVkkCAiMBCQIjANC/9WLAIsBUIwAiYoEAStJi/4kC4v8JAsjiwSLAwxBAByL/YsESU4CWYsCCBZXBgKLAUxQjAEkCIwEQv/ci/0VjAAjjASLBIsCDEEAHIv/iwRJTgJZiwAIFlcGAosBTFCMASQIjARC/9yL/Iv+CBZXBgKLAVCL/YsDiwBSUIv/FYv/iwJPAlJQjACJigEBi/8VFlcGAov/UImIAAWJiAABiTEAIycEZUQSQAAEJwewAImKAQCI/+onBIv/Z4mKAgCI/96L/r1FAUEABCcFsACL/hUkEkAADoAKRVJSOkxFTkdUSLAAi/8VFlcGAov/UIASABIAAAAAAAAAAAAAAAAAAAAATFCL/rxIi/5Mv4mKAQCI/42L/71FAUAAAymwAIv/vkRXAggnCKhAAAQnCbAAi/+8SImKAQGL/71FAUAAAymwAIv/vkSJigEAi/8jWSOLAYsADEEAIov/VwIAiwFJTgIkC0sBTFlKWSQIWFcCAL5EsCIIjAFC/9aJigEAMQAjJwRlRBJBAAGJi/+IAAGJigEAMQCL/4gAHEkhBRNBABGLACEEE0EACSJAAAQnB7AAiSNC//SKAgEjK0mL/r1FAUAABSEFjACJi/6+TElOAowARCNZjAEjjAKLAosBDEEAKYsAVwIAiwIkC0sBTFlKWSQIWFcCAIv/EkEABYsCjACJiwIiCIwCQv/PIQSMAImKAgCL/4j/Y4v/vUUBQAADKbAAi/69RQFBAEGL/ov/iP+EIQQSQAAEJwWwAIv+vkSL/xUWVwYCi/9QIoj9Uov+vEiL/ky/i/++REmBClsiCBZcCov/vEiL/0y/iYv/FRZXBgKL/1AnBkxQJwpMUIv+vEiL/ky/Qv/NigIAI0cEK0cCi/+I/uSL/71FAUAAAymwAIv+vUUBQAADKbAAi/6L/4j/AkmMByEEE0EAwosHIQUTQQC6IkAAAymwAIv/vkxJTgKMAERXCgiACAAAAAAAAAABpUAAC4sAVwIIJwioQQCJIkAABCcJsACLAEmBClsiCRZcCov/vEiL/0y/i/6+RCNZIhJBAAWL/rxIiSqMAov+vkxJTgKMAUQjWYwFI4wGiwaLBQxBADiLAVcCAIsGSU4CJAtLAUxZSlkkCFiMBIsHE4sCjANBAAqLAosEIoj8PowDiwOMAosGIgiMBkL/wIv+vEiL/osCv4kjQv90I0L/Q4oBAYv/vUUBQQAFi/++RIkqiYoCACNJK0mL/r1FAUAAAymwAIv+iP3ki/8WSYwBvUUBQQCIiwG9RQFAADkhBSEEEkAABCcFsACLAUm+RIv+FRZXBgKL/lAiiPvBSwG8SL+L/r5ESSRbIggWXAKL/rxIi/5Mv4mLAb5MSU4CjABEI1mMAiOMA4sDiwIMQQApiwBXAgCLAyQLSwFMWUpZJAhYVwIAi/4SQQAFiwNC/5CLAyIIjANC/88hBEL/gov+FRZXBgKL/lAnBkxQJwpMUIsBSbxITL9C/4iKAgAjRwMrRwKL/r1FAUAAAymwAIv+iP0bI4wFi/8WSYwDvkQjWSISQQBHiwO+RElXAgBMI1lESSNZSlkkCFhXAgCL/hJBACSLA7xIIowFiwVAAAMpsACL/r5ESSRbIgkWXAKL/rxIi/5Mv4kjjAVC/90qjAGLA75MSU4CjABEI1mMBCOMBosGiwQMQQA3iwBXAgCLBiQLSwFMWUpZJAhYSYwCVwIAi/4TQQATiwGLAiKI+pCMAYsGIgiMBkL/xyKMBUL/8YsDSbxIiwG/Qv9/igEBi/8WSb1FAUEABosAvkRMiSpMiYoBASMqi/8jWSOLA4sCDEEATov/VwIAiwMlC1sWSYwAvUUBQQAiiwC+RCcGTFCLAUkjWUxXAgAiTwOI+oyMAYsDIgiMA0L/wosBSSNZTFcCACKABAACAACI+m6MAUL/34sBjACJigEBi/9xA0SI+tmL/3EBRBZJkyUORFcHAYACAANMUExQiYoBAYv/iP/WiYoBAIv/I1kjiwGLAAxBABiL/1cCAIsBSU4CJQtbiP+1sCIIjAFC/+CJigEBi/9xA0SI+oWL/3EBRBZJkyUORFcHAYv/Fkm9RQFBAB+LAr5EiwBJFYEFCIACAAWLAVBMFlcGAlBMUExQjACJKkL/4YoBAYv/iP+yiYoBAIv/I1kjiwGLAAxBABiL/1cCAIsBSU4CJQtbiP+RsCIIjAFC/+CJigEBi/9xBESI+g2L/3EDRIj6BYv/cQVEiPn9i/8WSb1FAUEAQosDvkSLAEkVJQhJFlcGAoACAAhMUIsBSU4DFU8CCEkWVwYCTwJMUIsCSU4DFU8CCBZXBgJQTwNQTwJQTFBMUIwAiSpC/76KAQGL/4j/jYmKAQCL/yNZI4sBiwAMQQAYi/9XAgCLAUlOAiULW4j/bLAiCIwBQv/giYoBAYv/cQREiPlwi/9xA0SI+WiL/3EFRIj5YEsCFYEGCEkWVwYCgAIABkxQSwMVTwIIFlcGAlBPA1BPAlBMUImKAQGL/4j/uImKAQCL/yNZI4sBiwAMQQAYi/9XAgCLAUlOAiULW4j/l7AiCIwBQv/giYoBAYv/cQREiPj+i/9xA0SI+PaL/3EBRBZJkyUORFcHAYv/cQBEFov/cQlEMgMTgAEAI08CVIv/cQpEMgMTgAEAI08CVIv/Fkm9RQFBAEGLBr5EiwBJFYEQCEkWVwYCgAIAEExQiwFJTgMVTwIITIsCUIsDUIsEUIsFI1OBaUxUTBZXBgJQTwJQTFBMUIwAiSpC/7+KAQGL/4j/ZImKAQCL/yNZI4sBiwAMQQAYi/9XAgCLAUlOAiULW4j/Q7AiCIwBQv/giYoBASNHC4v/cQhMSU8CRIv/cABFAUEA7osMi/9wAESL/3EERIj4HIwBi/9xA0SI+BKMAov/cQVEiPgIjAOL/3EARBaMBov/cQFEFkmTJQ5EVwcBjAWL/3EHTIwJRIv/cQlMjApEi/9xCkyMC0SL/3EITIwIRIv/cQZESRUWVwYCTFCMABaMB4v/FkmMBL1FAUEAb4sEvkSLAUkVgZsBCEkWVwYCgAIAm0xQiwJJTgMVTwIISRZXBgJPAkxQiwNJTgMVTwIITIsGUIsFUIsJUIsKUIsLUIsIUEsBFlcGAlCLAElOAxVPAghMiwdQTBZXBgJQTwRQTwNQTwJQTFBMUIwAiSpC/5EjQv8VigEBi/+I/u6JigEAi/8jWSOLAYsADEEAGIv/VwIAiwFJTgIlC1uI/s2wIgiMAUL/4Ik=", "clear": "CoEBQw==" }, "compilerInfo": { diff --git a/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabelingClient.ts b/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabelingClient.ts index 57db58f..ee11a6f 100644 --- a/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabelingClient.ts +++ b/projects/asset_labeling-contracts/smart_contracts/artifacts/asset_labeling/AssetLabelingClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"AssetLabeling","structs":{"LabelDescriptor":[{"name":"name","type":"string"},{"name":"numAssets","type":"uint64"},{"name":"numOperators","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"}],"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,uint64,uint64)","struct":"LabelDescriptor"},"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":"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":"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":"get_asset_labels","args":[{"type":"asset","name":"asset"}],"returns":{"type":"string[]"},"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":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[668,1051,1070,1495],"errorMessage":"Index access is out of bounds"},{"pc":[201,223,247,271,293,317,341,363,381,405],"errorMessage":"OnCompletion is not NoOp"},{"pc":[428],"errorMessage":"can only call when creating"},{"pc":[204,226,250,274,296,320,344,366,384,408],"errorMessage":"can only call when not creating"},{"pc":[543,713],"errorMessage":"check self.admin exists"},{"pc":[1302,1352,1476,1487,1568,1669],"errorMessage":"check self.assets entry exists"},{"pc":[667,703,927,1050,1325,1531],"errorMessage":"check self.labels entry exists"},{"pc":[794,901,1109,1135,1242],"errorMessage":"check self.operators entry exists"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA0Mjk0OTY3Mjk1IDQyOTQ5NjcyOTYKICAgIGJ5dGVjYmxvY2sgIkVSUjpOT0VYSVNUIiAiYWRtaW4iICIiIDB4MTUxZjdjNzUgIkVSUjpFWElTVFMiICJFUlI6VU5BVVRIIiAiRVJSOkxFTkdUSCIgMHgwMDAwMDAwMDAwMDAwMDAwICJFUlI6Tk9FTVBUWSIgMHgwMDAyIDB4MDAwMSAweDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gc2VsZi5hZG1pbiA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjXzEgLy8gImFkbWluIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTUKICAgIHB1c2hieXRlc3MgMHg4ZjBkN2Q4ZSAweDdjMWIzMmY2IDB4MTdlNjkxYWUgMHgzM2QwZmZkYyAweGZhYzFjZjFiIDB4YjRjNTBiOWYgMHhhMmRkMjI0NyAweGEzN2RlYTExIDB4NjhmMThlZmEgMHhjMmVkNzQzZiAvLyBtZXRob2QgImNoYW5nZV9hZG1pbihhY2NvdW50KXZvaWQiLCBtZXRob2QgImFkZF9sYWJlbChzdHJpbmcsc3RyaW5nKXZvaWQiLCBtZXRob2QgInJlbW92ZV9sYWJlbChzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZ2V0X2xhYmVsKHN0cmluZykoc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJhZGRfb3BlcmF0b3JfdG9fbGFiZWwoYWNjb3VudCxzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWwoYWNjb3VudCxzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZ2V0X29wZXJhdG9yX2xhYmVscyhhY2NvdW50KXN0cmluZ1tdIiwgbWV0aG9kICJhZGRfbGFiZWxfdG9fYXNzZXQoc3RyaW5nLGFzc2V0KXZvaWQiLCBtZXRob2QgInJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0KHN0cmluZyxhc3NldCl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfbGFiZWxzKGFzc2V0KXN0cmluZ1tdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9jaGFuZ2VfYWRtaW5fcm91dGVANSBtYWluX2FkZF9sYWJlbF9yb3V0ZUA2IG1haW5fcmVtb3ZlX2xhYmVsX3JvdXRlQDcgbWFpbl9nZXRfbGFiZWxfcm91dGVAOCBtYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUA5IG1haW5fcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfcm91dGVAMTAgbWFpbl9nZXRfb3BlcmF0b3JfbGFiZWxzX3JvdXRlQDExIG1haW5fYWRkX2xhYmVsX3RvX2Fzc2V0X3JvdXRlQDEyIG1haW5fcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfcm91dGVAMTMgbWFpbl9nZXRfYXNzZXRfbGFiZWxzX3JvdXRlQDE0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2xhYmVsc19yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X2xhYmVscwogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsX3RvX2Fzc2V0CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTczCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOAogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVscwogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOAogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX29wZXJhdG9yX3RvX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9sYWJlbF9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjczCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOAogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfbGFiZWwKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlX2xhYmVsX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjUKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjUKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkX2xhYmVsX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NoYW5nZV9hZG1pbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2FkbWluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOAogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA1OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRtaW5fb25seSgpIC0+IHZvaWQ6CmFkbWluX29ubHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDcKICAgIC8vIGVuc3VyZShUeG4uc2VuZGVyID09IHNlbGYuYWRtaW4sIFMoIkVSUjpVTkFVVEgiKSkKICAgIHR4biBTZW5kZXIKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18xIC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkbWluX29ubHlfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDcKICAgIC8vIGVuc3VyZShUeG4uc2VuZGVyID09IHNlbGYuYWRtaW4sIFMoIkVSUjpVTkFVVEgiKSkKICAgIGJ5dGVjIDUgLy8gIkVSUjpVTkFVVEgiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRtaW5fb25seV9hZnRlcl9pZl9lbHNlQDM6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5jaGFuZ2VfYWRtaW4obmV3X2FkbWluOiBieXRlcykgLT4gdm9pZDoKY2hhbmdlX2FkbWluOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ5LTUwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBjaGFuZ2VfYWRtaW4oc2VsZiwgbmV3X2FkbWluOiBBY2NvdW50KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTEKICAgIC8vIHNlbGYuYWRtaW5fb25seSgpCiAgICBjYWxsc3ViIGFkbWluX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5hZG1pbiA9IG5ld19hZG1pbgogICAgYnl0ZWNfMSAvLyAiYWRtaW4iCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZGRfbGFiZWwoaWQ6IGJ5dGVzLCBuYW1lOiBieXRlcykgLT4gdm9pZDoKYWRkX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU0LTU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBhZGRfbGFiZWwoc2VsZiwgaWQ6IFN0cmluZywgbmFtZTogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTYKICAgIC8vIHNlbGYuYWRtaW5fb25seSgpCiAgICBjYWxsc3ViIGFkbWluX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NwogICAgLy8gZW5zdXJlKGlkIG5vdCBpbiBzZWxmLmxhYmVscywgUygiRVJSOkVYSVNUUyIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBieiBhZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTcKICAgIC8vIGVuc3VyZShpZCBub3QgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpFWElTVFMiKSkKICAgIGJ5dGVjIDQgLy8gIkVSUjpFWElTVFMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRkX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1OAogICAgLy8gZW5zdXJlKGlkLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkZF9sYWJlbF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1OAogICAgLy8gZW5zdXJlKGlkLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBieXRlYyA2IC8vICJFUlI6TEVOR1RIIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9sYWJlbF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjAKICAgIC8vIGFyYzQuU3RyaW5nKG5hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU5LTYzCiAgICAvLyBzZWxmLmxhYmVsc1tpZF0gPSBMYWJlbERlc2NyaXB0b3IoCiAgICAvLyAgICAgYXJjNC5TdHJpbmcobmFtZSksCiAgICAvLyAgICAgYXJjNC5VSW50NjQoMCksCiAgICAvLyAgICAgYXJjNC5VSW50NjQoMCksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcucmVtb3ZlX2xhYmVsKGlkOiBieXRlcykgLT4gdm9pZDoKcmVtb3ZlX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjY1LTY2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiByZW1vdmVfbGFiZWwoc2VsZiwgaWQ6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBzZWxmLmFkbWluX29ubHkoKQogICAgY2FsbHN1YiBhZG1pbl9vbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjgKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2OAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMCAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2OQogICAgLy8gZW5zdXJlKGlkLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2OQogICAgLy8gZW5zdXJlKGlkLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBieXRlYyA2IC8vICJFUlI6TEVOR1RIIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzAKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX2Fzc2V0cyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDcgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MAogICAgLy8gZW5zdXJlKHNlbGYubGFiZWxzW2lkXS5udW1fYXNzZXRzID09IDAsIFMoIkVSUjpOT0VNUFRZIikpCiAgICBieXRlYyA4IC8vICJFUlI6Tk9FTVBUWSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOAogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MQogICAgLy8gZGVsIHNlbGYubGFiZWxzW2lkXQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9sYWJlbChpZDogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzMtNzQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfbGFiZWwoc2VsZiwgaWQ6IFN0cmluZykgLT4gTGFiZWxEZXNjcmlwdG9yOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzUKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGdldF9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3NQogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMCAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3NgogICAgLy8gcmV0dXJuIHNlbGYubGFiZWxzW2lkXQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsOiBieXRlcykgLT4gdm9pZDoKYWRtaW5fb3Jfb3BlcmF0b3Jfb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MC04MQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBhZG1pbl9vcl9vcGVyYXRvcl9vbmx5KHNlbGYsIGxhYmVsOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MgogICAgLy8gaWYgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluOgogICAgdHhuIFNlbmRlcgogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjXzEgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIGJ6IGFkbWluX29yX29wZXJhdG9yX29ubHlfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODMKICAgIC8vIHJldHVybgogICAgcmV0c3ViCgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4NAogICAgLy8gc2VsZi5vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIG9wZXJhdG9yX29ubHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLm9wZXJhdG9yX29ubHkobGFiZWw6IGJ5dGVzKSAtPiB2b2lkOgpvcGVyYXRvcl9vbmx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg2LTg3CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIG9wZXJhdG9yX29ubHkoc2VsZiwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChUeG4uc2VuZGVyLCBsYWJlbCkgIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NgogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4OS05MQogICAgLy8gc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoVHhuLnNlbmRlciwgbGFiZWwpICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKQogICAgLy8gYW5kIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KFR4bi5zZW5kZXIsIGxhYmVsKQogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBieiBvcGVyYXRvcl9vbmx5X2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjkwCiAgICAvLyBhbmQgc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoVHhuLnNlbmRlciwgbGFiZWwpCiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgaW50Y18zIC8vIDQyOTQ5NjcyOTUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MC05MQogICAgLy8gYW5kIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KFR4bi5zZW5kZXIsIGxhYmVsKQogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICAhPQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg5LTkxCiAgICAvLyBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChUeG4uc2VuZGVyLCBsYWJlbCkgIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICAvLyBhbmQgc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoVHhuLnNlbmRlciwgbGFiZWwpCiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGJ6IG9wZXJhdG9yX29ubHlfYm9vbF9mYWxzZUAzCiAgICBpbnRjXzAgLy8gMQoKb3BlcmF0b3Jfb25seV9ib29sX21lcmdlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IG9wZXJhdG9yX29ubHlfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTIKICAgIC8vIFMoIkVSUjpVTkFVVEgiKSwKICAgIGJ5dGVjIDUgLy8gIkVSUjpVTkFVVEgiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKb3BlcmF0b3Jfb25seV9hZnRlcl9pZl9lbHNlQDc6CiAgICByZXRzdWIKCm9wZXJhdG9yX29ubHlfYm9vbF9mYWxzZUAzOgogICAgaW50Y18xIC8vIDAKICAgIGIgb3BlcmF0b3Jfb25seV9ib29sX21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgob3BlcmF0b3I6IGJ5dGVzLCBsYWJlbDogYnl0ZXMpIC0+IHVpbnQ2NDoKZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk1LTk2CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChzZWxmLCBvcGVyYXRvcjogQWNjb3VudCwgbGFiZWw6IFN0cmluZykgLT4gVUludDY0OgogICAgcHJvdG8gMiAxCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWNfMiAvLyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTcKICAgIC8vIGlmIG9wZXJhdG9yIG5vdCBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTkKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSk6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgZnJhbWVfYnVyeSAwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgMgoKZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2Zvcl9oZWFkZXJAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5OQogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdKToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2ZvckA4CiAgICBmcmFtZV9kaWcgMAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTAwCiAgICAvLyBpZiBzdG9yZWRfbGFiZWwgPT0gbGFiZWw6CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYnogZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gcmV0dXJuIGlkeAogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUA2OgogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2Zvcl9oZWFkZXJAMwoKZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2ZvckA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gcmV0dXJuIFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICBpbnRjXzMgLy8gNDI5NDk2NzI5NQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZGRfb3BlcmF0b3JfdG9fbGFiZWwob3BlcmF0b3I6IGJ5dGVzLCBsYWJlbDogYnl0ZXMpIC0+IHZvaWQ6CmFkZF9vcGVyYXRvcl90b19sYWJlbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDQtMTA1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBhZGRfb3BlcmF0b3JfdG9fbGFiZWwoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDYKICAgIC8vIHNlbGYuYWRtaW5fb3Jfb3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBhZG1pbl9vcl9vcGVyYXRvcl9vbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA3CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3CiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBhZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMCAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA4LTEwOQogICAgLy8gIyBjaGVjayBpZiBvcGVyYXRvciBleGlzdHMgYWxyZWFkeQogICAgLy8gaWYgb3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnM6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogYWRkX29wZXJhdG9yX3RvX2xhYmVsX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTEyCiAgICAvLyBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChvcGVyYXRvciwgbGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTMKICAgIC8vID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgaW50Y18zIC8vIDQyOTQ5NjcyOTUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTItMTEzCiAgICAvLyBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChvcGVyYXRvciwgbGFiZWwpCiAgICAvLyA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTQKICAgIC8vIFMoIkVSUjpFWElTVFMiKSwKICAgIGJ5dGVjIDQgLy8gIkVSUjpFWElTVFMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTctMTE4CiAgICAvLyAjIGFkZCBsYWJlbCB0byBvcGVyYXRvcgogICAgLy8gZXhpc3RpbmcgPSBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0uY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTkKICAgIC8vIGV4aXN0aW5nLmFwcGVuZChhcmM0LlN0cmluZyhsYWJlbCkpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBpbnRjXzAgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIwCiAgICAvLyBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0gPSBleGlzdGluZy5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKCmFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI1LTEyNgogICAgLy8gIyBpbmNyZW1lbnQgbGFiZWwgb3BlcmF0b3JzCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI4CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9vcGVyYXRvcnMubmF0aXZlICsgVUludDY0KDEpCiAgICBkdXAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyNy0xMjkKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgKyBVSW50NjQoMSkKICAgIC8vICkKICAgIGl0b2IKICAgIHJlcGxhY2UyIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMwCiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIyLTEyMwogICAgLy8gIyBuZXcgb3BlcmF0b3IsIGNyZWF0ZSBuZXcgYm94CiAgICAvLyBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0gPSBhcmM0LkR5bmFtaWNBcnJheShhcmM0LlN0cmluZyhsYWJlbCkpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBieXRlYyA5IC8vIDB4MDAwMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAxMCAvLyAweDAwMDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgYiBhZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcucmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWwob3BlcmF0b3I6IGJ5dGVzLCBsYWJlbDogYnl0ZXMpIC0+IHZvaWQ6CnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzMi0xMzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsKHNlbGYsIG9wZXJhdG9yOiBBY2NvdW50LCBsYWJlbDogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiA0CiAgICBieXRlY18yIC8vICIiCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYuYWRtaW5fb3Jfb3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBhZG1pbl9vcl9vcGVyYXRvcl9vbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM2CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3CiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM2CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18wIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOAogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gZW5zdXJlKG9wZXJhdG9yIGluIHNlbGYub3BlcmF0b3JzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gZW5zdXJlKG9wZXJhdG9yIGluIHNlbGYub3BlcmF0b3JzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMCAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOQogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzktMTQwCiAgICAvLyAjIGVuc3VyZSBsYWJlbCBleGlzdHMgaW4gb3BlcmF0b3IKICAgIC8vIGxhYmVsX2lkeCA9IHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDIKICAgIC8vIGxhYmVsX2lkeCAhPSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKQogICAgaW50Y18zIC8vIDQyOTQ5NjcyOTUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTQyLTE0NAogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICAvLyBhbmQgbGFiZWxfaWR4CiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSksICAjIGtleSBjaGVjayByZWR1bmRhbnQsIGNoZWNrZWQgYWJvdmUKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0My0xNDQKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgZnJhbWVfZGlnIDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDQKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgaW50YyA0IC8vIDQyOTQ5NjcyOTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDMtMTQ0CiAgICAvLyBhbmQgbGFiZWxfaWR4CiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSksICAjIGtleSBjaGVjayByZWR1bmRhbnQsIGNoZWNrZWQgYWJvdmUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTQyLTE0NAogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICAvLyBhbmQgbGFiZWxfaWR4CiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSksICAjIGtleSBjaGVjayByZWR1bmRhbnQsIGNoZWNrZWQgYWJvdmUKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMwogICAgaW50Y18wIC8vIDEKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gUygiRVJSOk5PRVhJU1QiKSwKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTQ4LTE0OQogICAgLy8gIyBlbnN1cmUgb25seSBlbXB0eSBsYWJlbHMgY2FuIGJlIGxlZnQgb3BlcmF0b3ItbGVzcwogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTEKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycyA+IDEgb3IgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID09IDAsCiAgICBleHRyYWN0IDEwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBiPgogICAgYm56IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgMAogICAgZXh0cmFjdCAyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlYyA3IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgYj09CiAgICBieiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX2ZhbHNlQDcKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfdHJ1ZUA2OgogICAgaW50Y18wIC8vIDEKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gUygiRVJSOk5PRU1QVFkiKSwKICAgIGJ5dGVjIDggLy8gIkVSUjpOT0VNUFRZIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTU2CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9vcGVyYXRvcnMubmF0aXZlIC0gVUludDY0KDEpCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTQtMTU3CiAgICAvLyAjIGRlY3Igb3BlcmF0b3IgY291bnQKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgLSBVSW50NjQoMSkKICAgIC8vICkKICAgIGl0b2IKICAgIHJlcGxhY2UyIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTU4CiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2MAogICAgLy8gaWYgc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdLmxlbmd0aCA9PSAxOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfZWxzZV9ib2R5QDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTYxCiAgICAvLyBkZWwgc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgcmV0c3ViCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9lbHNlX2JvZHlAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTYzCiAgICAvLyBuZXh0X2xpc3QgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWMgMTEgLy8gMHgwMDAwCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjQtMTY3CiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyBleGNlcHQgaW5kZXgKICAgIC8vICMgdGhpcyBpbXBsZW1lbnRhdGlvbiB3YWxrcyB0d2ljZSAob25jZSBpbiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgpCiAgICAvLyAjIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50CiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDYKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Zvcl9oZWFkZXJAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY0LTE2NwogICAgLy8gIyB3YWxrLCBwdXNoIGV2ZXJ5dGhpbmcgZXhjZXB0IGluZGV4CiAgICAvLyAjIHRoaXMgaW1wbGVtZW50YXRpb24gd2Fsa3MgdHdpY2UgKG9uY2UgaW4gZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KQogICAgLy8gIyBjb3VsZCBiZSBtb3JlIGVmZmljaWVudAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdKToKICAgIGZyYW1lX2RpZyA2CiAgICBmcmFtZV9kaWcgNQogICAgPAogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfZm9yQDE2CiAgICBmcmFtZV9kaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyA2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIGZyYW1lX2J1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gaWYgbGFiZWxfaWR4ICE9IGlkeDoKICAgIGZyYW1lX2RpZyA3CiAgICAhPQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMwogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gbmV4dF9saXN0LmFwcGVuZChzdG9yZWRfbGFiZWwpCiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDQKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIGZyYW1lX2J1cnkgMwoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxNDoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9idXJ5IDIKICAgIGZyYW1lX2RpZyA2CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSA2CiAgICBiIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Zvcl9oZWFkZXJAMTEKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2ZvckAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzEKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IG5leHRfbGlzdC5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAyCiAgICBib3hfcHV0CiAgICByZXRzdWIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VANzoKICAgIGludGNfMSAvLyAwCiAgICBiIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VAOAoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzOgogICAgaW50Y18xIC8vIDAKICAgIGIgcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X29wZXJhdG9yX2xhYmVscyhvcGVyYXRvcjogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfb3BlcmF0b3JfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3My0xNzQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfb3BlcmF0b3JfbGFiZWxzKHNlbGYsIG9wZXJhdG9yOiBBY2NvdW50KSAtPiBMYWJlbExpc3Q6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzUKICAgIC8vIGVuc3VyZShvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9ycywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGdldF9vcGVyYXRvcl9sYWJlbHNfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc1CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18wIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOAogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpnZXRfb3BlcmF0b3JfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzYKICAgIC8vIHJldHVybiBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRkX2xhYmVsX3RvX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYWRkX2xhYmVsX3RvX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4Ny0xODgKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbF90b19hc3NldChzZWxmLCBsYWJlbDogU3RyaW5nLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzIgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODkKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gc2VsZi5vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIG9wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTMKICAgIC8vIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfbGFiZWxfdG9fYXNzZXRfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODAKICAgIC8vIGlmIGFzc2V0IG5vdCBpbiBzZWxmLmFzc2V0czoKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTgxCiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5NgogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGludGNfMyAvLyA0Mjk0OTY3Mjk1CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3CiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5NwogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNCAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOAogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDAtMjAxCiAgICAvLyAjIGFkZCBsYWJlbCB0byBvcGVyYXRvcgogICAgLy8gZXhpc3RpbmcgPSBzZWxmLmFzc2V0c1thc3NldF0uY29weSgpCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjAyCiAgICAvLyBleGlzdGluZy5hcHBlbmQoYXJjNC5TdHJpbmcobGFiZWwpKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gZXhpc3RpbmcuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwOC0yMDkKICAgIC8vICMgaW5jciBhc3NldCBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxMQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjEwLTIxMgogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxMwogICAgLy8gc2VsZi5sYWJlbHNbbGFiZWxdID0gbGFiZWxfZGVzY3JpcHRvci5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODIKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgphZGRfbGFiZWxfdG9fYXNzZXRfZm9yX2hlYWRlckA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2ZvckAxMQogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gaWYgc3RvcmVkX2xhYmVsID09IGxhYmVsOgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IGFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDEwCiAgICBmcmFtZV9kaWcgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5NgogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyAzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGFkZF9sYWJlbF90b19hc3NldF9mb3JfaGVhZGVyQDcKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9mb3JAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg1CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGNfMyAvLyA0Mjk0OTY3Mjk1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTk2CiAgICAvLyBzZWxmLmdldF9hc3NldF9sYWJlbF9pbmRleChhc3NldCwgbGFiZWwpID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgYiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfbGFiZWxfaW5kZXhAMTIKCmFkZF9sYWJlbF90b19hc3NldF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUtMjA2CiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYuYXNzZXRzW2Fzc2V0XSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjIDkgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE1LTIxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQoc2VsZiwgbGFiZWw6IFN0cmluZywgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18yIC8vICIiCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTcKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTcKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE5CiAgICAvLyBzZWxmLm9wZXJhdG9yX29ubHkobGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgb3BlcmF0b3Jfb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMQogICAgLy8gZm91bmQgPSBGYWxzZQogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMgogICAgLy8gaWYgc2VsZi5hc3NldHNbYXNzZXRdLmxlbmd0aCA9PSAxOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIzCiAgICAvLyBpZiBzZWxmLmFzc2V0c1thc3NldF1bMF0gPT0gbGFiZWw6CiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBhc3NlcnQgLy8gSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjQKICAgIC8vIGRlbCBzZWxmLmFzc2V0c1thc3NldF0KICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjUKICAgIC8vIGZvdW5kID0gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIGZyYW1lX2J1cnkgNQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBmcmFtZV9kaWcgNQogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDAKICAgIC8vIGVuc3VyZShmb3VuZCwgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQyLTI0MwogICAgLy8gIyBkZWNyIGFzc2V0IGNvdW50CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ1CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDQtMjQ2CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ3CiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjcKICAgIC8vIGZvdW5kID0gRmFsc2UKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMwoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjI5CiAgICAvLyBuZXh0X2xpc3QgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWMgMTEgLy8gMHgwMDAwCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzAtMjMyCiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyB0byBuZXcgYm94IGV4Y2VwdCBsYWJlbAogICAgLy8gIyBzYXZlICRmb3VuZCB0byB0aHJvdyBpZiBub3QgZm91bmQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA2CgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9mb3JfaGVhZGVyQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMwLTIzMgogICAgLy8gIyB3YWxrLCBwdXNoIGV2ZXJ5dGhpbmcgdG8gbmV3IGJveCBleGNlcHQgbGFiZWwKICAgIC8vICMgc2F2ZSAkZm91bmQgdG8gdGhyb3cgaWYgbm90IGZvdW5kCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLmFzc2V0c1thc3NldF0pOgogICAgZnJhbWVfZGlnIDYKICAgIGZyYW1lX2RpZyA0CiAgICA8CiAgICBieiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9mb3JAMTIKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMzCiAgICAvLyBpZiBzdG9yZWRfbGFiZWwgIT0gbGFiZWw6CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICAhPQogICAgYnogcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzQKICAgIC8vIG5leHRfbGlzdC5hcHBlbmQoc3RvcmVkX2xhYmVsKQogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICBmcmFtZV9idXJ5IDEKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTA6CiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNgogICAgYiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9mb3JfaGVhZGVyQDYKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzNgogICAgLy8gZm91bmQgPSBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgZnJhbWVfYnVyeSA1CiAgICBiIHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTAKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2ZvckAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzgKICAgIC8vIHNlbGYuYXNzZXRzW2Fzc2V0XSA9IG5leHRfbGlzdC5jb3B5KCkKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9wdXQKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9sYWJlbHMoYXNzZXQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9hc3NldF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ5LTI1MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9sYWJlbHMoc2VsZiwgYXNzZXQ6IEFzc2V0KSAtPiBMYWJlbExpc3Q6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShhc3NldCBpbiBzZWxmLmFzc2V0cywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNwogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogZ2V0X2Fzc2V0X2xhYmVsc19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShhc3NldCBpbiBzZWxmLmFzc2V0cywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzAgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4CiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmdldF9hc3NldF9sYWJlbHNfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1MgogICAgLy8gcmV0dXJuIHNlbGYuYXNzZXRzW2Fzc2V0XQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIHN3YXAKICAgIHJldHN1Ygo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"},"byteCode":{"approval":"CiAFAQAC/////w+AgICAECYMC0VSUjpOT0VYSVNUBWFkbWluAAQVH3x1CkVSUjpFWElTVFMKRVJSOlVOQVVUSApFUlI6TEVOR1RICAAAAAAAAAAAC0VSUjpOT0VNUFRZAgACAgABAgAAMRhAAAQpMQBnMRtBAS2CCgSPDX2OBHwbMvYEF+aRrgQz0P/cBPrBzxsEtMULnwSi3SJHBKN96hEEaPGO+gTC7XQ/NhoAjgoAzgC2AKQAjgB2AF4ASAAwABgAAiNDMRkURDEYRDYaARfAMIgFnCtMULAiQzEZFEQxGEQ2GgFXAgA2GgIXwDCIBK8iQzEZFEQxGEQ2GgFXAgA2GgIXwDCIA9IiQzEZFEQxGEQ2GgEXwByIA60rTFCwIkMxGRREMRhENhoBF8AcNhoCVwIAiAKXIkMxGRREMRhENhoBF8AcNhoCVwIAiAIHIkMxGRREMRhENhoBVwIAiAFMK0xQsCJDMRkURDEYRDYaAVcCAIgBAyJDMRkURDEYRDYaAVcCADYaAlcCAIgApCJDMRkURDEYRDYaARfAHIgAhyJDMRlA/xsxGBREIkOKAwGL/SNZSYv/CEwkCyQISwEWVwYCTgKL/SRLAlKL/yQLr1CL/RWL/U8DTwJSUIv+UEwkC0kjTIsDiwIMQQAjiwRJFlcGAosBiwNJTgRPAl1JjAFLAVkkCAiMBCQIjANC/9WLAIsBUIwAiTEAIyllRBJAAAQnBbAAiYoBAIj/6ymL/2eJigIAiP/gi/69RQFBAAQnBLAAi/4VJBJAAAQnBrAAi/8VFlcGAov/UIASABIAAAAAAAAAAAAAAAAAAAAATFCL/rxIi/5Mv4mKAQCI/5mL/71FAUAAAyiwAIv/FSQSQAAEJwawAIv/vkRXAggnB6hAAAQnCLAAi/+8SImKAQGL/71FAUAAAyiwAIv/vkSJigEAMQAjKWVEEkEAAYmL/4gAAYmKAQAxAIv/iAAfIQQTQQAVMQCL/4gAEiUTQQAJIkAABCcFsACJI0L/9IoCASMqSYv+vUUBQAAFIQSMAImL/r5MSU4CjABEI1mMASOMAosCiwEMQQApiwBXAgCLAiQLSwFMWUpZJAhYVwIAi/8SQQAFiwKMAImLAiIIjAJC/88ljACJigIAi/+I/2KL/71FAUAAAyiwAIv+vUUBQQBAi/6L/4j/hSUSQAAEJwSwAIv+vkSL/xUWVwYCi/9QIoj+G4v+vEiL/ky/i/++REmBClsiCBZcCov/vEiL/0y/iYv/FRZXBgKL/1AnCUxQJwpMUIv+vEiL/ky/Qv/NigIAI0cEKkcCi/+I/uSL/71FAUAAAyiwAIv+vUUBQAADKLAAi/6L/4j/BEmMByUTQQDDiwchBBNBALsiQAADKLAAi/++TElOAowARFcKCIAIAAAAAAAAAAGlQAALiwBXAggnB6hBAIoiQAAEJwiwAIsASYEKWyIJFlwKi/+8SIv/TL+L/r5EI1kiEkEABYv+vEiJJwuMAov+vkxJTgKMAUQjWYwFI4wGiwaLBQxBADiLAVcCAIsGSU4CJAtLAUxZSlkkCFiMBIsHE4sCjANBAAqLAosEIoj9B4wDiwOMAosGIgiMBkL/wIv+vEiL/osCv4kjQv9zI0L/QooBAYv/vUUBQAADKLAAi/++RImKAgAjSSpJi/69RQFAAAMosACL/oj94ov/FkmMAb1FAUEAhosBvUUBQAA4IQQlEkAABCcEsACLAUm+RIv+FRZXBgKL/lAiiPyKSwG8SL+L/r5ESSRbIggWXAKL/rxIi/5Mv4mLAb5MSU4CjABEI1mMAiOMA4sDiwIMQQApiwBXAgCLAyQLSwFMWUpZJAhYVwIAi/4SQQAFiwNC/5GLAyIIjANC/88lQv+Ei/4VFlcGAov+UCcJTFAnCkxQiwFJvEhMv0L/iYoCACNHAypHAov+vUUBQAADKLAAi/6I/RsjjAWL/xZJjAO+RCNZIhJBAEeLA75ESVcCAEwjWURJI1lKWSQIWFcCAIv+EkEAJIsDvEgijAWLBUAAAyiwAIv+vkRJJFsiCRZcAov+vEiL/ky/iSOMBUL/3ScLjAGLA75MSU4CjABEI1mMBCOMBosGiwQMQQA3iwBXAgCLBiQLSwFMWUpZJAhYSYwCVwIAi/4TQQATiwGLAiKI+1mMAYsGIgiMBkL/xyKMBUL/8YsDSbxIiwG/Qv9+igEBi/8WSb1FAUAAAyiwAIsAvkRMiQ==","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":6,"patch":1}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"AssetLabeling","structs":{"AssetFull":[{"name":"name","type":"string"},{"name":"unitName","type":"string"},{"name":"url","type":"string"},{"name":"total","type":"uint64"},{"name":"decimals","type":"uint8"},{"name":"manager","type":"address"},{"name":"freeze","type":"address"},{"name":"clawback","type":"address"},{"name":"reserve","type":"address"},{"name":"metadataHash","type":"byte[]"},{"name":"reserveBalance","type":"uint64"},{"name":"labels","type":"string[]"}],"AssetMicro":[{"name":"unitName","type":"string"},{"name":"decimals","type":"uint8"}],"AssetMicroLabels":[{"name":"unitName","type":"string"},{"name":"decimals","type":"uint8"},{"name":"labels","type":"string[]"}],"AssetSmall":[{"name":"name","type":"string"},{"name":"unitName","type":"string"},{"name":"decimals","type":"uint8"},{"name":"total","type":"uint64"},{"name":"hasFreeze","type":"bool"},{"name":"hasClawback","type":"bool"},{"name":"labels","type":"string[]"}],"AssetText":[{"name":"name","type":"string"},{"name":"unitName","type":"string"},{"name":"url","type":"string"},{"name":"labels","type":"string[]"}],"AssetTextLabels":[{"name":"name","type":"string"},{"name":"unitName","type":"string"},{"name":"url","type":"string"}],"LabelDescriptor":[{"name":"name","type":"string"},{"name":"numAssets","type":"uint64"},{"name":"numOperators","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"}],"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,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":"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":"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":"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":"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_text","args":[{"type":"uint64","name":"asset"}],"returns":{"type":"(string,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)","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,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":[1181,1616,1635,2060],"errorMessage":"Index access is out of bounds"},{"pc":[290,305,325,340,360,375,395,410,430,445,465,480,500,519,541,565,589,611,635,659,674,696,714,738],"errorMessage":"OnCompletion is not NoOp"},{"pc":[3040],"errorMessage":"account opted into asset"},{"pc":[2344,2352,2428,2436,2548,2556,2564,2705,2713,2721,2819,2827,2835,2849,2855,2870,3024,3045,3055,3065,3075,3083,3102,3110,3118,3126,3131],"errorMessage":"asset exists"},{"pc":[791],"errorMessage":"can only call when creating"},{"pc":[293,308,328,343,363,378,398,413,433,448,468,483,503,522,544,568,592,614,638,662,677,699,717,741,774,782],"errorMessage":"can only call when not creating"},{"pc":[1057,1278],"errorMessage":"check self.admin exists"},{"pc":[1866,1916,2041,2052,2132,2230,2277,2459,2581,2894,3160],"errorMessage":"check self.assets entry exists"},{"pc":[1180,1216,1259,1491,1615,1889,2096],"errorMessage":"check self.labels entry exists"},{"pc":[1356,1465,1674,1699,1803],"errorMessage":"check self.operators entry exists"},{"pc":[2358,2442,2841,3089],"errorMessage":"overflow"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA4IDQyOTQ5NjcyOTUgNDI5NDk2NzI5NgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJFUlI6Tk9FWElTVCIgMHgwMDAwICIiICJhZG1pbiIgIkVSUjpFWElTVFMiIDB4MDAwMiAiRVJSOlVOQVVUSCIgMHgwMDAwMDAwMDAwMDAwMDAwICJFUlI6Tk9FTVBUWSIgMHgwMDAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTcKICAgIC8vIHNlbGYuYWRtaW4gPSBUeG4uc2VuZGVyCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDI5CiAgICBwdXNoYnl0ZXNzIDB4OGYwZDdkOGUgMHg3YzFiMzJmNiAweDE3ZTY5MWFlIDB4MzNkMGZmZGMgMHg3MjU2MTZlNyAweGZhYzFjZjFiIDB4YjRjNTBiOWYgMHhhMmRkMjI0NyAweGEzN2RlYTExIDB4NjhmMThlZmEgMHhjMmVkNzQzZiAweGE2N2YwM2MyIDB4YWFlZTBjNjEgMHhiNmMzOWY2OCAweDYzNWJlMzYyIDB4NzA5M2IxMGQgMHhlMWJiOTVmYyAweDU1NDBiODBhIDB4OGE0MTJmOTMgMHg2ZjE3Y2RkNSAweDdhNGNlNGI5IDB4MzY2YzUxYWYgMHhkNWQzYmFkMyAweDAzYmE5OGRiIC8vIG1ldGhvZCAiY2hhbmdlX2FkbWluKGFjY291bnQpdm9pZCIsIG1ldGhvZCAiYWRkX2xhYmVsKHN0cmluZyxzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmVtb3ZlX2xhYmVsKHN0cmluZyl2b2lkIiwgbWV0aG9kICJnZXRfbGFiZWwoc3RyaW5nKShzdHJpbmcsdWludDY0LHVpbnQ2NCkiLCBtZXRob2QgImxvZ19sYWJlbHMoc3RyaW5nW10pdm9pZCIsIG1ldGhvZCAiYWRkX29wZXJhdG9yX3RvX2xhYmVsKGFjY291bnQsc3RyaW5nKXZvaWQiLCBtZXRob2QgInJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsKGFjY291bnQsc3RyaW5nKXZvaWQiLCBtZXRob2QgImdldF9vcGVyYXRvcl9sYWJlbHMoYWNjb3VudClzdHJpbmdbXSIsIG1ldGhvZCAiYWRkX2xhYmVsX3RvX2Fzc2V0KHN0cmluZyxhc3NldCl2b2lkIiwgbWV0aG9kICJyZW1vdmVfbGFiZWxfZnJvbV9hc3NldChzdHJpbmcsYXNzZXQpdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2xhYmVscyhhc3NldClzdHJpbmdbXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19sYWJlbHModWludDY0W10pc3RyaW5nW11bXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0X21pY3JvKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4KSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNybyh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfbWljcm9fbGFiZWxzKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4LHN0cmluZ1tdKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNyb19sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3RleHQodWludDY0KShzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmdbXSkiLCBtZXRob2QgImdldF9hc3NldHNfdGV4dCh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfdGV4dF9sYWJlbHModWludDY0KShzdHJpbmcsc3RyaW5nLHN0cmluZykiLCBtZXRob2QgImdldF9hc3NldHNfdGV4dF9sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3NtYWxsKHVpbnQ2NCkoc3RyaW5nLHN0cmluZyx1aW50OCx1aW50NjQsYm9vbCxib29sLHN0cmluZ1tdKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19zbWFsbCh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfZnVsbCh1aW50NjQpKHN0cmluZyxzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50OCxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLGJ5dGVbXSx1aW50NjQsc3RyaW5nW10pIiwgbWV0aG9kICJnZXRfYXNzZXRzX2Z1bGwodWludDY0W10pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY2hhbmdlX2FkbWluX3JvdXRlQDUgbWFpbl9hZGRfbGFiZWxfcm91dGVANiBtYWluX3JlbW92ZV9sYWJlbF9yb3V0ZUA3IG1haW5fZ2V0X2xhYmVsX3JvdXRlQDggbWFpbl9sb2dfbGFiZWxzX3JvdXRlQDkgbWFpbl9hZGRfb3BlcmF0b3JfdG9fbGFiZWxfcm91dGVAMTAgbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMSBtYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTIgbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTMgbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxNCBtYWluX2dldF9hc3NldF9sYWJlbHNfcm91dGVAMTUgbWFpbl9nZXRfYXNzZXRzX2xhYmVsc19yb3V0ZUAxNiBtYWluX2dldF9hc3NldF9taWNyb19yb3V0ZUAxNyBtYWluX2dldF9hc3NldHNfbWljcm9fcm91dGVAMTggbWFpbl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3JvdXRlQDE5IG1haW5fZ2V0X2Fzc2V0c19taWNyb19sYWJlbHNfcm91dGVAMjAgbWFpbl9nZXRfYXNzZXRfdGV4dF9yb3V0ZUAyMSBtYWluX2dldF9hc3NldHNfdGV4dF9yb3V0ZUAyMiBtYWluX2dldF9hc3NldF90ZXh0X2xhYmVsc19yb3V0ZUAyMyBtYWluX2dldF9hc3NldHNfdGV4dF9sYWJlbHNfcm91dGVAMjQgbWFpbl9nZXRfYXNzZXRfc21hbGxfcm91dGVAMjUgbWFpbl9nZXRfYXNzZXRzX3NtYWxsX3JvdXRlQDI2IG1haW5fZ2V0X2Fzc2V0X2Z1bGxfcm91dGVAMjcgbWFpbl9nZXRfYXNzZXRzX2Z1bGxfcm91dGVAMjgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAzMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRzX2Z1bGxfcm91dGVAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRzX2Z1bGwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2Z1bGxfcm91dGVAMjc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDM3CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfZnVsbAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRzX3NtYWxsX3JvdXRlQDI2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwNgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDYKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19zbWFsbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfc21hbGxfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwMgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfc21hbGwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19yb3V0ZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGV4dF9sYWJlbHMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X3RleHRfbGFiZWxzX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM3OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X3RleHRfbGFiZWxzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfdGV4dF9yb3V0ZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzYyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGV4dAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfdGV4dF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF90ZXh0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfbWljcm9fbGFiZWxzX3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19taWNyb19sYWJlbHMKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVsc19yb3V0ZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMzcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM3CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF9taWNyb19sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c19taWNyb19yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzIxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfbWljcm8KICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX3JvdXRlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMTcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X21pY3JvCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfbGFiZWxzX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTAKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X2xhYmVsc19yb3V0ZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDkKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsX3RvX2Fzc2V0CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZF9vcGVyYXRvcl90b19sYWJlbAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9sb2dfbGFiZWxzX3JvdXRlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTAzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBsb2dfbGFiZWxzCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9sYWJlbF9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfbGFiZWwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlX2xhYmVsX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWwKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkX2xhYmVsX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NoYW5nZV9hZG1pbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2FkbWluCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AyOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc3dpdGNoIG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMzIgbWFpbl9hZnRlcl9pZl9lbHNlQDMzIG1haW5fYWZ0ZXJfaWZfZWxzZUAzMyBtYWluX2FmdGVyX2lmX2Vsc2VAMzMgbWFpbl91cGRhdGVAMzAgbWFpbl9kZWxldGVAMzEKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDMzCgptYWluX2RlbGV0ZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2NwogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiRGVsZXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3VwZGF0ZUAzMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiVXBkYXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDMyOgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA1OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18zIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMSAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LmIyc3RyKGI6IGJ5dGVzKSAtPiBieXRlczoKYjJzdHI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTAtNTEKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYjJzdHIoYjogQnl0ZXMpIC0+IGFyYzQuU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTIKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZyhTdHJpbmcuZnJvbV9ieXRlcyhiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2NQogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjY5CiAgICAvLyBzZWxmLmFkbWluX29ubHkoKQogICAgY2FsbHN1YiBhZG1pbl9vbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZG1pbl9vbmx5KCkgLT4gdm9pZDoKYWRtaW5fb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjIDQgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRtaW5fb25seV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgYnl0ZWMgNyAvLyAiRVJSOlVOQVVUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZG1pbl9vbmx5X2FmdGVyX2lmX2Vsc2VAMzoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmNoYW5nZV9hZG1pbihuZXdfYWRtaW46IGJ5dGVzKSAtPiB2b2lkOgpjaGFuZ2VfYWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NzUtNzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGNoYW5nZV9hZG1pbihzZWxmLCBuZXdfYWRtaW46IEFjY291bnQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3NwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBzZWxmLmFkbWluID0gbmV3X2FkbWluCiAgICBieXRlYyA0IC8vICJhZG1pbiIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkZF9sYWJlbChpZDogYnl0ZXMsIG5hbWU6IGJ5dGVzKSAtPiB2b2lkOgphZGRfbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODAtODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbChzZWxmLCBpZDogU3RyaW5nLCBuYW1lOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MgogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBlbnN1cmUoaWQgbm90IGluIHNlbGYubGFiZWxzLCBTKCJFUlI6RVhJU1RTIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJ6IGFkZF9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MwogICAgLy8gZW5zdXJlKGlkIG5vdCBpbiBzZWxmLmxhYmVscywgUygiRVJSOkVYSVNUUyIpKQogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIHB1c2hieXRlcyAiRVJSOkxFTkdUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBhcmM0LlN0cmluZyhuYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4NS04OQogICAgLy8gc2VsZi5sYWJlbHNbaWRdID0gTGFiZWxEZXNjcmlwdG9yKAogICAgLy8gICAgIGFyYzQuU3RyaW5nKG5hbWUpLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4MDAxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbChpZDogYnl0ZXMpIC0+IHZvaWQ6CnJlbW92ZV9sYWJlbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MS05MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsKHNlbGYsIGlkOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk0CiAgICAvLyBlbnN1cmUoaWQgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTQKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTUKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX2Fzc2V0cyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDggLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBlbnN1cmUoc2VsZi5sYWJlbHNbaWRdLm51bV9hc3NldHMgPT0gMCwgUygiRVJSOk5PRU1QVFkiKSkKICAgIGJ5dGVjIDkgLy8gIkVSUjpOT0VNUFRZIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTYKICAgIC8vIGRlbCBzZWxmLmxhYmVsc1tpZF0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfbGFiZWwoaWQ6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk4LTk5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2xhYmVsKHNlbGYsIGlkOiBTdHJpbmcpIC0+IExhYmVsRGVzY3JpcHRvcjoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMSAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKZ2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDEKICAgIC8vIHJldHVybiBzZWxmLmxhYmVsc1tpZF0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcubG9nX2xhYmVscyhpZHM6IGJ5dGVzKSAtPiB2b2lkOgpsb2dfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMy0xMDQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBsb2dfbGFiZWxzKHNlbGYsIGlkczogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA1CiAgICAvLyBmb3IgX2lkeCwgbGFiZWxfaWQgaW4gdWVudW1lcmF0ZShpZHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpsb2dfbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDUKICAgIC8vIGZvciBfaWR4LCBsYWJlbF9pZCBpbiB1ZW51bWVyYXRlKGlkcyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGxvZ19sYWJlbHNfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDYKICAgIC8vIGxvZyhzZWxmLmxhYmVsc1tsYWJlbF9pZC5uYXRpdmVdKQogICAgZXh0cmFjdCAyIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBsb2dfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKbG9nX2xhYmVsc19hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkbWluX29yX29wZXJhdG9yX29ubHkobGFiZWw6IGJ5dGVzKSAtPiB2b2lkOgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjExMi0xMTMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYWRtaW5fb3Jfb3BlcmF0b3Jfb25seShzZWxmLCBsYWJlbDogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTE0CiAgICAvLyBpZiBUeG4uc2VuZGVyID09IHNlbGYuYWRtaW46CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgYnl0ZWMgNCAvLyAiYWRtaW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRtaW4gZXhpc3RzCiAgICA9PQogICAgYnogYWRtaW5fb3Jfb3BlcmF0b3Jfb25seV9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTUKICAgIC8vIHJldHVybgogICAgcmV0c3ViCgphZG1pbl9vcl9vcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTYKICAgIC8vIHNlbGYub3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBvcGVyYXRvcl9vbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5vcGVyYXRvcl9vbmx5KGxhYmVsOiBieXRlcykgLT4gdm9pZDoKb3BlcmF0b3Jfb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTgtMTE5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIG9wZXJhdG9yX29ubHkoc2VsZiwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gb3BlcmF0b3JfaW5kZXggPSBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChUeG4uc2VuZGVyLCBsYWJlbCkKICAgIHR4biBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyMgogICAgLy8gb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjItMTIzCiAgICAvLyBvcGVyYXRvcl9pbmRleCAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSkKICAgIC8vIGFuZCBvcGVyYXRvcl9pbmRleCAhPSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGJ6IG9wZXJhdG9yX29ubHlfYm9vbF9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIzCiAgICAvLyBhbmQgb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBmcmFtZV9kaWcgMAogICAgaW50YyA0IC8vIDQyOTQ5NjcyOTUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIyLTEyMwogICAgLy8gb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICAvLyBhbmQgb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBieiBvcGVyYXRvcl9vbmx5X2Jvb2xfZmFsc2VAMwogICAgaW50Y18wIC8vIDEKCm9wZXJhdG9yX29ubHlfYm9vbF9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBvcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyNAogICAgLy8gUygiRVJSOlVOQVVUSCIpLAogICAgYnl0ZWMgNyAvLyAiRVJSOlVOQVVUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpvcGVyYXRvcl9vbmx5X2FmdGVyX2lmX2Vsc2VANzoKICAgIHJldHN1YgoKb3BlcmF0b3Jfb25seV9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzEgLy8gMAogICAgYiBvcGVyYXRvcl9vbmx5X2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdWludDY0OgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI3LTEyOAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgaW50Y18xIC8vIDAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gaWYgb3BlcmF0b3Igbm90IGluIHNlbGYub3BlcmF0b3JzOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMwCiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMxCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9mb3JfaGVhZGVyQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMxCiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzIKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCA9PSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMzCiAgICAvLyByZXR1cm4gaWR4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDY6CiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfZm9yX2hlYWRlckAzCgpnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM0CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmFkZF9vcGVyYXRvcl90b19sYWJlbChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdm9pZDoKYWRkX29wZXJhdG9yX3RvX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzNi0xMzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9vcGVyYXRvcl90b19sYWJlbChzZWxmLCBvcGVyYXRvcjogQWNjb3VudCwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gc2VsZi5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGFkbWluX29yX29wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzkKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM5CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18xIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDAtMTQxCiAgICAvLyAjIGNoZWNrIGlmIG9wZXJhdG9yIGV4aXN0cyBhbHJlYWR5CiAgICAvLyBpZiBvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfb3BlcmF0b3JfdG9fbGFiZWxfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDQKICAgIC8vIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gPT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NC0xNDUKICAgIC8vIHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIC8vID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0OS0xNTAKICAgIC8vICMgYWRkIGxhYmVsIHRvIG9wZXJhdG9yCiAgICAvLyBleGlzdGluZyA9IHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gZXhpc3RpbmcuYXBwZW5kKGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTIKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IGV4aXN0aW5nLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAoKYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTctMTU4CiAgICAvLyAjIGluY3JlbWVudCBsYWJlbCBvcGVyYXRvcnMKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IgPSBzZWxmLmxhYmVsc1tsYWJlbF0uY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjAKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgKyBVSW50NjQoMSkKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTU5LTE2MQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjIKICAgIC8vIHNlbGYubGFiZWxzW2xhYmVsXSA9IGxhYmVsX2Rlc2NyaXB0b3IuY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCmFkZF9vcGVyYXRvcl90b19sYWJlbF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTQtMTU1CiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICBiIGFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdm9pZDoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY0LTE2NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWwoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQsIGxhYmVsOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXBuIDQKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gc2VsZi5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGFkbWluX29yX29wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjgKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjgKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY5CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY5CiAgICAvLyBlbnN1cmUob3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18xIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDMyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3MS0xNzIKICAgIC8vICMgZW5zdXJlIGxhYmVsIGV4aXN0cyBpbiBvcGVyYXRvcgogICAgLy8gbGFiZWxfaWR4ID0gc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgob3BlcmF0b3IsIGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICBpbnRjIDQgLy8gNDI5NDk2NzI5NQogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzQtMTc2CiAgICAvLyBsYWJlbF9pZHggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc1LTE3NgogICAgLy8gYW5kIGxhYmVsX2lkeAogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9LRVkpLCAgIyBrZXkgY2hlY2sgcmVkdW5kYW50LCBjaGVja2VkIGFib3ZlCiAgICBmcmFtZV9kaWcgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gIT0gVUludDY0KE5PVF9GT1VORF9LRVkpLCAgIyBrZXkgY2hlY2sgcmVkdW5kYW50LCBjaGVja2VkIGFib3ZlCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NS0xNzYKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNzQtMTc2CiAgICAvLyBsYWJlbF9pZHggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUAzCiAgICBpbnRjXzAgLy8gMQoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc3CiAgICAvLyBTKCJFUlI6Tk9FWElTVCIpLAogICAgYnl0ZWNfMSAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODAtMTgxCiAgICAvLyAjIGVuc3VyZSBvbmx5IGVtcHR5IGxhYmVscyBjYW4gYmUgbGVmdCBvcGVyYXRvci1sZXNzCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID4gMSBvciBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPT0gMCwKICAgIGV4dHJhY3QgMTAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGI+CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDggLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VANwoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF90cnVlQDY6CiAgICBpbnRjXzAgLy8gMQoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg0CiAgICAvLyBTKCJFUlI6Tk9FTVBUWSIpLAogICAgYnl0ZWMgOSAvLyAiRVJSOk5PRU1QVFkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODgKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgLSBVSW50NjQoMSkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4Ni0xODkKICAgIC8vICMgZGVjciBvcGVyYXRvciBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzLm5hdGl2ZSAtIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTAKICAgIC8vIHNlbGYubGFiZWxzW2xhYmVsXSA9IGxhYmVsX2Rlc2NyaXB0b3IuY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTkyCiAgICAvLyBpZiBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0ubGVuZ3RoID09IDE6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBieiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9lbHNlX2JvZHlAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTMKICAgIC8vIGRlbCBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0KICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Vsc2VfYm9keUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTUKICAgIC8vIG5leHRfbGlzdCA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTk2LTE5OQogICAgLy8gIyB3YWxrLCBwdXNoIGV2ZXJ5dGhpbmcgZXhjZXB0IGluZGV4CiAgICAvLyAjIHRoaXMgaW1wbGVtZW50YXRpb24gd2Fsa3MgdHdpY2UgKG9uY2UgaW4gZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KQogICAgLy8gIyBjb3VsZCBiZSBtb3JlIGVmZmljaWVudAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdKToKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9ycyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSA1CiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA2CgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9mb3JfaGVhZGVyQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5Ni0xOTkKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIGV4Y2VwdCBpbmRleAogICAgLy8gIyB0aGlzIGltcGxlbWVudGF0aW9uIHdhbGtzIHR3aWNlIChvbmNlIGluIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleCkKICAgIC8vICMgY291bGQgYmUgbW9yZSBlZmZpY2llbnQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSk6CiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDUKICAgIDwKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2ZvckAxNgogICAgZnJhbWVfZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBmcmFtZV9idXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDAKICAgIC8vIGlmIGxhYmVsX2lkeCAhPSBpZHg6CiAgICBmcmFtZV9kaWcgNwogICAgIT0KICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDMKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDEKICAgIC8vIG5leHRfbGlzdC5hcHBlbmQoc3RvcmVkX2xhYmVsKQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyA0CiAgICBpbnRjXzAgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICBmcmFtZV9idXJ5IDMKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTQ6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNgogICAgYiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9mb3JfaGVhZGVyQDExCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9mb3JAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjAzCiAgICAvLyBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0gPSBuZXh0X2xpc3QuY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgMgogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX2ZhbHNlQDc6CiAgICBpbnRjXzEgLy8gMAogICAgYiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX21lcmdlQDgKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMSAvLyAwCiAgICBiIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9vcGVyYXRvcl9sYWJlbHMob3BlcmF0b3I6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X29wZXJhdG9yX2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUtMjA2CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X29wZXJhdG9yX2xhYmVscyhzZWxmLCBvcGVyYXRvcjogQWNjb3VudCkgLT4gTGFiZWxMaXN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA3CiAgICAvLyBpZiBvcGVyYXRvciBpbiBzZWxmLm9wZXJhdG9yczoKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRfb3BlcmF0b3JfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwOAogICAgLy8gcmV0dXJuIHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCmdldF9vcGVyYXRvcl9sYWJlbHNfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA5LTIxMAogICAgLy8gIyByZXR1cm4gZW1wdHkgbGlzdAogICAgLy8gcmV0dXJuIGVtcHR5X2xpc3QoKQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRkX2xhYmVsX3RvX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYWRkX2xhYmVsX3RvX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMS0yMjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbF90b19hc3NldChzZWxmLCBsYWJlbDogU3RyaW5nLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMSAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjMKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyNQogICAgLy8gc2VsZi5vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIG9wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjcKICAgIC8vIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhZGRfbGFiZWxfdG9fYXNzZXRfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTQKICAgIC8vIGlmIGFzc2V0IG5vdCBpbiBzZWxmLmFzc2V0czoKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE1CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICBpbnRjIDUgLy8gNDI5NDk2NzI5NgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMQogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNSAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MQogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzQtMjM1CiAgICAvLyAjIGFkZCBsYWJlbCB0byBvcGVyYXRvcgogICAgLy8gZXhpc3RpbmcgPSBzZWxmLmFzc2V0c1thc3NldF0uY29weSgpCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjM2CiAgICAvLyBleGlzdGluZy5hcHBlbmQoYXJjNC5TdHJpbmcobGFiZWwpKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzNwogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gZXhpc3RpbmcuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0Mi0yNDMKICAgIC8vICMgaW5jciBhc3NldCBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMCAvLyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ0LTI0NgogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NwogICAgLy8gc2VsZi5sYWJlbHNbbGFiZWxdID0gbGFiZWxfZGVzY3JpcHRvci5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTYKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAyCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgphZGRfbGFiZWxfdG9fYXNzZXRfZm9yX2hlYWRlckA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2ZvckAxMQogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxNwogICAgLy8gaWYgc3RvcmVkX2xhYmVsID09IGxhYmVsOgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IGFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDEwCiAgICBmcmFtZV9kaWcgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5nZXRfYXNzZXRfbGFiZWxfaW5kZXgoYXNzZXQsIGxhYmVsKSA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4QDEyCgphZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyAzCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGFkZF9sYWJlbF90b19hc3NldF9mb3JfaGVhZGVyQDcKCmFkZF9sYWJlbF90b19hc3NldF9hZnRlcl9mb3JAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE5CiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMwCiAgICAvLyBzZWxmLmdldF9hc3NldF9sYWJlbF9pbmRleChhc3NldCwgbGFiZWwpID09IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgYiBhZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfbGFiZWxfaW5kZXhAMTIKCmFkZF9sYWJlbF90b19hc3NldF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzktMjQwCiAgICAvLyAjIG5ldyBvcGVyYXRvciwgY3JlYXRlIG5ldyBib3gKICAgIC8vIHNlbGYuYXNzZXRzW2Fzc2V0XSA9IGFyYzQuRHluYW1pY0FycmF5KGFyYzQuU3RyaW5nKGxhYmVsKSkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGJ5dGVjIDYgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ5LTI1MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQoc2VsZiwgbGFiZWw6IFN0cmluZywgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18zIC8vICIiCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDAKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTEKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjUzCiAgICAvLyBzZWxmLm9wZXJhdG9yX29ubHkobGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgb3BlcmF0b3Jfb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NQogICAgLy8gZm91bmQgPSBGYWxzZQogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gaWYgc2VsZi5hc3NldHNbYXNzZXRdLmxlbmd0aCA9PSAxOgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjU3CiAgICAvLyBpZiBzZWxmLmFzc2V0c1thc3NldF1bMF0gPT0gbGFiZWw6CiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBhc3NlcnQgLy8gSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTgKICAgIC8vIGRlbCBzZWxmLmFzc2V0c1thc3NldF0KICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTkKICAgIC8vIGZvdW5kID0gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIGZyYW1lX2J1cnkgNQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MAogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBmcmFtZV9kaWcgNQogICAgYm56IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzQKICAgIC8vIGVuc3VyZShmb3VuZCwgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzEgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc2LTI3NwogICAgLy8gIyBkZWNyIGFzc2V0IGNvdW50CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yID0gc2VsZi5sYWJlbHNbbGFiZWxdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc5CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzgtMjgwCiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBsYWJlbF9kZXNjcmlwdG9yLm51bV9hc3NldHMubmF0aXZlIC0gVUludDY0KDEpCiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgxCiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjEKICAgIC8vIGZvdW5kID0gRmFsc2UKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMwoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjYzCiAgICAvLyBuZXh0X2xpc3QgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2NC0yNjYKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIHRvIG5ldyBib3ggZXhjZXB0IGxhYmVsCiAgICAvLyAjIHNhdmUgJGZvdW5kIHRvIHRocm93IGlmIG5vdCBmb3VuZAogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAzCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDQKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDYKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Zvcl9oZWFkZXJANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjQtMjY2CiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyB0byBuZXcgYm94IGV4Y2VwdCBsYWJlbAogICAgLy8gIyBzYXZlICRmb3VuZCB0byB0aHJvdyBpZiBub3QgZm91bmQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDQKICAgIDwKICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2ZvckAxMgogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjcKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCAhPSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgICE9CiAgICBieiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2OAogICAgLy8gbmV4dF9saXN0LmFwcGVuZChzdG9yZWRfbGFiZWwpCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMCAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIGZyYW1lX2J1cnkgMQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyA2CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSA2CiAgICBiIHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Zvcl9oZWFkZXJANgoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjcwCiAgICAvLyBmb3VuZCA9IFRydWUKICAgIGludGNfMCAvLyAxCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMAoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfZm9yQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gbmV4dF9saXN0LmNvcHkoKQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgMQogICAgYm94X3B1dAogICAgYiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVscyhhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODMtMjg0CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X2xhYmVscyhzZWxmLCBhc3NldDogQXNzZXQpIC0+IExhYmVsTGlzdDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NQogICAgLy8gaWYgYXNzZXQgaW4gc2VsZi5hc3NldHM6CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRfYXNzZXRfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gcmV0dXJuIHNlbGYuYXNzZXRzW2Fzc2V0XQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIHN3YXAKICAgIHJldHN1YgoKZ2V0X2Fzc2V0X2xhYmVsc19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDcKICAgIC8vIHJldHVybiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODctMjg4CiAgICAvLyAjIHJldHVybiBlbXB0eQogICAgLy8gcmV0dXJuIGVtcHR5X2xpc3QoKQogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c19sYWJlbHMoYXNzZXRzOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hc3NldHNfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5MC0yOTMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX2xhYmVscygKICAgIC8vICAgICBzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XQogICAgLy8gKSAtPiBhcmM0LkR5bmFtaWNBcnJheVtMYWJlbExpc3RdOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5NAogICAgLy8gb3V0ID0gYXJjNC5EeW5hbWljQXJyYXlbTGFiZWxMaXN0XSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5NQogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTUKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX2xhYmVsc19hZnRlcl9mb3JANwogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk2CiAgICAvLyBhc3NldCA9IEFzc2V0KGFzc2V0X2lkLm5hdGl2ZSkKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk3CiAgICAvLyBpZiBhc3NldCBpbiBzZWxmLmFzc2V0czoKICAgIGl0b2IKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGdldF9hc3NldHNfbGFiZWxzX2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk4CiAgICAvLyBvdXQuYXBwZW5kKHNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkpCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgYnl0ZWMgNiAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGZyYW1lX2J1cnkgMQoKZ2V0X2Fzc2V0c19sYWJlbHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDMKICAgIGIgZ2V0X2Fzc2V0c19sYWJlbHNfZm9yX2hlYWRlckAxCgpnZXRfYXNzZXRzX2xhYmVsc19lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMDAKICAgIC8vIG91dC5hcHBlbmQoZW1wdHlfbGlzdCgpKQogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDEKICAgIHB1c2hieXRlcyAweDAwMDIwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfbGFiZWxzX2FmdGVyX2lmX2Vsc2VANQoKZ2V0X2Fzc2V0c19sYWJlbHNfYWZ0ZXJfZm9yQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzAxCiAgICAvLyByZXR1cm4gb3V0CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X21pY3JvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMwOS0zMTAKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgX2dldF9hc3NldF9taWNybyhzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldE1pY3JvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzEzCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE0CiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzEyLTMxNQogICAgLy8gcmV0dXJuIEFzc2V0TWljcm8oCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X21pY3JvKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfbWljcm86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE3LTMxOAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9taWNybyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldE1pY3JvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE5CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfbWljcm8KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfbWljcm8oYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c19taWNybzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjEtMzIyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c19taWNybyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbWljcm9fZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI0CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X21pY3JvCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19taWNyb19mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhhc3NldF9pZDogdWludDY0KSAtPiBieXRlczoKX2dldF9hc3NldF9taWNyb19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI4LTMyOQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldE1pY3JvTGFiZWxzOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzMyCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzMzCiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM0CiAgICAvLyBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IF9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKCl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMzEtMzM1CiAgICAvLyByZXR1cm4gQXNzZXRNaWNyb0xhYmVscygKICAgIC8vICAgICB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIC8vICAgICBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA1IC8vIDUKICAgICsKICAgIHB1c2hieXRlcyAweDAwMDUKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKX2dldF9hc3NldF9taWNyb19sYWJlbHNfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9taWNyb19sYWJlbHMoYXNzZXQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9hc3NldF9taWNyb19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM3LTMzOAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9taWNyb19sYWJlbHMoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRNaWNyb0xhYmVsczoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMzOQogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9taWNyb19sYWJlbHMoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF9taWNyb19sYWJlbHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfbWljcm9fbGFiZWxzKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfbWljcm9fbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MS0zNDIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX21pY3JvX2xhYmVscyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDAKCmdldF9hc3NldHNfbWljcm9fbGFiZWxzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDMKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX21pY3JvX2xhYmVsc19hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDQKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVscwogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfbWljcm9fbGFiZWxzX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c19taWNyb19sYWJlbHNfYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDgtMzQ5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIF9nZXRfYXNzZXRfdGV4dChzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldFRleHQ6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTIKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzUzCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU0CiAgICAvLyB1cmw9YjJzdHIoYXNzZXQudXJsKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVSTAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM1NQogICAgLy8gbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBfZ2V0X2Fzc2V0X3RleHRfdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwoKX2dldF9hc3NldF90ZXh0X3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTEtMzU2CiAgICAvLyByZXR1cm4gQXNzZXRUZXh0KAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICAvLyAgICAgbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBwdXNoYnl0ZXMgMHgwMDA4CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3RleHRfdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfdGV4dF90ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfdGV4dChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3RleHQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU4LTM1OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0KHNlbGYsIGFzc2V0OiBVSW50NjQpIC0+IEFzc2V0VGV4dDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM2MAogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF90ZXh0KGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0KGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjItMzYzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c190ZXh0KHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjQKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3RleHRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY1CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfdGV4dF9mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfdGV4dF9hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY5LTM3MAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0VGV4dExhYmVsczoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM3MwogICAgLy8gbmFtZT1iMnN0cihhc3NldC5uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzQKICAgIC8vIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzUKICAgIC8vIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzcyLTM3NgogICAgLy8gcmV0dXJuIEFzc2V0VGV4dExhYmVscygKICAgIC8vICAgICBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgLy8gKQogICAgZGlnIDIKICAgIGxlbgogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweDAwMDYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzc4LTM3OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0X2xhYmVscyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldFRleHRMYWJlbHM6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODAKICAgIC8vIHJldHVybiBzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF90ZXh0X2xhYmVscwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0X2xhYmVscyhhc3NldHM6IGJ5dGVzKSAtPiB2b2lkOgpnZXRfYXNzZXRzX3RleHRfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4Mi0zODMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODUKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dF9sYWJlbHMKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfc21hbGwoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg5LTM5MAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3NtYWxsKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0U21hbGw6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTMKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk0CiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk1CiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk2CiAgICAvLyB0b3RhbD1hcmM0LlVJbnQ2NChhc3NldC50b3RhbCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM5NwogICAgLy8gaGFzX2ZyZWV6ZT1hcmM0LkJvb2woYXNzZXQuZnJlZXplICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RnJlZXplCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk4CiAgICAvLyBoYXNfY2xhd2JhY2s9YXJjNC5Cb29sKGFzc2V0LmNsYXdiYWNrICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q2xhd2JhY2sKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTkKICAgIC8vIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogX2dldF9hc3NldF9zbWFsbF90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyA2CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTItNDAwCiAgICAvLyByZXR1cm4gQXNzZXRTbWFsbCgKICAgIC8vICAgICBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIHRvdGFsPWFyYzQuVUludDY0KGFzc2V0LnRvdGFsKSwKICAgIC8vICAgICBoYXNfZnJlZXplPWFyYzQuQm9vbChhc3NldC5mcmVlemUgIT0gR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgaGFzX2NsYXdiYWNrPWFyYzQuQm9vbChhc3NldC5jbGF3YmFjayAhPSBHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDAxMAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDUKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHB1c2hpbnQgMTA1IC8vIDEwNQogICAgc3dhcAogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NwogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgYiBfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9zbWFsbChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3NtYWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwMi00MDMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRfc21hbGwoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRTbWFsbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwNAogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X3NtYWxsCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX3NtYWxsKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDA2LTQwNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldHNfc21hbGwoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDgKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpnZXRfYXNzZXRzX3NtYWxsX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDgKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwOQogICAgLy8gbG9nKHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9zbWFsbAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfc21hbGxfZm9yX2hlYWRlckAxCgpnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuX2dldF9hc3NldF9mdWxsKGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X2Z1bGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEzLTQxNAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X2Z1bGwoc2VsZiwgYXNzZXRfaWQ6IFVJbnQ2NCkgLT4gQXNzZXRGdWxsOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzEgLy8gMAogICAgZHVwbiAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxNgogICAgLy8gcmVzZXJ2ZV9hY2N0ID0gQWNjb3VudChhc3NldC5yZXNlcnZlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTkKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTgtNDIwCiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIC8vIGVsc2UgVUludDY0KDApCiAgICBieiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDE4CiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIGZyYW1lX2RpZyAxMgogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKCl9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIzCiAgICAvLyBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDI0CiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjUKICAgIC8vIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjYKICAgIC8vIHRvdGFsPWFyYzQuVUludDY0KGFzc2V0LnRvdGFsKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBmcmFtZV9idXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjcKICAgIC8vIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzMgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyOAogICAgLy8gbWFuYWdlcj1hcmM0LkFkZHJlc3MoYXNzZXQubWFuYWdlciksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRNYW5hZ2VyCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDkKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjkKICAgIC8vIGZyZWV6ZT1hcmM0LkFkZHJlc3MoYXNzZXQuZnJlZXplKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldEZyZWV6ZQogICAgc3dhcAogICAgZnJhbWVfYnVyeSAxMAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMAogICAgLy8gY2xhd2JhY2s9YXJjNC5BZGRyZXNzKGFzc2V0LmNsYXdiYWNrKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENsYXdiYWNrCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDExCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMxCiAgICAvLyByZXNlcnZlPWFyYzQuQWRkcmVzcyhhc3NldC5yZXNlcnZlKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFJlc2VydmUKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgOAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMwogICAgLy8gbWV0YWRhdGFfaGFzaD1hcmM0LkR5bmFtaWNCeXRlcyhhc3NldC5tZXRhZGF0YV9oYXNoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE1ldGFkYXRhSGFzaAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzMgogICAgLy8gcmVzZXJ2ZV9iYWxhbmNlPWFyYzQuVUludDY0KHJlc2VydmVfYmFsYW5jZSksCiAgICBpdG9iCiAgICBmcmFtZV9idXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzQKICAgIC8vIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA1CiAgICBmcmFtZV9kaWcgNAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwoKX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfbWVyZ2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjItNDM1CiAgICAvLyByZXR1cm4gQXNzZXRGdWxsKAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICAvLyAgICAgdG90YWw9YXJjNC5VSW50NjQoYXNzZXQudG90YWwpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIG1hbmFnZXI9YXJjNC5BZGRyZXNzKGFzc2V0Lm1hbmFnZXIpLAogICAgLy8gICAgIGZyZWV6ZT1hcmM0LkFkZHJlc3MoYXNzZXQuZnJlZXplKSwKICAgIC8vICAgICBjbGF3YmFjaz1hcmM0LkFkZHJlc3MoYXNzZXQuY2xhd2JhY2spLAogICAgLy8gICAgIHJlc2VydmU9YXJjNC5BZGRyZXNzKGFzc2V0LnJlc2VydmUpLAogICAgLy8gICAgIHJlc2VydmVfYmFsYW5jZT1hcmM0LlVJbnQ2NChyZXNlcnZlX2JhbGFuY2UpLAogICAgLy8gICAgIG1ldGFkYXRhX2hhc2g9YXJjNC5EeW5hbWljQnl0ZXMoYXNzZXQubWV0YWRhdGFfaGFzaCksCiAgICAvLyAgICAgbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMTU1IC8vIDE1NQogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDA5YgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICBmcmFtZV9kaWcgNgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgOQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMTAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDExCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyA4CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDcKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X21lcmdlQDYKCl9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIwCiAgICAvLyBlbHNlIFVJbnQ2NCgwKQogICAgaW50Y18xIC8vIDAKICAgIGIgX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9mdWxsKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfZnVsbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzctNDM4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X2Z1bGwoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRGdWxsOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDM5CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X2Z1bGwoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF9mdWxsCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX2Z1bGwoYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c19mdWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MS00NDIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX2Z1bGwoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDMKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAwCgpnZXRfYXNzZXRzX2Z1bGxfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfZnVsbF9hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDQKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfZnVsbChhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9mdWxsCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19mdWxsX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c19mdWxsX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"},"byteCode":{"approval":"CiAGAQACCP////8PgICAgBAmCwQVH3x1C0VSUjpOT0VYSVNUAgAAAAVhZG1pbgpFUlI6RVhJU1RTAgACCkVSUjpVTkFVVEgIAAAAAAAAAAALRVJSOk5PRU1QVFkCAAExGEAABScEMQBnMRtBAoOCGASPDX2OBHwbMvYEF+aRrgQz0P/cBHJWFucE+sHPGwS0xQufBKLdIkcEo33qEQRo8Y76BMLtdD8Epn8DwgSq7gxhBLbDn2gEY1vjYgRwk7ENBOG7lfwEVUC4CgSKQS+TBG8XzdUEekzkuQQ2bFGvBNXTutMEA7qY2zYaAI4YAcIBqgGYAYIBcwFbAUMBLQEVAP0A5wDUAMAAsQCdAI4AegBrAFcASAA0ACUAEQACI0MxGRREMRhENhoBiAupIkMxGRREMRhENhoBF4gLkChMULAiQzEZFEQxGEQ2GgGICkoiQzEZFEQxGEQ2GgEXiAoxKExQsCJDMRkURDEYRDYaAYgJYSJDMRkURDEYRDYaAReICUgoTFCwIkMxGRREMRhENhoBiAjMIkMxGRREMRhENhoBF4gIsyhMULAiQzEZFEQxGEQ2GgGICAwiQzEZFEQxGEQ2GgEXiAfzKExQsCJDMRkURDEYRDYaAYgHcSJDMRkURDEYRDYaAReIB1goTFCwIkMxGRREMRhENhoBiAa+KExQsCJDMRkURDEYRDYaARfAMIgGkihMULAiQzEZFEQxGEQ2GgFXAgA2GgIXwDCIBaYiQzEZFEQxGEQ2GgFXAgA2GgIXwDCIBMciQzEZFEQxGEQ2GgEXwByIBKMoTFCwIkMxGRREMRhENhoBF8AcNhoCVwIAiAONIkMxGRREMRhENhoBF8AcNhoCVwIAiAL8IkMxGRREMRhENhoBiAIlIkMxGRREMRhENhoBVwIAiAIAKExQsCJDMRkURDEYRDYaAVcCAIgBwyJDMRkURDEYRDYaAVcCADYaAlcCAIgBWiJDMRkURDEYRDYaARfAHIgBPCJDMRmNBgAT/hz+HP4cAAsAA0L+GTEYRIgBDSJDMRhEiAEBIkMxGBREIkOKAwGL/SNZSYv/CEwkCyQISwEWVwYCTgKL/SRLAlKL/yQLr1CL/RWL/U8DTwJSUIv+UEwkC0kjTIsDiwIMQQAjiwRJFlcGAosBiwNJTgRPAl1JjAFLAVkkCAiMBCQIjANC/9WLAIsBUIwAiYoEAStJi/4kC4v8JAsjiwSLAwxBAByL/YsESU4CWYsCCBZXBgKLAUxQjAEkCIwEQv/ci/0VjAAjjASLBIsCDEEAHIv/iwRJTgJZiwAIFlcGAosBTFCMASQIjARC/9yL/Iv+CBZXBgKLAVCL/YsDiwBSUIv/FYv/iwJPAlJQjACJigEBi/8VFlcGAov/UImIAAWJiAABiTEAIycEZUQSQAAEJwewAImKAQCI/+onBIv/Z4mKAgCI/96L/r1FAUEABCcFsACL/hUkEkAADoAKRVJSOkxFTkdUSLAAi/8VFlcGAov/UIASABIAAAAAAAAAAAAAAAAAAAAATFCL/rxIi/5Mv4mKAQCI/42L/71FAUAAAymwAIv/vkRXAggnCKhAAAQnCbAAi/+8SImKAQGL/71FAUAAAymwAIv/vkSJigEAi/8jWSOLAYsADEEAIov/VwIAiwFJTgIkC0sBTFlKWSQIWFcCAL5EsCIIjAFC/9aJigEAMQAjJwRlRBJBAAGJi/+IAAGJigEAMQCL/4gAHEkhBRNBABGLACEEE0EACSJAAAQnB7AAiSNC//SKAgEjK0mL/r1FAUAABSEFjACJi/6+TElOAowARCNZjAEjjAKLAosBDEEAKYsAVwIAiwIkC0sBTFlKWSQIWFcCAIv/EkEABYsCjACJiwIiCIwCQv/PIQSMAImKAgCL/4j/Y4v/vUUBQAADKbAAi/69RQFBAEGL/ov/iP+EIQQSQAAEJwWwAIv+vkSL/xUWVwYCi/9QIoj9Uov+vEiL/ky/i/++REmBClsiCBZcCov/vEiL/0y/iYv/FRZXBgKL/1AnBkxQJwpMUIv+vEiL/ky/Qv/NigIAI0cEK0cCi/+I/uSL/71FAUAAAymwAIv+vUUBQAADKbAAi/6L/4j/AkmMByEEE0EAwosHIQUTQQC6IkAAAymwAIv/vkxJTgKMAERXCgiACAAAAAAAAAABpUAAC4sAVwIIJwioQQCJIkAABCcJsACLAEmBClsiCRZcCov/vEiL/0y/i/6+RCNZIhJBAAWL/rxIiSqMAov+vkxJTgKMAUQjWYwFI4wGiwaLBQxBADiLAVcCAIsGSU4CJAtLAUxZSlkkCFiMBIsHE4sCjANBAAqLAosEIoj8PowDiwOMAosGIgiMBkL/wIv+vEiL/osCv4kjQv90I0L/Q4oBAYv/vUUBQQAFi/++RIkqiYoCACNJK0mL/r1FAUAAAymwAIv+iP3ki/8WSYwBvUUBQQCIiwG9RQFAADkhBSEEEkAABCcFsACLAUm+RIv+FRZXBgKL/lAiiPvBSwG8SL+L/r5ESSRbIggWXAKL/rxIi/5Mv4mLAb5MSU4CjABEI1mMAiOMA4sDiwIMQQApiwBXAgCLAyQLSwFMWUpZJAhYVwIAi/4SQQAFiwNC/5CLAyIIjANC/88hBEL/gov+FRZXBgKL/lAnBkxQJwpMUIsBSbxITL9C/4iKAgAjRwMrRwKL/r1FAUAAAymwAIv+iP0bI4wFi/8WSYwDvkQjWSISQQBHiwO+RElXAgBMI1lESSNZSlkkCFhXAgCL/hJBACSLA7xIIowFiwVAAAMpsACL/r5ESSRbIgkWXAKL/rxIi/5Mv4kjjAVC/90qjAGLA75MSU4CjABEI1mMBCOMBosGiwQMQQA3iwBXAgCLBiQLSwFMWUpZJAhYSYwCVwIAi/4TQQATiwGLAiKI+pCMAYsGIgiMBkL/xyKMBUL/8YsDSbxIiwG/Qv9/igEBi/8WSb1FAUEABosAvkRMiSpMiYoBASMqi/8jWSOLA4sCDEEATov/VwIAiwMlC1sWSYwAvUUBQQAiiwC+RCcGTFCLAUkjWUxXAgAiTwOI+oyMAYsDIgiMA0L/wosBSSNZTFcCACKABAACAACI+m6MAUL/34sBjACJigEBi/9xA0SI+tmL/3EBRBZJkyUORFcHAYACAANMUExQiYoBAYv/iP/WiYoBAIv/I1kjiwGLAAxBABiL/1cCAIsBSU4CJQtbiP+1sCIIjAFC/+CJigEBi/9xA0SI+oWL/3EBRBZJkyUORFcHAYv/Fkm9RQFBAB+LAr5EiwBJFYEFCIACAAWLAVBMFlcGAlBMUExQjACJKkL/4YoBAYv/iP+yiYoBAIv/I1kjiwGLAAxBABiL/1cCAIsBSU4CJQtbiP+RsCIIjAFC/+CJigEBi/9xBESI+g2L/3EDRIj6BYv/cQVEiPn9i/8WSb1FAUEAQosDvkSLAEkVJQhJFlcGAoACAAhMUIsBSU4DFU8CCEkWVwYCTwJMUIsCSU4DFU8CCBZXBgJQTwNQTwJQTFBMUIwAiSpC/76KAQGL/4j/jYmKAQCL/yNZI4sBiwAMQQAYi/9XAgCLAUlOAiULW4j/bLAiCIwBQv/giYoBAYv/cQREiPlwi/9xA0SI+WiL/3EFRIj5YEsCFYEGCEkWVwYCgAIABkxQSwMVTwIIFlcGAlBPA1BPAlBMUImKAQGL/4j/uImKAQCL/yNZI4sBiwAMQQAYi/9XAgCLAUlOAiULW4j/l7AiCIwBQv/giYoBAYv/cQREiPj+i/9xA0SI+PaL/3EBRBZJkyUORFcHAYv/cQBEFov/cQlEMgMTgAEAI08CVIv/cQpEMgMTgAEAI08CVIv/Fkm9RQFBAEGLBr5EiwBJFYEQCEkWVwYCgAIAEExQiwFJTgMVTwIITIsCUIsDUIsEUIsFI1OBaUxUTBZXBgJQTwJQTFBMUIwAiSpC/7+KAQGL/4j/ZImKAQCL/yNZI4sBiwAMQQAYi/9XAgCLAUlOAiULW4j/Q7AiCIwBQv/giYoBASNHC4v/cQhMSU8CRIv/cABFAUEA7osMi/9wAESL/3EERIj4HIwBi/9xA0SI+BKMAov/cQVEiPgIjAOL/3EARBaMBov/cQFEFkmTJQ5EVwcBjAWL/3EHTIwJRIv/cQlMjApEi/9xCkyMC0SL/3EITIwIRIv/cQZESRUWVwYCTFCMABaMB4v/FkmMBL1FAUEAb4sEvkSLAUkVgZsBCEkWVwYCgAIAm0xQiwJJTgMVTwIISRZXBgJPAkxQiwNJTgMVTwIITIsGUIsFUIsJUIsKUIsLUIsIUEsBFlcGAlCLAElOAxVPAghMiwdQTBZXBgJQTwRQTwNQTwJQTFBMUIwAiSpC/5EjQv8VigEBi/+I/u6JigEAi/8jWSOLAYsADEEAGIv/VwIAiwFJTgIlC1uI/s2wIgiMAUL/4Ik=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":6,"patch":1}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data @@ -65,6 +65,103 @@ export type Expand = T extends (...args: infer A) => infer R // Type definitions for ARC-56 structs +export type AssetFull = { + name: string, + unitName: string, + url: string, + total: bigint, + decimals: number, + manager: string, + freeze: string, + clawback: string, + reserve: string, + metadataHash: Uint8Array, + reserveBalance: bigint, + labels: string[] +} + + +/** + * Converts the ABI tuple representation of a AssetFull to the struct representation + */ +export function AssetFullFromTuple(abiTuple: [string, string, string, bigint, number, string, string, string, string, Uint8Array, bigint, string[]]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetFull, APP_SPEC.structs) as AssetFull +} + +export type AssetMicro = { + unitName: string, + decimals: number +} + + +/** + * Converts the ABI tuple representation of a AssetMicro to the struct representation + */ +export function AssetMicroFromTuple(abiTuple: [string, number]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetMicro, APP_SPEC.structs) as AssetMicro +} + +export type AssetMicroLabels = { + unitName: string, + decimals: number, + labels: string[] +} + + +/** + * Converts the ABI tuple representation of a AssetMicroLabels to the struct representation + */ +export function AssetMicroLabelsFromTuple(abiTuple: [string, number, string[]]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetMicroLabels, APP_SPEC.structs) as AssetMicroLabels +} + +export type AssetSmall = { + name: string, + unitName: string, + decimals: number, + total: bigint, + hasFreeze: boolean, + hasClawback: boolean, + labels: string[] +} + + +/** + * Converts the ABI tuple representation of a AssetSmall to the struct representation + */ +export function AssetSmallFromTuple(abiTuple: [string, string, number, bigint, boolean, boolean, string[]]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetSmall, APP_SPEC.structs) as AssetSmall +} + +export type AssetText = { + name: string, + unitName: string, + url: string, + labels: string[] +} + + +/** + * Converts the ABI tuple representation of a AssetText to the struct representation + */ +export function AssetTextFromTuple(abiTuple: [string, string, string, string[]]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetText, APP_SPEC.structs) as AssetText +} + +export type AssetTextLabels = { + name: string, + unitName: string, + url: string +} + + +/** + * Converts the ABI tuple representation of a AssetTextLabels to the struct representation + */ +export function AssetTextLabelsFromTuple(abiTuple: [string, string, string]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AssetTextLabels, APP_SPEC.structs) as AssetTextLabels +} + export type LabelDescriptor = { name: string, numAssets: bigint, @@ -100,6 +197,9 @@ export type AssetLabelingArgs = { 'get_label(string)(string,uint64,uint64)': { id: string } + 'log_labels(string[])void': { + ids: string[] + } 'add_operator_to_label(account,string)void': { operator: Uint8Array | string label: string @@ -122,6 +222,45 @@ export type AssetLabelingArgs = { 'get_asset_labels(asset)string[]': { asset: bigint } + 'get_assets_labels(uint64[])string[][]': { + assets: bigint[] | number[] + } + 'get_asset_micro(uint64)(string,uint8)': { + asset: bigint | number + } + 'get_assets_micro(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_micro_labels(uint64)(string,uint8,string[])': { + asset: bigint | number + } + 'get_assets_micro_labels(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_text(uint64)(string,string,string,string[])': { + asset: bigint | number + } + 'get_assets_text(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_text_labels(uint64)(string,string,string)': { + asset: bigint | number + } + 'get_assets_text_labels(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])': { + asset: bigint | number + } + 'get_assets_small(uint64[])void': { + assets: bigint[] | number[] + } + 'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])': { + asset: bigint | number + } + 'get_assets_full(uint64[])void': { + assets: bigint[] | number[] + } } /** * The tuple representation of the arguments for each method @@ -131,12 +270,26 @@ export type AssetLabelingArgs = { 'add_label(string,string)void': [id: string, name: string] 'remove_label(string)void': [id: string] 'get_label(string)(string,uint64,uint64)': [id: string] + 'log_labels(string[])void': [ids: string[]] 'add_operator_to_label(account,string)void': [operator: Uint8Array | string, label: string] 'remove_operator_from_label(account,string)void': [operator: Uint8Array | string, label: string] 'get_operator_labels(account)string[]': [operator: Uint8Array | string] 'add_label_to_asset(string,asset)void': [label: string, asset: bigint] 'remove_label_from_asset(string,asset)void': [label: string, asset: bigint] 'get_asset_labels(asset)string[]': [asset: bigint] + 'get_assets_labels(uint64[])string[][]': [assets: bigint[] | number[]] + 'get_asset_micro(uint64)(string,uint8)': [asset: bigint | number] + 'get_assets_micro(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_micro_labels(uint64)(string,uint8,string[])': [asset: bigint | number] + 'get_assets_micro_labels(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_text(uint64)(string,string,string,string[])': [asset: bigint | number] + 'get_assets_text(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_text_labels(uint64)(string,string,string)': [asset: bigint | number] + 'get_assets_text_labels(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])': [asset: bigint | number] + 'get_assets_small(uint64[])void': [assets: bigint[] | number[]] + 'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])': [asset: bigint | number] + 'get_assets_full(uint64[])void': [assets: bigint[] | number[]] } } @@ -148,12 +301,26 @@ export type AssetLabelingReturns = { 'add_label(string,string)void': void 'remove_label(string)void': void 'get_label(string)(string,uint64,uint64)': LabelDescriptor + 'log_labels(string[])void': void 'add_operator_to_label(account,string)void': void 'remove_operator_from_label(account,string)void': void 'get_operator_labels(account)string[]': string[] 'add_label_to_asset(string,asset)void': void 'remove_label_from_asset(string,asset)void': void 'get_asset_labels(asset)string[]': string[] + 'get_assets_labels(uint64[])string[][]': string[][] + 'get_asset_micro(uint64)(string,uint8)': AssetMicro + 'get_assets_micro(uint64[])void': void + 'get_asset_micro_labels(uint64)(string,uint8,string[])': AssetMicroLabels + 'get_assets_micro_labels(uint64[])void': void + 'get_asset_text(uint64)(string,string,string,string[])': AssetText + 'get_assets_text(uint64[])void': void + 'get_asset_text_labels(uint64)(string,string,string)': AssetTextLabels + 'get_assets_text_labels(uint64[])void': void + 'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])': AssetSmall + 'get_assets_small(uint64[])void': void + 'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])': AssetFull + 'get_assets_full(uint64[])void': void } /** @@ -184,6 +351,11 @@ export type AssetLabelingTypes = { argsTuple: AssetLabelingArgs['tuple']['get_label(string)(string,uint64,uint64)'] returns: AssetLabelingReturns['get_label(string)(string,uint64,uint64)'] }> + & Record<'log_labels(string[])void' | 'log_labels', { + argsObj: AssetLabelingArgs['obj']['log_labels(string[])void'] + argsTuple: AssetLabelingArgs['tuple']['log_labels(string[])void'] + returns: AssetLabelingReturns['log_labels(string[])void'] + }> & Record<'add_operator_to_label(account,string)void' | 'add_operator_to_label', { argsObj: AssetLabelingArgs['obj']['add_operator_to_label(account,string)void'] argsTuple: AssetLabelingArgs['tuple']['add_operator_to_label(account,string)void'] @@ -214,6 +386,71 @@ export type AssetLabelingTypes = { argsTuple: AssetLabelingArgs['tuple']['get_asset_labels(asset)string[]'] returns: AssetLabelingReturns['get_asset_labels(asset)string[]'] }> + & Record<'get_assets_labels(uint64[])string[][]' | 'get_assets_labels', { + argsObj: AssetLabelingArgs['obj']['get_assets_labels(uint64[])string[][]'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_labels(uint64[])string[][]'] + returns: AssetLabelingReturns['get_assets_labels(uint64[])string[][]'] + }> + & Record<'get_asset_micro(uint64)(string,uint8)' | 'get_asset_micro', { + argsObj: AssetLabelingArgs['obj']['get_asset_micro(uint64)(string,uint8)'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_micro(uint64)(string,uint8)'] + returns: AssetLabelingReturns['get_asset_micro(uint64)(string,uint8)'] + }> + & Record<'get_assets_micro(uint64[])void' | 'get_assets_micro', { + argsObj: AssetLabelingArgs['obj']['get_assets_micro(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_micro(uint64[])void'] + returns: AssetLabelingReturns['get_assets_micro(uint64[])void'] + }> + & Record<'get_asset_micro_labels(uint64)(string,uint8,string[])' | 'get_asset_micro_labels', { + argsObj: AssetLabelingArgs['obj']['get_asset_micro_labels(uint64)(string,uint8,string[])'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_micro_labels(uint64)(string,uint8,string[])'] + returns: AssetLabelingReturns['get_asset_micro_labels(uint64)(string,uint8,string[])'] + }> + & Record<'get_assets_micro_labels(uint64[])void' | 'get_assets_micro_labels', { + argsObj: AssetLabelingArgs['obj']['get_assets_micro_labels(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_micro_labels(uint64[])void'] + returns: AssetLabelingReturns['get_assets_micro_labels(uint64[])void'] + }> + & Record<'get_asset_text(uint64)(string,string,string,string[])' | 'get_asset_text', { + argsObj: AssetLabelingArgs['obj']['get_asset_text(uint64)(string,string,string,string[])'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_text(uint64)(string,string,string,string[])'] + returns: AssetLabelingReturns['get_asset_text(uint64)(string,string,string,string[])'] + }> + & Record<'get_assets_text(uint64[])void' | 'get_assets_text', { + argsObj: AssetLabelingArgs['obj']['get_assets_text(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_text(uint64[])void'] + returns: AssetLabelingReturns['get_assets_text(uint64[])void'] + }> + & Record<'get_asset_text_labels(uint64)(string,string,string)' | 'get_asset_text_labels', { + argsObj: AssetLabelingArgs['obj']['get_asset_text_labels(uint64)(string,string,string)'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_text_labels(uint64)(string,string,string)'] + returns: AssetLabelingReturns['get_asset_text_labels(uint64)(string,string,string)'] + }> + & Record<'get_assets_text_labels(uint64[])void' | 'get_assets_text_labels', { + argsObj: AssetLabelingArgs['obj']['get_assets_text_labels(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_text_labels(uint64[])void'] + returns: AssetLabelingReturns['get_assets_text_labels(uint64[])void'] + }> + & Record<'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])' | 'get_asset_small', { + argsObj: AssetLabelingArgs['obj']['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] + returns: AssetLabelingReturns['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] + }> + & Record<'get_assets_small(uint64[])void' | 'get_assets_small', { + argsObj: AssetLabelingArgs['obj']['get_assets_small(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_small(uint64[])void'] + returns: AssetLabelingReturns['get_assets_small(uint64[])void'] + }> + & Record<'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])' | 'get_asset_full', { + argsObj: AssetLabelingArgs['obj']['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] + argsTuple: AssetLabelingArgs['tuple']['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] + returns: AssetLabelingReturns['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] + }> + & Record<'get_assets_full(uint64[])void' | 'get_assets_full', { + argsObj: AssetLabelingArgs['obj']['get_assets_full(uint64[])void'] + argsTuple: AssetLabelingArgs['tuple']['get_assets_full(uint64[])void'] + returns: AssetLabelingReturns['get_assets_full(uint64[])void'] + }> /** * Defines the shape of the state of the application. */ @@ -278,6 +515,16 @@ export type BoxKeysState = AssetLabelingTypes['state']['box']['keys'] */ export type AssetLabelingCreateCallParams = | Expand +/** + * Defines supported update method params for this smart contract + */ +export type AssetLabelingUpdateCallParams = + | Expand & {method?: never} +/** + * Defines supported delete method params for this smart contract + */ +export type AssetLabelingDeleteCallParams = + | Expand & {method?: never} /** * Defines arguments required for the deploy method. */ @@ -286,6 +533,14 @@ export type AssetLabelingDeployParams = Expand @@ -345,6 +600,19 @@ export abstract class AssetLabelingParamsFactory { args: Array.isArray(params.args) ? params.args : [params.args.id], } } + /** + * Constructs a no op call for the log_labels(string[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static logLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'log_labels(string[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.ids], + } + } /** * Constructs a no op call for the add_operator_to_label(account,string)void ABI method * @@ -423,6 +691,175 @@ export abstract class AssetLabelingParamsFactory { args: Array.isArray(params.args) ? params.args : [params.args.asset], } } + /** + * Constructs a no op call for the get_assets_labels(uint64[])string[][] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_labels(uint64[])string[][]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_micro(uint64)(string,uint8) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetMicro(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_micro(uint64)(string,uint8)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_micro(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsMicro(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_micro(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_micro_labels(uint64)(string,uint8,string[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetMicroLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_micro_labels(uint64)(string,uint8,string[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_micro_labels(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsMicroLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_micro_labels(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_text(uint64)(string,string,string,string[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetText(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_text(uint64)(string,string,string,string[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_text(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsText(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_text(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_text_labels(uint64)(string,string,string) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetTextLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_text_labels(uint64)(string,string,string)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_text_labels(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsTextLabels(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_text_labels(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetSmall(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_small(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsSmall(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_small(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } + /** + * Constructs a no op call for the get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetFull(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])' as const, + args: Array.isArray(params.args) ? params.args : [params.args.asset], + } + } + /** + * Constructs a no op call for the get_assets_full(uint64[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getAssetsFull(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get_assets_full(uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.assets], + } + } } /** @@ -520,6 +957,36 @@ export class AssetLabelingFactory { }, }, + /** + * Gets available deployUpdate methods + */ + deployUpdate: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a deployUpdate call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.deployUpdate(params) + }, + }, + + /** + * Gets available deployDelete methods + */ + deployDelete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a deployDelete call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.deployDelete(params) + }, + }, + } /** @@ -653,6 +1120,36 @@ export class AssetLabelingClient { * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. */ readonly params = { + /** + * Gets available update methods + */ + update: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The update result + */ + bare: (params?: Expand) => { + return this.appClient.params.bare.update(params) + }, + }, + + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The delete result + */ + bare: (params?: Expand) => { + return this.appClient.params.bare.delete(params) + }, + }, + /** * Makes a clear_state call to an existing instance of the AssetLabeling smart contract. * @@ -706,17 +1203,29 @@ export class AssetLabelingClient { }, /** - * Makes a call to the AssetLabeling smart contract using the `add_operator_to_label(account,string)void` ABI method. + * Makes a call to the AssetLabeling smart contract using the `log_labels(string[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call * @returns The call params */ - addOperatorToLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - return this.appClient.params.call(AssetLabelingParamsFactory.addOperatorToLabel(params)) + logLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.logLabels(params)) }, /** - * Makes a call to the AssetLabeling smart contract using the `remove_operator_from_label(account,string)void` ABI method. + * Makes a call to the AssetLabeling smart contract using the `add_operator_to_label(account,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + addOperatorToLabel: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.addOperatorToLabel(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_operator_from_label(account,string)void` ABI method. * * @param params The params for the smart contract call * @returns The call params @@ -769,12 +1278,198 @@ export class AssetLabelingClient { return this.appClient.params.call(AssetLabelingParamsFactory.getAssetLabels(params)) }, + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_labels(uint64[])string[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro(uint64)(string,uint8)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetMicro: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetMicro(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsMicro: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsMicro(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro_labels(uint64)(string,uint8,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetMicroLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetMicroLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsMicroLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsMicroLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text(uint64)(string,string,string,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetText: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetText(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsText: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsText(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text_labels(uint64)(string,string,string)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetTextLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetTextLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsTextLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsTextLabels(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetSmall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetSmall(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_small(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsSmall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsSmall(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetFull: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetFull(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_full(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getAssetsFull: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AssetLabelingParamsFactory.getAssetsFull(params)) + }, + } /** * Create transactions for the current app */ readonly createTransaction = { + /** + * Gets available update methods + */ + update: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The update result + */ + bare: (params?: Expand) => { + return this.appClient.createTransaction.bare.update(params) + }, + }, + + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The delete result + */ + bare: (params?: Expand) => { + return this.appClient.createTransaction.bare.delete(params) + }, + }, + /** * Makes a clear_state call to an existing instance of the AssetLabeling smart contract. * @@ -827,6 +1522,18 @@ export class AssetLabelingClient { return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getLabel(params)) }, + /** + * Makes a call to the AssetLabeling smart contract using the `log_labels(string[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + logLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.logLabels(params)) + }, + /** * Makes a call to the AssetLabeling smart contract using the `add_operator_to_label(account,string)void` ABI method. * @@ -891,187 +1598,737 @@ export class AssetLabelingClient { return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetLabels(params)) }, - } + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_labels(uint64[])string[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsLabels(params)) + }, - /** - * Send calls to the current app - */ - readonly send = { /** - * Makes a clear_state call to an existing instance of the AssetLabeling smart contract. + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro(uint64)(string,uint8)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * @param params The params for the bare (raw) call - * @returns The clearState result + * @param params The params for the smart contract call + * @returns The call transaction */ - clearState: (params?: Expand) => { - return this.appClient.send.bare.clearState(params) + getAssetMicro: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetMicro(params)) }, /** - * Makes a call to the AssetLabeling smart contract using the `change_admin(account)void` ABI method. + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call - * @returns The call result + * @returns The call transaction */ - changeAdmin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.changeAdmin(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['change_admin(account)void'])} + getAssetsMicro: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsMicro(params)) }, /** - * Makes a call to the AssetLabeling smart contract using the `add_label(string,string)void` ABI method. + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro_labels(uint64)(string,uint8,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call - * @returns The call result + * @returns The call transaction */ - addLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.addLabel(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['add_label(string,string)void'])} + getAssetMicroLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetMicroLabels(params)) }, /** - * Makes a call to the AssetLabeling smart contract using the `remove_label(string)void` ABI method. + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call - * @returns The call result + * @returns The call transaction */ - removeLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.removeLabel(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['remove_label(string)void'])} + getAssetsMicroLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsMicroLabels(params)) }, /** - * Makes a call to the AssetLabeling smart contract using the `get_label(string)(string,uint64,uint64)` ABI method. + * Makes a call to the AssetLabeling smart contract using the `get_asset_text(uint64)(string,string,string,string[])` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call - * @returns The call result + * @returns The call transaction */ - getLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.getLabel(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_label(string)(string,uint64,uint64)'])} + getAssetText: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetText(params)) }, /** - * Makes a call to the AssetLabeling smart contract using the `add_operator_to_label(account,string)void` ABI method. + * Makes a call to the AssetLabeling smart contract using the `get_assets_text(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call - * @returns The call result + * @returns The call transaction */ - addOperatorToLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.addOperatorToLabel(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['add_operator_to_label(account,string)void'])} + getAssetsText: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsText(params)) }, /** - * Makes a call to the AssetLabeling smart contract using the `remove_operator_from_label(account,string)void` ABI method. + * Makes a call to the AssetLabeling smart contract using the `get_asset_text_labels(uint64)(string,string,string)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call - * @returns The call result + * @returns The call transaction */ - removeOperatorFromLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.removeOperatorFromLabel(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['remove_operator_from_label(account,string)void'])} + getAssetTextLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetTextLabels(params)) }, /** - * Makes a call to the AssetLabeling smart contract using the `get_operator_labels(account)string[]` ABI method. + * Makes a call to the AssetLabeling smart contract using the `get_assets_text_labels(uint64[])void` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call - * @returns The call result + * @returns The call transaction */ - getOperatorLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.getOperatorLabels(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_operator_labels(account)string[]'])} + getAssetsTextLabels: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsTextLabels(params)) }, /** - * Makes a call to the AssetLabeling smart contract using the `add_label_to_asset(string,asset)void` ABI method. + * Makes a call to the AssetLabeling smart contract using the `get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call - * @returns The call result + * @returns The call transaction */ - addLabelToAsset: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.addLabelToAsset(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['add_label_to_asset(string,asset)void'])} + getAssetSmall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetSmall(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_small(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsSmall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsSmall(params)) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetFull: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetFull(params)) }, - /** - * Makes a call to the AssetLabeling smart contract using the `remove_label_from_asset(string,asset)void` ABI method. - * - * @param params The params for the smart contract call - * @returns The call result - */ - removeLabelFromAsset: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.removeLabelFromAsset(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['remove_label_from_asset(string,asset)void'])} - }, + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_full(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getAssetsFull: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AssetLabelingParamsFactory.getAssetsFull(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available update methods + */ + update: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The update result + */ + bare: (params?: Expand) => { + return this.appClient.send.bare.update(params) + }, + }, + + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The delete result + */ + bare: (params?: Expand) => { + return this.appClient.send.bare.delete(params) + }, + }, + + /** + * Makes a clear_state call to an existing instance of the AssetLabeling smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `change_admin(account)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + changeAdmin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.changeAdmin(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['change_admin(account)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_label(string,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + addLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.addLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['add_label(string,string)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_label(string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + removeLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.removeLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['remove_label(string)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_label(string)(string,uint64,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_label(string)(string,uint64,uint64)'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `log_labels(string[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + logLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.logLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['log_labels(string[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_operator_to_label(account,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + addOperatorToLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.addOperatorToLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['add_operator_to_label(account,string)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_operator_from_label(account,string)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + removeOperatorFromLabel: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.removeOperatorFromLabel(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['remove_operator_from_label(account,string)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_operator_labels(account)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getOperatorLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getOperatorLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_operator_labels(account)string[]'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `add_label_to_asset(string,asset)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + addLabelToAsset: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.addLabelToAsset(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['add_label_to_asset(string,asset)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `remove_label_from_asset(string,asset)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + removeLabelFromAsset: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.removeLabelFromAsset(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['remove_label_from_asset(string,asset)void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_labels(asset)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_labels(asset)string[]'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_labels(uint64[])string[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_labels(uint64[])string[][]'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro(uint64)(string,uint8)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetMicro: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetMicro(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_micro(uint64)(string,uint8)'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsMicro: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsMicro(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_micro(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_micro_labels(uint64)(string,uint8,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetMicroLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetMicroLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_micro_labels(uint64)(string,uint8,string[])'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_micro_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsMicroLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsMicroLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_micro_labels(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text(uint64)(string,string,string,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetText: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetText(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_text(uint64)(string,string,string,string[])'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsText: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsText(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_text(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_text_labels(uint64)(string,string,string)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetTextLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetTextLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_text_labels(uint64)(string,string,string)'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_text_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsTextLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsTextLabels(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_text_labels(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetSmall: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetSmall(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_small(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsSmall: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsSmall(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_small(uint64[])void'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetFull: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetFull(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'])} + }, + + /** + * Makes a call to the AssetLabeling smart contract using the `get_assets_full(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getAssetsFull: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsFull(params)) + return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_assets_full(uint64[])void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new AssetLabelingClient(this.appClient.clone(params)) + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_label(string)(string,uint64,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getLabel(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getLabel(params)) + return result.return as unknown as AssetLabelingReturns['get_label(string)(string,uint64,uint64)'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `log_labels(string[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async logLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.logLabels(params)) + return result.return as unknown as AssetLabelingReturns['log_labels(string[])void'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_operator_labels(account)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getOperatorLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getOperatorLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_operator_labels(account)string[]'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_labels(asset)string[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_labels(asset)string[]'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_labels(uint64[])string[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_labels(uint64[])string[][]'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_micro(uint64)(string,uint8)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetMicro(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetMicro(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_micro(uint64)(string,uint8)'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_micro(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsMicro(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsMicro(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_micro(uint64[])void'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_micro_labels(uint64)(string,uint8,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetMicroLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetMicroLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_micro_labels(uint64)(string,uint8,string[])'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_micro_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsMicroLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsMicroLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_micro_labels(uint64[])void'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_text(uint64)(string,string,string,string[])` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetText(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetText(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_text(uint64)(string,string,string,string[])'] + } - /** - * Makes a call to the AssetLabeling smart contract using the `get_asset_labels(asset)string[]` ABI method. - * - * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. - * - * @param params The params for the smart contract call - * @returns The call result - */ - getAssetLabels: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetLabels(params)) - return {...result, return: result.return as unknown as (undefined | AssetLabelingReturns['get_asset_labels(asset)string[]'])} - }, + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_text(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsText(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsText(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_text(uint64[])void'] + } + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_text_labels(uint64)(string,string,string)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetTextLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetTextLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_text_labels(uint64)(string,string,string)'] } /** - * Clone this app client with different params + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_text_labels(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * - * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. - * @returns A new app client with the altered params + * @param params The params for the smart contract call + * @returns The call result */ - public clone(params: CloneAppClientParams) { - return new AssetLabelingClient(this.appClient.clone(params)) + async getAssetsTextLabels(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsTextLabels(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_text_labels(uint64[])void'] } /** - * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_label(string)(string,uint64,uint64)` ABI method. + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call * @returns The call result */ - async getLabel(params: CallParams) { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.getLabel(params)) - return result.return as unknown as AssetLabelingReturns['get_label(string)(string,uint64,uint64)'] + async getAssetSmall(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetSmall(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] } /** - * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_operator_labels(account)string[]` ABI method. + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_small(uint64[])void` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call * @returns The call result */ - async getOperatorLabels(params: CallParams) { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.getOperatorLabels(params)) - return result.return as unknown as AssetLabelingReturns['get_operator_labels(account)string[]'] + async getAssetsSmall(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsSmall(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_small(uint64[])void'] } /** - * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_labels(asset)string[]` ABI method. + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])` ABI method. * * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. * * @param params The params for the smart contract call * @returns The call result */ - async getAssetLabels(params: CallParams) { - const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetLabels(params)) - return result.return as unknown as AssetLabelingReturns['get_asset_labels(asset)string[]'] + async getAssetFull(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetFull(params)) + return result.return as unknown as AssetLabelingReturns['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] + } + + /** + * Makes a readonly (simulated) call to the AssetLabeling smart contract using the `get_assets_full(uint64[])void` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getAssetsFull(params: CallParams) { + const result = await this.appClient.send.call(AssetLabelingParamsFactory.getAssetsFull(params)) + return result.return as unknown as AssetLabelingReturns['get_assets_full(uint64[])void'] } /** @@ -1188,6 +2445,14 @@ export class AssetLabelingClient { resultMappers.push((v) => client.decodeReturnValue('get_label(string)(string,uint64,uint64)', v)) return this }, + /** + * Add a log_labels(string[])void method call against the AssetLabeling contract + */ + logLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.logLabels(params))) + resultMappers.push(undefined) + return this + }, /** * Add a add_operator_to_label(account,string)void method call against the AssetLabeling contract */ @@ -1236,6 +2501,126 @@ export class AssetLabelingClient { resultMappers.push((v) => client.decodeReturnValue('get_asset_labels(asset)string[]', v)) return this }, + /** + * Add a get_assets_labels(uint64[])string[][] method call against the AssetLabeling contract + */ + getAssetsLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsLabels(params))) + resultMappers.push((v) => client.decodeReturnValue('get_assets_labels(uint64[])string[][]', v)) + return this + }, + /** + * Add a get_asset_micro(uint64)(string,uint8) method call against the AssetLabeling contract + */ + getAssetMicro(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetMicro(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_micro(uint64)(string,uint8)', v)) + return this + }, + /** + * Add a get_assets_micro(uint64[])void method call against the AssetLabeling contract + */ + getAssetsMicro(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsMicro(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_micro_labels(uint64)(string,uint8,string[]) method call against the AssetLabeling contract + */ + getAssetMicroLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetMicroLabels(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_micro_labels(uint64)(string,uint8,string[])', v)) + return this + }, + /** + * Add a get_assets_micro_labels(uint64[])void method call against the AssetLabeling contract + */ + getAssetsMicroLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsMicroLabels(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_text(uint64)(string,string,string,string[]) method call against the AssetLabeling contract + */ + getAssetText(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetText(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_text(uint64)(string,string,string,string[])', v)) + return this + }, + /** + * Add a get_assets_text(uint64[])void method call against the AssetLabeling contract + */ + getAssetsText(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsText(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_text_labels(uint64)(string,string,string) method call against the AssetLabeling contract + */ + getAssetTextLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetTextLabels(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_text_labels(uint64)(string,string,string)', v)) + return this + }, + /** + * Add a get_assets_text_labels(uint64[])void method call against the AssetLabeling contract + */ + getAssetsTextLabels(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsTextLabels(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]) method call against the AssetLabeling contract + */ + getAssetSmall(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetSmall(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])', v)) + return this + }, + /** + * Add a get_assets_small(uint64[])void method call against the AssetLabeling contract + */ + getAssetsSmall(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsSmall(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]) method call against the AssetLabeling contract + */ + getAssetFull(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetFull(params))) + resultMappers.push((v) => client.decodeReturnValue('get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])', v)) + return this + }, + /** + * Add a get_assets_full(uint64[])void method call against the AssetLabeling contract + */ + getAssetsFull(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getAssetsFull(params))) + resultMappers.push(undefined) + return this + }, + get update() { + return { + bare: (params?: AppClientBareCallParams & AppClientCompilationParams ) => { + promiseChain = promiseChain.then(async () => composer.addAppUpdate(await client.params.update.bare(params))) + return this + }, + } + }, + get delete() { + return { + bare: (params?: AppClientBareCallParams ) => { + promiseChain = promiseChain.then(() => composer.addAppDelete(client.params.delete.bare(params))) + return this + }, + } + }, /** * Add a clear state call to the AssetLabeling contract */ @@ -1307,6 +2692,15 @@ export type AssetLabelingComposer = { */ getLabel(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_label(string)(string,uint64,uint64)'] | undefined]> + /** + * Calls the log_labels(string[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + logLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['log_labels(string[])void'] | undefined]> + /** * Calls the add_operator_to_label(account,string)void ABI method. * @@ -1361,6 +2755,149 @@ export type AssetLabelingComposer = { */ getAssetLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_labels(asset)string[]'] | undefined]> + /** + * Calls the get_assets_labels(uint64[])string[][] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_labels(uint64[])string[][]'] | undefined]> + + /** + * Calls the get_asset_micro(uint64)(string,uint8) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetMicro(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_micro(uint64)(string,uint8)'] | undefined]> + + /** + * Calls the get_assets_micro(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsMicro(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_micro(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_micro_labels(uint64)(string,uint8,string[]) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetMicroLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_micro_labels(uint64)(string,uint8,string[])'] | undefined]> + + /** + * Calls the get_assets_micro_labels(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsMicroLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_micro_labels(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_text(uint64)(string,string,string,string[]) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetText(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_text(uint64)(string,string,string,string[])'] | undefined]> + + /** + * Calls the get_assets_text(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsText(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_text(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_text_labels(uint64)(string,string,string) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetTextLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_text_labels(uint64)(string,string,string)'] | undefined]> + + /** + * Calls the get_assets_text_labels(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsTextLabels(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_text_labels(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[]) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetSmall(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_small(uint64)(string,string,uint8,uint64,bool,bool,string[])'] | undefined]> + + /** + * Calls the get_assets_small(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsSmall(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_small(uint64[])void'] | undefined]> + + /** + * Calls the get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[]) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetFull(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_asset_full(uint64)(string,string,string,uint64,uint8,address,address,address,address,byte[],uint64,string[])'] | undefined]> + + /** + * Calls the get_assets_full(uint64[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getAssetsFull(params?: CallParams): AssetLabelingComposer<[...TReturns, AssetLabelingReturns['get_assets_full(uint64[])void'] | undefined]> + + /** + * Gets available delete methods + */ + readonly delete: { + /** + * Deletes an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(params?: AppClientBareCallParams ): AssetLabelingComposer<[...TReturns, undefined]> + } + + /** + * Gets available update methods + */ + readonly update: { + /** + * Updates an existing instance of the AssetLabeling smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(params?: AppClientBareCallParams ): AssetLabelingComposer<[...TReturns, undefined]> + } + /** * Makes a clear_state call to an existing instance of the AssetLabeling smart contract. * diff --git a/projects/asset_labeling-contracts/smart_contracts/asset_labeling/contract.py b/projects/asset_labeling-contracts/smart_contracts/asset_labeling/contract.py index 378c506..ad91783 100644 --- a/projects/asset_labeling-contracts/smart_contracts/asset_labeling/contract.py +++ b/projects/asset_labeling-contracts/smart_contracts/asset_labeling/contract.py @@ -3,6 +3,8 @@ ARC4Contract, Asset, BoxMap, + Bytes, + Global, String, Txn, UInt64, @@ -14,12 +16,23 @@ ) from algopy.arc4 import abimethod -S = String - -LabelList = arc4.DynamicArray[arc4.String] +from .types import ( + AssetFull, + AssetMicro, + AssetMicroLabels, + AssetSmall, + AssetText, + AssetTextLabels, + LabelDescriptor, + LabelList, + S, +) -NOT_FOUND_KEY = 2**32 # magic constant for "list not found" -NOT_FOUND_VALUE = 2**32 - 1 # magic constant for "not found in list" +# constants used to return from index-finding functions. zero is a truthy return, so: +NOT_FOUND_KEY = ( + 2**32 +) # magic constant for "list not found" (e.g. box key missing entirely) +NOT_FOUND_VALUE = 2**32 - 1 # magic constant for "value not found in list" @subroutine @@ -29,19 +42,32 @@ def ensure(cond: bool, msg: String) -> None: # noqa: FBT001 op.err() -class LabelDescriptor(arc4.Struct): - name: arc4.String - num_assets: arc4.UInt64 - num_operators: arc4.UInt64 +@subroutine +def empty_list() -> LabelList: + return arc4.DynamicArray[arc4.String]() + + +@subroutine +def b2str(b: Bytes) -> arc4.String: + return arc4.String(String.from_bytes(b)) class AssetLabeling(ARC4Contract): def __init__(self) -> None: self.admin = Txn.sender self.labels = BoxMap(String, LabelDescriptor, key_prefix=b"") + # TODO does this need to be an asset? Uint64 could be better self.assets = BoxMap(Asset, LabelList, key_prefix=b"") self.operators = BoxMap(Account, LabelList, key_prefix=b"") + @arc4.baremethod(allow_actions=("UpdateApplication",)) + def update(self) -> None: + self.admin_only() + + @arc4.baremethod(allow_actions=("DeleteApplication",)) + def delete(self) -> None: + self.admin_only() + @subroutine def admin_only(self) -> None: ensure(Txn.sender == self.admin, S("ERR:UNAUTH")) @@ -66,7 +92,6 @@ def add_label(self, id: String, name: String) -> None: def remove_label(self, id: String) -> None: self.admin_only() ensure(id in self.labels, S("ERR:NOEXIST")) - ensure(id.bytes.length == 2, S("ERR:LENGTH")) ensure(self.labels[id].num_assets == 0, S("ERR:NOEMPTY")) del self.labels[id] @@ -75,6 +100,13 @@ def get_label(self, id: String) -> LabelDescriptor: ensure(id in self.labels, S("ERR:NOEXIST")) return self.labels[id] + @abimethod(readonly=True) + def log_labels(self, ids: arc4.DynamicArray[arc4.String]) -> None: + for _idx, label_id in uenumerate(ids): + log(self.labels[label_id.native]) + + # TODO change label names? + # operator<>label access ops. admin and operators @subroutine @@ -85,10 +117,10 @@ def admin_or_operator_only(self, label: String) -> None: @subroutine def operator_only(self, label: String) -> None: + operator_index = self.get_operator_label_index(Txn.sender, label) ensure( - self.get_operator_label_index(Txn.sender, label) != UInt64(NOT_FOUND_KEY) - and self.get_operator_label_index(Txn.sender, label) - != UInt64(NOT_FOUND_VALUE), + operator_index != UInt64(NOT_FOUND_KEY) + and operator_index != UInt64(NOT_FOUND_VALUE), S("ERR:UNAUTH"), ) @@ -172,8 +204,10 @@ def remove_operator_from_label(self, operator: Account, label: String) -> None: @abimethod(readonly=True) def get_operator_labels(self, operator: Account) -> LabelList: - ensure(operator in self.operators, S("ERR:NOEXIST")) - return self.operators[operator] + if operator in self.operators: + return self.operators[operator] + # return empty list + return empty_list() @subroutine def get_asset_label_index(self, asset: Asset, label: String) -> UInt64: @@ -248,5 +282,163 @@ def remove_label_from_asset(self, label: String, asset: Asset) -> None: @abimethod(readonly=True) def get_asset_labels(self, asset: Asset) -> LabelList: - ensure(asset in self.assets, S("ERR:NOEXIST")) - return self.assets[asset] + if asset in self.assets: + return self.assets[asset] + # return empty + return empty_list() + + @abimethod(readonly=True) + def get_assets_labels( + self, assets: arc4.DynamicArray[arc4.UInt64] + ) -> arc4.DynamicArray[LabelList]: + out = arc4.DynamicArray[LabelList]() + for _i, asset_id in uenumerate(assets): + asset = Asset(asset_id.native) + if asset in self.assets: + out.append(self.assets[asset].copy()) + else: + out.append(empty_list()) + return out + + # + # Batch asset data fetch methods + # + + # Micro: Unit Name, Decimals (1 ref, max 128) + + @subroutine + def _get_asset_micro(self, asset_id: UInt64) -> AssetMicro: + asset = Asset(asset_id) + return AssetMicro( + unit_name=b2str(asset.unit_name), + decimals=arc4.UInt8(asset.decimals), + ) + + @abimethod(readonly=True) + def get_asset_micro(self, asset: UInt64) -> AssetMicro: + return self._get_asset_micro(asset) + + @abimethod(readonly=True) + def get_assets_micro(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + for _i, asset_id in uenumerate(assets): + log(self._get_asset_micro(asset_id.native)) + + # Micro+Label: Unit Name, Decimals, Labels (2 refs, max 64) + + @subroutine + def _get_asset_micro_labels(self, asset_id: UInt64) -> AssetMicroLabels: + asset = Asset(asset_id) + return AssetMicroLabels( + unit_name=b2str(asset.unit_name), + decimals=arc4.UInt8(asset.decimals), + labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + ) + + @abimethod(readonly=True) + def get_asset_micro_labels(self, asset: UInt64) -> AssetMicroLabels: + return self._get_asset_micro_labels(asset) + + @abimethod(readonly=True) + def get_assets_micro_labels(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + for _i, asset_id in uenumerate(assets): + log(self._get_asset_micro_labels(asset_id.native)) + + # Text: Searchable - Asset name, Unit Name, URL (1 ref, max 128) + + @subroutine + def _get_asset_text(self, asset_id: UInt64) -> AssetText: + asset = Asset(asset_id) + return AssetText( + name=b2str(asset.name), + unit_name=b2str(asset.unit_name), + url=b2str(asset.url), + labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + ) + + @abimethod(readonly=True) + def get_asset_text(self, asset: UInt64) -> AssetText: + return self._get_asset_text(asset) + + @abimethod(readonly=True) + def get_assets_text(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + for _i, asset_id in uenumerate(assets): + log(self._get_asset_text(asset_id.native)) + + # TextLabels: Searchable - Asset name, Unit Name, URL, Labels (2 refs, max 64) + + @subroutine + def _get_asset_text_labels(self, asset_id: UInt64) -> AssetTextLabels: + asset = Asset(asset_id) + return AssetTextLabels( + name=b2str(asset.name), + unit_name=b2str(asset.unit_name), + url=b2str(asset.url), + ) + + @abimethod(readonly=True) + def get_asset_text_labels(self, asset: UInt64) -> AssetTextLabels: + return self._get_asset_text_labels(asset) + + @abimethod(readonly=True) + def get_assets_text_labels(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + for _i, asset_id in uenumerate(assets): + log(self._get_asset_text_labels(asset_id.native)) + + # small (2 refs, max 64) + + @subroutine + def _get_asset_small(self, asset_id: UInt64) -> AssetSmall: + asset = Asset(asset_id) + return AssetSmall( + name=b2str(asset.name), + unit_name=b2str(asset.unit_name), + decimals=arc4.UInt8(asset.decimals), + total=arc4.UInt64(asset.total), + has_freeze=arc4.Bool(asset.freeze != Global.zero_address), + has_clawback=arc4.Bool(asset.clawback != Global.zero_address), + labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + ) + + @abimethod(readonly=True) + def get_asset_small(self, asset: UInt64) -> AssetSmall: + return self._get_asset_small(asset) + + @abimethod(readonly=True) + def get_assets_small(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + for _i, asset_id in uenumerate(assets): + log(self._get_asset_small(asset_id.native)) + + # full (3 refs, max 42) + + @subroutine + def _get_asset_full(self, asset_id: UInt64) -> AssetFull: + asset = Asset(asset_id) + reserve_acct = Account(asset.reserve.bytes) + reserve_balance = ( + asset.balance(reserve_acct) + if reserve_acct.is_opted_in(asset) + else UInt64(0) + ) + return AssetFull( + name=b2str(asset.name), + unit_name=b2str(asset.unit_name), + url=b2str(asset.url), + total=arc4.UInt64(asset.total), + decimals=arc4.UInt8(asset.decimals), + manager=arc4.Address(asset.manager), + freeze=arc4.Address(asset.freeze), + clawback=arc4.Address(asset.clawback), + reserve=arc4.Address(asset.reserve), + reserve_balance=arc4.UInt64(reserve_balance), + metadata_hash=arc4.DynamicBytes(asset.metadata_hash), + labels=self.assets[asset].copy() if asset in self.assets else empty_list(), + ) + + @abimethod(readonly=True) + def get_asset_full(self, asset: UInt64) -> AssetFull: + return self._get_asset_full(asset) + + @abimethod(readonly=True) + def get_assets_full(self, assets: arc4.DynamicArray[arc4.UInt64]) -> None: + for _i, asset_id in uenumerate(assets): + log(self._get_asset_full(asset_id.native)) diff --git a/projects/asset_labeling-contracts/smart_contracts/asset_labeling/deploy-config.ts b/projects/asset_labeling-contracts/smart_contracts/asset_labeling/deploy-config.ts index a458509..8889b94 100644 --- a/projects/asset_labeling-contracts/smart_contracts/asset_labeling/deploy-config.ts +++ b/projects/asset_labeling-contracts/smart_contracts/asset_labeling/deploy-config.ts @@ -12,7 +12,7 @@ export async function deploy() { defaultSender: deployer.addr, }) - const { appClient, result } = await factory.deploy({ onUpdate: 'append', onSchemaBreak: 'append' }) + const { appClient, result } = await factory.deploy({ onUpdate: 'update', onSchemaBreak: 'append' }) // If app was just created fund the app account if (['create', 'replace'].includes(result.operationPerformed)) { diff --git a/projects/asset_labeling-contracts/smart_contracts/asset_labeling/types.py b/projects/asset_labeling-contracts/smart_contracts/asset_labeling/types.py new file mode 100644 index 0000000..6e5fd84 --- /dev/null +++ b/projects/asset_labeling-contracts/smart_contracts/asset_labeling/types.py @@ -0,0 +1,69 @@ +from algopy import String, arc4 + +S = String + +LabelList = arc4.DynamicArray[arc4.String] + + +class LabelDescriptor(arc4.Struct): + name: arc4.String + num_assets: arc4.UInt64 + num_operators: arc4.UInt64 + + +# MVP view, e.g. for display an axfer row +class AssetMicro(arc4.Struct): + unit_name: arc4.String + decimals: arc4.UInt8 + + +# Above plus labels +class AssetMicroLabels(arc4.Struct): + unit_name: arc4.String + decimals: arc4.UInt8 + labels: LabelList + + +# Searchable text view +class AssetText(arc4.Struct): + name: arc4.String + unit_name: arc4.String + url: arc4.String + labels: LabelList + + +# Searchable text view plusllabels +class AssetTextLabels(arc4.Struct): + name: arc4.String + unit_name: arc4.String + url: arc4.String + + +# Small view, what a hover card on an explorer may show +class AssetSmall(arc4.Struct): + name: arc4.String + unit_name: arc4.String + decimals: arc4.UInt8 + total: arc4.UInt64 + has_freeze: arc4.Bool + has_clawback: arc4.Bool + labels: LabelList + + +# Full view, everything from algod /v2/assets API + reserve balance +class AssetFull(arc4.Struct): + name: arc4.String + unit_name: arc4.String + url: arc4.String + + total: arc4.UInt64 + decimals: arc4.UInt8 + + manager: arc4.Address + freeze: arc4.Address + clawback: arc4.Address + reserve: arc4.Address + + metadata_hash: arc4.DynamicBytes + reserve_balance: arc4.UInt64 + labels: LabelList diff --git a/projects/asset_labeling-contracts/tests/asset-labeling.spec.ts b/projects/asset_labeling-contracts/tests/asset-labeling.spec.ts index cd9bb76..c1ec56c 100644 --- a/projects/asset_labeling-contracts/tests/asset-labeling.spec.ts +++ b/projects/asset_labeling-contracts/tests/asset-labeling.spec.ts @@ -16,27 +16,17 @@ import { removeLabel, removeOperatorFromLabel, removeLabelFromAsset, -} from './sdk' - -// TODO: -// add_label as nonadmin (operator?) should fail -// remove_label as nonadmin (operator?) should fail -// add_op as operator -// remove_op as operator -// add_op nonexist label should fail -// remove_op nonexist label should fail - -const config = { - populateAppCallResources: true, - debug: false, - traceAll: false, -} +} from './helpers' describe('asset labeling contract', () => { const localnet = algorandFixture() beforeAll(() => { - Config.configure(config) + Config.configure({ + populateAppCallResources: true, + debug: false, + traceAll: false, + }) }) beforeEach(localnet.newScope) @@ -266,7 +256,8 @@ describe('asset labeling contract', () => { await addOperatorToLabel(adminClient, adminAccount, id) await removeOperatorFromLabel(adminClient, adminAccount, id) - await expect(() => getOperatorLabels(adminClient, adminAccount)).rejects.toThrow(/ERR:NOEXIST/) + const emptyLabels = await getOperatorLabels(adminClient, adminAccount) + expect(emptyLabels).toEqual([]) const { numOperators } = await getLabelDescriptor(adminClient, id) expect(numOperators).toBe(0n) @@ -291,7 +282,6 @@ describe('asset labeling contract', () => { expect(operatorLabel).toBe(id2) await removeOperatorFromLabel(adminClient, adminAccount, id2) - await expect(() => getOperatorLabels(adminClient, adminAccount)).rejects.toThrow(/ERR:NOEXIST/) const { numOperators } = await getLabelDescriptor(adminClient, id) expect(numOperators).toBe(0n) @@ -316,7 +306,6 @@ describe('asset labeling contract', () => { expect(operatorLabel).toBe(id) await removeOperatorFromLabel(adminClient, adminAccount, id) - await expect(() => getOperatorLabels(adminClient, adminAccount)).rejects.toThrow(/ERR:NOEXIST/) const { numOperators } = await getLabelDescriptor(adminClient, id) expect(numOperators).toBe(0n) @@ -448,7 +437,8 @@ describe('asset labeling contract', () => { const labelDescriptor = await getLabelDescriptor(operatorClient, label) expect(labelDescriptor.numAssets).toBe(0n) - await expect(() => getAssetLabels(operatorClient, assetId)).rejects.toThrow(/ERR:NOEXIST/) + const emptyLabels = await getAssetLabels(operatorClient, assetId) + expect(emptyLabels).toEqual([]) }) test('remove non-existent label should fail', async () => { diff --git a/projects/asset_labeling-contracts/tests/sdk.ts b/projects/asset_labeling-contracts/tests/helpers.ts similarity index 100% rename from projects/asset_labeling-contracts/tests/sdk.ts rename to projects/asset_labeling-contracts/tests/helpers.ts