{ "name": "LocalStateDemo", "structs": { "ObjectE4D9E83F": [ { "name": "localUint", "type": "uint64" }, { "name": "localUint2", "type": "uint64" }, { "name": "localBytes", "type": "byte[]" }, { "name": "localBytes2", "type": "byte[]" }, { "name": "localEncoded", "type": "uint64[10]" }, { "name": "localTuple", "type": "(uint64,byte[])" }, { "name": "localObject", "type": "ReadonlyObjectEFF43F36" }, { "name": "localMutableObject", "type": "Data" } ], "ObjectEFF43F36": [ { "name": "a", "type": "uint64" }, { "name": "b", "type": "byte[]" } ], "ReadonlyObjectEFF43F36": [ { "name": "a", "type": "uint64" }, { "name": "b", "type": "byte[]" } ], "Data": [ { "name": "a", "type": "uint64" }, { "name": "b", "type": "byte[]" }, { "name": "c", "type": "bool" }, { "name": "d", "type": "string" } ] }, "methods": [ { "name": "optIn", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "OptIn" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setState", "args": [ { "type": "(uint64,byte[])", "struct": "ObjectEFF43F36", "name": "p" }, { "type": "uint64[10]", "name": "c" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getState", "args": [], "returns": { "type": "(uint64,uint64,byte[],byte[],uint64[10],(uint64,byte[]),(uint64,byte[]),(uint64,byte[],bool,string))", "struct": "ObjectE4D9E83F" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "clearState", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "writeDynamicLocalState", "args": [ { "type": "string", "name": "key", "desc": "- The dynamic key to store the value under" }, { "type": "string", "name": "value", "desc": "- The string value to store" } ], "returns": { "type": "string", "desc": "The stored string value" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Writes a value to local state using a dynamic key.\nDemonstrates dynamic key-value storage in local state.", "events": [], "recommendations": {} }, { "name": "readDynamicLocalState", "args": [ { "type": "string", "name": "key", "desc": "- The dynamic key to read the value from" } ], "returns": { "type": "string", "desc": "The stored string value for the given key" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Reads a value from local state using a dynamic key.", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 2, "bytes": 6 } }, "keys": { "global": {}, "local": { "localUint": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bDE=" }, "localUint2": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bG9jYWxVaW50Mg==" }, "localBytes": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "YjE=" }, "localBytes2": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "bG9jYWxCeXRlczI=" }, "localEncoded": { "keyType": "AVMString", "valueType": "uint64[10]", "key": "bG9jYWxFbmNvZGVk" }, "localTuple": { "keyType": "AVMString", "valueType": "(uint64,byte[])", "key": "bG9jYWxUdXBsZQ==" }, "localObject": { "keyType": "AVMString", "valueType": "ReadonlyObjectEFF43F36", "key": "bG9jYWxPYmplY3Q=" }, "localMutableObject": { "keyType": "AVMString", "valueType": "Data", "key": "bG9jYWxNdXRhYmxlT2JqZWN0" } }, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 1064, 1105 ], "errorMessage": "Account must opt in to contract first" }, { "pc": [ 1118 ], "errorMessage": "Key not found" }, { "pc": [ 692, 698, 705, 716, 727, 734, 771, 812, 1077, 1088, 1125 ], "errorMessage": "check LocalState exists" }, { "pc": [ 308, 364, 383, 424 ], "errorMessage": "invalid array length header" }, { "pc": [ 320 ], "errorMessage": "invalid number of bytes for ObjectEFF43F36" }, { "pc": [ 374, 393, 434 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 329 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 299 ], "errorMessage": "invalid tail pointer at index 1 of (uint64,(len+uint8[]))" }, { "pc": [ 295 ], "errorMessage": "invalid tuple encoding" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMTAKICAgIGJ5dGVjYmxvY2sgMHggMHgxNTFmN2M3NSAibDEiICJsb2NhbFVpbnQyIiAiYjEiICJsb2NhbEJ5dGVzMiIgImxvY2FsRW5jb2RlZCIgImxvY2FsVHVwbGUiICJsb2NhbE9iamVjdCIgImxvY2FsTXV0YWJsZU9iamVjdCIgImhlbGxvIgogICAgYiBtYWluX2Jsb2NrQDAKCm1haW5fYmxvY2tAMDoKICAgIGIgbWFpbl9ibG9ja0AxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZURlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxNAogICAgYiBtYWluX2FiaV9yb3V0aW5nQDIKCm1haW5fYWJpX3JvdXRpbmdAMjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIHB1c2hieXRlcyAweDI5MzE0ZDk1IC8vIG1ldGhvZCAib3B0SW4oKXZvaWQiCiAgICB1bmNvdmVyIDEKICAgIG1hdGNoIG1haW5fb3B0SW5fcm91dGVAMwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRANAoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDQ6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4CiAgICAvLyBleHBvcnQgY2xhc3MgTG9jYWxTdGF0ZURlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxMgogICAgYiBtYWluX2NhbGxfTm9PcEA1CgptYWluX2NhbGxfTm9PcEA1OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OAogICAgLy8gZXhwb3J0IGNsYXNzIExvY2FsU3RhdGVEZW1vIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4YWFlZmNiNDMgLy8gbWV0aG9kICJzZXRTdGF0ZSgodWludDY0LGJ5dGVbXSksdWludDY0WzEwXSl2b2lkIgogICAgcHVzaGJ5dGVzIDB4MGVhMmM0NjkgLy8gbWV0aG9kICJnZXRTdGF0ZSgpKHVpbnQ2NCx1aW50NjQsYnl0ZVtdLGJ5dGVbXSx1aW50NjRbMTBdLCh1aW50NjQsYnl0ZVtdKSwodWludDY0LGJ5dGVbXSksKHVpbnQ2NCxieXRlW10sYm9vbCxzdHJpbmcpKSIKICAgIHB1c2hieXRlcyAweDExMTcwNTM0IC8vIG1ldGhvZCAiY2xlYXJTdGF0ZSgpdm9pZCIKICAgIHB1c2hieXRlcyAweDI3OTNjMjQ5IC8vIG1ldGhvZCAid3JpdGVEeW5hbWljTG9jYWxTdGF0ZShzdHJpbmcsc3RyaW5nKXN0cmluZyIKICAgIHB1c2hieXRlcyAweDIxMzYzMWY1IC8vIG1ldGhvZCAicmVhZER5bmFtaWNMb2NhbFN0YXRlKHN0cmluZylzdHJpbmciCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIG1haW5fc2V0U3RhdGVfcm91dGVANiBtYWluX2dldFN0YXRlX3JvdXRlQDcgbWFpbl9jbGVhclN0YXRlX3JvdXRlQDggbWFpbl93cml0ZUR5bmFtaWNMb2NhbFN0YXRlX3JvdXRlQDkgbWFpbl9yZWFkRHluYW1pY0xvY2FsU3RhdGVfcm91dGVAMTAKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDExCgptYWluX3N3aXRjaF9jYXNlX25leHRAMTE6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxMwoKbWFpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGVycgoKbWFpbl9yZWFkRHluYW1pY0xvY2FsU3RhdGVfcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVhZER5bmFtaWNMb2NhbFN0YXRlCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMQoKbWFpbl93cml0ZUR5bmFtaWNMb2NhbFN0YXRlX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgd3JpdGVEeW5hbWljTG9jYWxTdGF0ZQogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTEKCm1haW5fY2xlYXJTdGF0ZV9yb3V0ZUA4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NDUKICAgIC8vIHB1YmxpYyBjbGVhclN0YXRlKCkgewogICAgY2FsbHN1YiBjbGVhclN0YXRlCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxMQoKbWFpbl9nZXRTdGF0ZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzIKICAgIC8vIHB1YmxpYyBnZXRTdGF0ZSgpIHsKICAgIGNhbGxzdWIgZ2V0U3RhdGUKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDExCgptYWluX3NldFN0YXRlX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyMQogICAgLy8gcHVibGljIHNldFN0YXRlKHsgYSwgYiB9OiB7IGE6IHVpbnQ2NDsgYjogYnl0ZXMgfSwgYzogU2FtcGxlQXJyYXkpIHsKICAgIGNhbGxzdWIgc2V0U3RhdGUKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDExCgptYWluX2NyZWF0ZV9Ob09wQDEyOgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTMKCm1haW5fb3B0SW5fcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICAmJgogICAgYXNzZXJ0CiAgICBjYWxsc3ViIG9wdEluCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEA0CgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxNDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjbGFzcyBMb2NhbFN0YXRlRGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICA9PQogICAgJiYKICAgIGFzc2VydAogICAgY2FsbHN1YiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8ub3B0SW5bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJbjoKICAgIGIgb3B0SW5fYmxvY2tAMAoKb3B0SW5fYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnT3B0SW4nIH0pCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5vcHRJbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5zZXRTdGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0YXRlOgogICAgYiBzZXRTdGF0ZV9ibG9ja0AwCgpzZXRTdGF0ZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBzZXRTdGF0ZSh7IGEsIGIgfTogeyBhOiB1aW50NjQ7IGI6IGJ5dGVzIH0sIGM6IFNhbXBsZUFycmF5KSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgY292ZXIgMQogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgaW50Y18zIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDEgb2YgKHVpbnQ2NCwobGVuK3VpbnQ4W10pKQogICAgZGlnIDEKICAgIHVuY292ZXIgMQogICAgdW5jb3ZlciAzCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIHB1c2hpbnQgMgogICAgKwogICAgaW50Y18zIC8vIDEwCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBPYmplY3RFRkY0M0YzNgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgODAKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDY0LCAxMD4KICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLnNldFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLmdldFN0YXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0U3RhdGU6CiAgICBiIGdldFN0YXRlX2Jsb2NrQDAKCmdldFN0YXRlX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozMgogICAgLy8gcHVibGljIGdldFN0YXRlKCkgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uZ2V0U3RhdGUKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5jbGVhclN0YXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKY2xlYXJTdGF0ZToKICAgIGIgY2xlYXJTdGF0ZV9ibG9ja0AwCgpjbGVhclN0YXRlX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo0NQogICAgLy8gcHVibGljIGNsZWFyU3RhdGUoKSB7CiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5jbGVhclN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLndyaXRlRHluYW1pY0xvY2FsU3RhdGVbcm91dGluZ10oKSAtPiB2b2lkOgp3cml0ZUR5bmFtaWNMb2NhbFN0YXRlOgogICAgYiB3cml0ZUR5bmFtaWNMb2NhbFN0YXRlX2Jsb2NrQDAKCndyaXRlRHluYW1pY0xvY2FsU3RhdGVfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIHB1c2hpbnQgMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIHB1c2hpbnQgMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8ud3JpdGVEeW5hbWljTG9jYWxTdGF0ZQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLnJlYWREeW5hbWljTG9jYWxTdGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlYWREeW5hbWljTG9jYWxTdGF0ZToKICAgIGIgcmVhZER5bmFtaWNMb2NhbFN0YXRlX2Jsb2NrQDAKCnJlYWREeW5hbWljTG9jYWxTdGF0ZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6ODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMQogICAgKgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5yZWFkRHluYW1pY0xvY2FsU3RhdGUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5vcHRJbigpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5vcHRJbjoKICAgIGIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLm9wdEluX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5vcHRJbl9ibG9ja0AwOgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLnNldFN0YXRlKHA6IGJ5dGVzLCBjOiBieXRlcykgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLnNldFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBzZXRTdGF0ZSh7IGEsIGIgfTogeyBhOiB1aW50NjQ7IGI6IGJ5dGVzIH0sIGM6IFNhbXBsZUFycmF5KSB7CiAgICBwcm90byAyIDAKICAgIGIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLnNldFN0YXRlX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5zZXRTdGF0ZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjEKICAgIC8vIHB1YmxpYyBzZXRTdGF0ZSh7IGEsIGIgfTogeyBhOiB1aW50NjQ7IGI6IGJ5dGVzIH0sIGM6IFNhbXBsZUFycmF5KSB7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgZnJhbWVfZGlnIC0yCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIGNvdmVyIDEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjIyCiAgICAvLyB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSA9IGEKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMiAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyMgogICAgLy8gdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUgPSBhCiAgICBkaWcgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjMKICAgIC8vIHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSA9IGEKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEwCiAgICAvLyBsb2NhbFVpbnQyID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjXzMgLy8gImxvY2FsVWludDIiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyMwogICAgLy8gdGhpcy5sb2NhbFVpbnQyKFR4bi5zZW5kZXIpLnZhbHVlID0gYQogICAgZGlnIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUgPSBiCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlYyA0IC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUgPSBiCiAgICBkaWcgMwogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjUKICAgIC8vIHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikudmFsdWUgPSBiCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlYyA1IC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI1CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMyKFR4bi5zZW5kZXIpLnZhbHVlID0gYgogICAgZGlnIDMKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI2CiAgICAvLyB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZSA9IGNsb25lKGMpCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMwogICAgLy8gbG9jYWxFbmNvZGVkID0gTG9jYWxTdGF0ZTxTYW1wbGVBcnJheT4oKQogICAgYnl0ZWMgNiAvLyAibG9jYWxFbmNvZGVkIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjYKICAgIC8vIHRoaXMubG9jYWxFbmNvZGVkKFR4bi5zZW5kZXIpLnZhbHVlID0gY2xvbmUoYykKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MjcKICAgIC8vIHRoaXMubG9jYWxUdXBsZShUeG4uc2VuZGVyKS52YWx1ZSA9IFthLCBiXQogICAgdHhuIFNlbmRlcgogICAgY292ZXIgMgogICAgZHVwCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgY292ZXIgMQogICAgZGlnIDIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIGludGNfMyAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE0CiAgICAvLyBsb2NhbFR1cGxlID0gTG9jYWxTdGF0ZTxyZWFkb25seSBbdWludDY0LCBieXRlc10+KCkKICAgIGJ5dGVjIDcgLy8gImxvY2FsVHVwbGUiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyNwogICAgLy8gdGhpcy5sb2NhbFR1cGxlKFR4bi5zZW5kZXIpLnZhbHVlID0gW2EsIGJdCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI4CiAgICAvLyB0aGlzLmxvY2FsT2JqZWN0KFR4bi5zZW5kZXIpLnZhbHVlID0geyBhLCBiIH0KICAgIHR4biBTZW5kZXIKICAgIGNvdmVyIDEKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBkaWcgNAogICAgY29uY2F0CiAgICBpbnRjXzMgLy8gMTAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNQogICAgLy8gbG9jYWxPYmplY3QgPSBMb2NhbFN0YXRlPFJlYWRvbmx5PHsgYTogdWludDY0OyBiOiBieXRlcyB9Pj4oKQogICAgYnl0ZWMgOCAvLyAibG9jYWxPYmplY3QiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOAogICAgLy8gdGhpcy5sb2NhbE9iamVjdChUeG4uc2VuZGVyKS52YWx1ZSA9IHsgYSwgYiB9CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjI5CiAgICAvLyB0aGlzLmxvY2FsTXV0YWJsZU9iamVjdChUeG4uc2VuZGVyKS52YWx1ZSA9IHsgYSwgYiwgYzogdHJ1ZSwgZDogbmV3IGFyYzQuU3RyKCdoZWxsbycpIH0KICAgIGJ5dGVjIDEwIC8vICJoZWxsbyIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjIDEwIC8vICJoZWxsbyIKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgcHVzaGludCAxMwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGNvdmVyIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDEzCiAgICArCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMSAvLyAxCiAgICBzZXRiaXQKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNgogICAgLy8gbG9jYWxNdXRhYmxlT2JqZWN0ID0gTG9jYWxTdGF0ZTxEYXRhPigpCiAgICBieXRlYyA5IC8vICJsb2NhbE11dGFibGVPYmplY3QiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoyOQogICAgLy8gdGhpcy5sb2NhbE11dGFibGVPYmplY3QoVHhuLnNlbmRlcikudmFsdWUgPSB7IGEsIGIsIGM6IHRydWUsIGQ6IG5ldyBhcmM0LlN0cignaGVsbG8nKSB9CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5nZXRTdGF0ZSgpIC0+IGJ5dGVzOgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uZ2V0U3RhdGU6CiAgICBiIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5nZXRTdGF0ZV9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uZ2V0U3RhdGVfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM0CiAgICAvLyBsb2NhbFVpbnQ6IHRoaXMubG9jYWxVaW50KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkKICAgIC8vIGxvY2FsVWludCA9IExvY2FsU3RhdGU8dWludDY0Pih7IGtleTogJ2wxJyB9KQogICAgYnl0ZWNfMiAvLyAibDEiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozNAogICAgLy8gbG9jYWxVaW50OiB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMAogICAgLy8gbG9jYWxVaW50MiA9IExvY2FsU3RhdGU8dWludDY0PigpCiAgICBieXRlY18zIC8vICJsb2NhbFVpbnQyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzUKICAgIC8vIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzYKICAgIC8vIGxvY2FsQnl0ZXM6IHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMQogICAgLy8gbG9jYWxCeXRlcyA9IExvY2FsU3RhdGU8Ynl0ZXM+KHsga2V5OiAnYjEnIH0pCiAgICBieXRlYyA0IC8vICJiMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM2CiAgICAvLyBsb2NhbEJ5dGVzOiB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxMgogICAgLy8gbG9jYWxCeXRlczIgPSBMb2NhbFN0YXRlPGJ5dGVzPigpCiAgICBieXRlYyA1IC8vICJsb2NhbEJ5dGVzMiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM3CiAgICAvLyBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGNvdmVyIDEKICAgIGNvdmVyIDQKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzgKICAgIC8vIGxvY2FsRW5jb2RlZDogY2xvbmUodGhpcy5sb2NhbEVuY29kZWQoVHhuLnNlbmRlcikudmFsdWUpLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEzCiAgICAvLyBsb2NhbEVuY29kZWQgPSBMb2NhbFN0YXRlPFNhbXBsZUFycmF5PigpCiAgICBieXRlYyA2IC8vICJsb2NhbEVuY29kZWQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czozOAogICAgLy8gbG9jYWxFbmNvZGVkOiBjbG9uZSh0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZSksCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBjb3ZlciAxCiAgICBjb3ZlciA1CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM5CiAgICAvLyBsb2NhbFR1cGxlOiB0aGlzLmxvY2FsVHVwbGUoVHhuLnNlbmRlcikudmFsdWUsCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTQKICAgIC8vIGxvY2FsVHVwbGUgPSBMb2NhbFN0YXRlPHJlYWRvbmx5IFt1aW50NjQsIGJ5dGVzXT4oKQogICAgYnl0ZWMgNyAvLyAibG9jYWxUdXBsZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjM5CiAgICAvLyBsb2NhbFR1cGxlOiB0aGlzLmxvY2FsVHVwbGUoVHhuLnNlbmRlcikudmFsdWUsCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgY292ZXIgMQogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGNvdmVyIDEKICAgIGR1cAogICAgbGVuCiAgICBjb3ZlciAxCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHVuY292ZXIgMQogICAgY292ZXIgNAogICAgY292ZXIgNAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NDAKICAgIC8vIGxvY2FsT2JqZWN0OiB0aGlzLmxvY2FsT2JqZWN0KFR4bi5zZW5kZXIpLnZhbHVlLAogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjE1CiAgICAvLyBsb2NhbE9iamVjdCA9IExvY2FsU3RhdGU8UmVhZG9ubHk8eyBhOiB1aW50NjQ7IGI6IGJ5dGVzIH0+PigpCiAgICBieXRlYyA4IC8vICJsb2NhbE9iamVjdCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjQwCiAgICAvLyBsb2NhbE9iamVjdDogdGhpcy5sb2NhbE9iamVjdChUeG4uc2VuZGVyKS52YWx1ZSwKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3QzCiAgICBidG9pCiAgICBjb3ZlciAxCiAgICBkdXAKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgY292ZXIgMQogICAgZHVwCiAgICBsZW4KICAgIGNvdmVyIDEKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgdW5jb3ZlciAxCiAgICBjb3ZlciA3CiAgICBjb3ZlciA3CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo0MQogICAgLy8gbG9jYWxNdXRhYmxlT2JqZWN0OiBjbG9uZSh0aGlzLmxvY2FsTXV0YWJsZU9iamVjdChUeG4uc2VuZGVyKS52YWx1ZSksCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTYKICAgIC8vIGxvY2FsTXV0YWJsZU9iamVjdCA9IExvY2FsU3RhdGU8RGF0YT4oKQogICAgYnl0ZWMgOSAvLyAibG9jYWxNdXRhYmxlT2JqZWN0IgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NDEKICAgIC8vIGxvY2FsTXV0YWJsZU9iamVjdDogY2xvbmUodGhpcy5sb2NhbE11dGFibGVPYmplY3QoVHhuLnNlbmRlcikudmFsdWUpLAogICAgYXBwX2xvY2FsX2dldF9leAogICAgY292ZXIgMQogICAgY292ZXIgMTAKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MzMtNDIKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIGxvY2FsVWludDogdGhpcy5sb2NhbFVpbnQoVHhuLnNlbmRlcikudmFsdWUsCiAgICAvLyAgIGxvY2FsVWludDI6IHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIC8vICAgbG9jYWxCeXRlczogdGhpcy5sb2NhbEJ5dGVzKFR4bi5zZW5kZXIpLnZhbHVlLAogICAgLy8gICBsb2NhbEJ5dGVzMjogdGhpcy5sb2NhbEJ5dGVzMihUeG4uc2VuZGVyKS52YWx1ZSwKICAgIC8vICAgbG9jYWxFbmNvZGVkOiBjbG9uZSh0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS52YWx1ZSksCiAgICAvLyAgIGxvY2FsVHVwbGU6IHRoaXMubG9jYWxUdXBsZShUeG4uc2VuZGVyKS52YWx1ZSwKICAgIC8vICAgbG9jYWxPYmplY3Q6IHRoaXMubG9jYWxPYmplY3QoVHhuLnNlbmRlcikudmFsdWUsCiAgICAvLyAgIGxvY2FsTXV0YWJsZU9iamVjdDogY2xvbmUodGhpcy5sb2NhbE11dGFibGVPYmplY3QoVHhuLnNlbmRlcikudmFsdWUpLAogICAgLy8gfQogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgcHVzaGludCAxMDYKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBjb3ZlciAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxMDYKICAgICsKICAgIGRpZyA1CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICB1bmNvdmVyIDMKICAgICsKICAgIGNvdmVyIDEKICAgIHVuY292ZXIgOAogICAgY29uY2F0CiAgICBjb3ZlciAxCiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBkaWcgNQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIGludGNfMyAvLyAxMAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBkaWcgMQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIHVuY292ZXIgNQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGRpZyA2CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDcKICAgIGNvbmNhdAogICAgaW50Y18zIC8vIDEwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgZHVwCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLmNsZWFyU3RhdGUoKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uY2xlYXJTdGF0ZToKICAgIGIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLmNsZWFyU3RhdGVfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLmNsZWFyU3RhdGVfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OQogICAgLy8gbG9jYWxVaW50ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiAnbDEnIH0pCiAgICBieXRlY18yIC8vICJsMSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLmxvY2FsVWludChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NDcKICAgIC8vIHRoaXMubG9jYWxVaW50MihUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTAKICAgIC8vIGxvY2FsVWludDIgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWNfMyAvLyAibG9jYWxVaW50MiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjQ3CiAgICAvLyB0aGlzLmxvY2FsVWludDIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxvY2FsQnl0ZXMoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjExCiAgICAvLyBsb2NhbEJ5dGVzID0gTG9jYWxTdGF0ZTxieXRlcz4oeyBrZXk6ICdiMScgfSkKICAgIGJ5dGVjIDQgLy8gImIxIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NDgKICAgIC8vIHRoaXMubG9jYWxCeXRlcyhUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NDkKICAgIC8vIHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjEyCiAgICAvLyBsb2NhbEJ5dGVzMiA9IExvY2FsU3RhdGU8Ynl0ZXM+KCkKICAgIGJ5dGVjIDUgLy8gImxvY2FsQnl0ZXMyIgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NDkKICAgIC8vIHRoaXMubG9jYWxCeXRlczIoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjUwCiAgICAvLyB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTMKICAgIC8vIGxvY2FsRW5jb2RlZCA9IExvY2FsU3RhdGU8U2FtcGxlQXJyYXk+KCkKICAgIGJ5dGVjIDYgLy8gImxvY2FsRW5jb2RlZCIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjUwCiAgICAvLyB0aGlzLmxvY2FsRW5jb2RlZChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NTEKICAgIC8vIHRoaXMubG9jYWxUdXBsZShUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6MTQKICAgIC8vIGxvY2FsVHVwbGUgPSBMb2NhbFN0YXRlPHJlYWRvbmx5IFt1aW50NjQsIGJ5dGVzXT4oKQogICAgYnl0ZWMgNyAvLyAibG9jYWxUdXBsZSIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjUxCiAgICAvLyB0aGlzLmxvY2FsVHVwbGUoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjUyCiAgICAvLyB0aGlzLmxvY2FsT2JqZWN0KFR4bi5zZW5kZXIpLmRlbGV0ZSgpCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNQogICAgLy8gbG9jYWxPYmplY3QgPSBMb2NhbFN0YXRlPFJlYWRvbmx5PHsgYTogdWludDY0OyBiOiBieXRlcyB9Pj4oKQogICAgYnl0ZWMgOCAvLyAibG9jYWxPYmplY3QiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo1MgogICAgLy8gdGhpcy5sb2NhbE9iamVjdChUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NTMKICAgIC8vIHRoaXMubG9jYWxNdXRhYmxlT2JqZWN0KFR4bi5zZW5kZXIpLmRlbGV0ZSgpCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czoxNgogICAgLy8gbG9jYWxNdXRhYmxlT2JqZWN0ID0gTG9jYWxTdGF0ZTxEYXRhPigpCiAgICBieXRlYyA5IC8vICJsb2NhbE11dGFibGVPYmplY3QiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo1MwogICAgLy8gdGhpcy5sb2NhbE11dGFibGVPYmplY3QoVHhuLnNlbmRlcikuZGVsZXRlKCkKICAgIGFwcF9sb2NhbF9kZWwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby53cml0ZUR5bmFtaWNMb2NhbFN0YXRlKGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gYnl0ZXM6CnRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby53cml0ZUR5bmFtaWNMb2NhbFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6NjMtNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgd3JpdGVEeW5hbWljTG9jYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7CiAgICBwcm90byAyIDEKICAgIGIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLndyaXRlRHluYW1pY0xvY2FsU3RhdGVfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6OkxvY2FsU3RhdGVEZW1vLndyaXRlRHluYW1pY0xvY2FsU3RhdGVfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBzZW5kZXIgPSBUeG4uc2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo2NgogICAgLy8gYXNzZXJ0KHNlbmRlci5pc09wdGVkSW4oR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkKSwgJ0FjY291bnQgbXVzdCBvcHQgaW4gdG8gY29udHJhY3QgZmlyc3QnKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICBkaWcgMQogICAgdW5jb3ZlciAxCiAgICBhcHBfb3B0ZWRfaW4KICAgIGFzc2VydCAvLyBBY2NvdW50IG11c3Qgb3B0IGluIHRvIGNvbnRyYWN0IGZpcnN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo2OAogICAgLy8gY29uc3QgbG9jYWxEeW5hbWljQWNjZXNzID0gTG9jYWxTdGF0ZTxzdHJpbmc+KHsga2V5IH0pCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcwCiAgICAvLyBsb2NhbER5bmFtaWNBY2Nlc3Moc2VuZGVyKS52YWx1ZSA9IHZhbHVlCiAgICBkdXAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjcyCiAgICAvLyBhc3NlcnQobG9jYWxEeW5hbWljQWNjZXNzKHNlbmRlcikudmFsdWUgPT09IHZhbHVlKQogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBkaWcgMgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjc0CiAgICAvLyByZXR1cm4gbG9jYWxEeW5hbWljQWNjZXNzKHNlbmRlcikudmFsdWUKICAgIHVuY292ZXIgMQogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8ucmVhZER5bmFtaWNMb2NhbFN0YXRlKGtleTogYnl0ZXMpIC0+IGJ5dGVzOgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8ucmVhZER5bmFtaWNMb2NhbFN0YXRlOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLXN0YXRlLmFsZ28udHM6ODItODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgcmVhZER5bmFtaWNMb2NhbFN0YXRlKGtleTogc3RyaW5nKTogc3RyaW5nIHsKICAgIHByb3RvIDEgMQogICAgYiB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8ucmVhZER5bmFtaWNMb2NhbFN0YXRlX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjpMb2NhbFN0YXRlRGVtby5yZWFkRHluYW1pY0xvY2FsU3RhdGVfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBzZW5kZXIgPSBUeG4uc2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4NgogICAgLy8gYXNzZXJ0KHNlbmRlci5pc09wdGVkSW4oR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkKSwgJ0FjY291bnQgbXVzdCBvcHQgaW4gdG8gY29udHJhY3QgZmlyc3QnKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICBkaWcgMQogICAgdW5jb3ZlciAxCiAgICBhcHBfb3B0ZWRfaW4KICAgIGFzc2VydCAvLyBBY2NvdW50IG11c3Qgb3B0IGluIHRvIGNvbnRyYWN0IGZpcnN0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo4OAogICAgLy8gY29uc3QgbG9jYWxEeW5hbWljQWNjZXNzID0gTG9jYWxTdGF0ZTxzdHJpbmc+KHsga2V5IH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1zdGF0ZS5hbGdvLnRzOjkwCiAgICAvLyBhc3NlcnQobG9jYWxEeW5hbWljQWNjZXNzKHNlbmRlcikuaGFzVmFsdWUsICdLZXkgbm90IGZvdW5kJykKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZGlnIDIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGNvdmVyIDEKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBLZXkgbm90IGZvdW5kCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo5MgogICAgLy8gcmV0dXJuIGxvY2FsRHluYW1pY0FjY2VzcyhzZW5kZXIpLnZhbHVlCiAgICB1bmNvdmVyIDEKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgdW5jb3ZlciAxCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtc3RhdGUuYWxnby50czo6TG9jYWxTdGF0ZURlbW8uX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlKCkgLT4gdm9pZDoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlOgogICAgYiBfX2FsZ290c19fLmRlZmF1bHRDcmVhdGVfYmxvY2tAMAoKX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlX2Jsb2NrQDA6CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBiIG1haW5fYmxvY2tAMAoKbWFpbl9ibG9ja0AwOgogICAgcHVzaGludCAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAEAAEICiYLAAQVH3x1AmwxCmxvY2FsVWludDICYjELbG9jYWxCeXRlczIMbG9jYWxFbmNvZGVkCmxvY2FsVHVwbGULbG9jYWxPYmplY3QSbG9jYWxNdXRhYmxlT2JqZWN0BWhlbGxvQgAAQgAAMRsiE0EAjkIAADYaAIAEKTFNlU8BjgEAbEIAADEZIhJEMRgiE0EAWkIAADYaAIAEqu/LQ4AEDqLEaYAEERcFNIAEJ5PCSYAEITYx9U8FjgUAIgAcABYAEAAKQgAAQgAAQgAAAIgAykL/84gAiEL/7YgAekL/54gAZ0L/4YgALUL/20L/2zEZIxIxGCITEESIABJC/4cxGSISMRgiEhBEiANYI0NCAACIALAjQ0IAADYaAUkVTgFJJFlJJRJESwFPAU8DUiJZIwuBAgglCEsBFRJENhoCSRWBUBJEiACAI0NCAACIAVcpTwFQsCNDQgAAiAKNI0NCAAA2GgFJIlkjC4ECCEsBFRJEVwIANhoCSSJZIwuBAghLARUSRFcCAIgCiUkVFlcGAk8BUClPAVCwI0NCAAA2GgFJIlkjC4ECCEsBFRJEVwIAiAKJSRUWVwYCTwFQKU8BULAjQ0IAAImKAgBCAACL/iIkWBeL/iRZi/4Vi/5PAk8CUlcCAE4BMQAqSwJmMQArSwJmMQAnBEsDZjEAJwVLA2YxACcGi/9mMQBOAkkWKE8BUE4BSwIVFlcGAksDUCUWVwYCTwNPAVBPAVBPAycHTwJmMQBOAUkWKE8BUEsDFRZXBgJLBFAlFlcGAk8CTwFQTwFQTwInCE8CZicKFRZXBgInClBOAhYoTwFQSwEVFlcGAk8CUIENFlcGAk8CTwFQTgFJFYENCIABACIjVE8DTwFQTwEWVwYCUE8BUE8BUDEAJwlPAmaJQgAAMQAiKmNEMQAiK2NEMQAiJwRjRDEAIicFY04BTgREMQAiJwZjTgFOBUQxACInB2NESSIkWBdOAUkkWU4BSRVOAU8CTwJSVwIATwFOBE4EMQAiJwhjREkiJFgXTgFJJFlOAUkVTgFPAk8CUlcCAE8BTgdOBzEAIicJY04BTgpETwIWKE8BUE8CFlBLARUWVwYCTwJQgWoWVwYCTwJPAVBOAUkVgWoISwUVFlcGAk8GUEsBFlcGAk8ETwFQSwEVTwMITgFPCFBOAU8EFihPAVBLBRUWVwYCTwZQJRZXBgJPAk8BUE8BUEsBFlcGAk8DTwFQTgJJFU8CCE8FFihPAVBLBhUWVwYCTwdQJRZXBgJPAk8BUE8BUEsBFlcGAk8ETwFQTgJJFU8CCBZXBgJPAk8BUE8EUE8DUE8CUE8BUE8BUIlCAAAxACpoMQAraDEAJwRoMQAnBWgxACcGaDEAJwdoMQAnCGgxACcJaImKAgFCAAAxADIISwFPAWFEi/5Ki/9mSwEiSwJjRIv/EkRPASJPAmNEiYoBAUIAADEAMghLAU8BYUSL/0sBIksCY04BTgNETwEiTwJjRE8BiUIAAIk=", "clear": "C0IAAIEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 10, "patch": 0 } }, "events": [], "templateVariables": {} }