Name: series-workflow8cqbf Phase: Succeeded StartedAt: 2026-09-02 01:23:31 +0000 UTC FinishedAt: 2026-09-02 05:36:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[0] Phase: Succeeded StartedAt: 2026-09-02 01:23:31 +0000 UTC FinishedAt: 2026-09-02 01:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 01:23:31 +0000 UTC FinishedAt: 2026-09-02 01:57:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8b72f6626dc39b9e7e82b2721d4f7c3b86286012", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED", "CGROUPS", "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8b72f6626dc39b9e7e82b2721d4f7c3b86286012", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED", "CGROUPS", "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "a0010484-bcc7-4824-b30f-8828a34fd62b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "scx_group_set_idle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNjeF9ncm91cF9zZXRfaWRsZSgpYCBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgdG8gY2hlY2sgYHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGVgIGJlZm9yZSBpbnZva2luZyB0aGUgYGNncm91cF9zZXRfaWRsZWAgc2NoZWR1bGVyIG9wZXJhdGlvbiBjYWxsYmFjaywgYXZvaWRpbmcgcmVkdW5kYW50IGNhbGxiYWNrcyB3aGVuIHRoZSBpZGxlIHN0YXRlIGRvZXMgbm90IGNoYW5nZS5cblxuYHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlYCBpcyBhIGJvb2xlYW4gbWVtYmVyIG9mIGBzdHJ1Y3QgdGFza19ncm91cGAgdGhhdCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHNjeF90Z19pbml0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBoZWFwIG9yIHN0YWNrIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzY3hfZ3JvdXBfc2V0X2lkbGUoKSBpbiB0aGUgZXh0ZW5zaWJsZSBzY2hlZHVsZXIgY2xhc3MgKHNjaGVkX2V4dCkgdG8gYXZvaWQgaW52b2tpbmcgdGhlIGNncm91cF9zZXRfaWRsZSBCUEYgY2FsbGJhY2sgaWYgdGhlIHRhc2sgZ3JvdXAmIzM5O3MgaWRsZSBzdGF0ZSBoYXNuJiMzOTt0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc3YTNhMGQ0MDQyNjVjODZkYjYzMWY3YjBkYzc4MTEzZDY1MGM1MjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDAxOjU1OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5pbmRleCA4MDQxYzg3YTM1NjJlLi44YjM2MjUxMDdiNzI0IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuQEAgLTQ5MzMsNyAmIzQzOzQ5MzMsOCBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcbiBcdHBlcmNwdV9kb3duX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuIFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xuIFxuLVx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSlcbiYjNDM7XHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBzY2ggXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlKVxuIFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzY3hfZ3JvdXBfc2V0X2lkbGUoKSBpbiB0aGUgZXh0ZW5zaWJsZSBzY2hlZHVsZXIgY2xhc3MgKHNjaGVkX2V4dCkgdG8gYXZvaWQgaW52b2tpbmcgdGhlIGNncm91cF9zZXRfaWRsZSBCUEYgY2FsbGJhY2sgaWYgdGhlIHRhc2sgZ3JvdXAmIzM5O3MgaWRsZSBzdGF0ZSBoYXNuJiMzOTt0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3YTNhMGQ0MDQyNjVjODZkYjYzMWY3YjBkYzc4MTEzZDY1MGM1MjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDAxOjU1OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKaW5kZXggODA0MWM4N2EzNTYyZS4uOGIzNjI1MTA3YjcyNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCkBAIC00OTMzLDcgJiM0Mzs0OTMzLDggQEAgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpCiAJcGVyY3B1X2Rvd25fcmVhZCgmYW1wO3NjeF9jZ3JvdXBfb3BzX3J3c2VtKTsKIAlzY2ggPSBzY3hfdGdfa25vYl9zY2hlZCh0Zyk7CiAKLQlpZiAoc2N4X2Nncm91cF9lbmFibGVkICZhbXA7JmFtcDsgc2NoICZhbXA7JmFtcDsgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkpCiYjNDM7CWlmIChzY3hfY2dyb3VwX2VuYWJsZWQgJmFtcDsmYW1wOyBzY2ggJmFtcDsmYW1wOyBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgIT0gaWRsZSkKIAkJU0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTsKIAogCS8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCYjMzk7cyBpZGxlIHN0YXRlICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbi4gSSBzZWUgYSBjb21taXQgd2l0aCBhIGBkaWZmYCBwcmVzZW50ZWQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgLiBUaGlzIGlzIGluIHRoZSBzY2hlZHVsZXIgZXh0ZW5zaW9uIGNvZGUsIHdoaWNoIGNvdWxkIGRlZmluaXRlbHkgYmUgaW50ZXJlc3RpbmcuCgpUaGUgZGlmZiBpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gTG9va2luZyBhdCB0aGUgY2hhbmdlcyBhcm91bmQgbGluZSA0OTMzLCBpdCBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IGhhcyBiZWVuIG1vZGlmaWVkIHdpdGhpbiB0aGUgYHNjeF9ncm91cF9zZXRfaWRsZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBhIGNoZWNrIGZvciBgdGctJmd0O3NjeC5zY2hlZF9pZGxlICE9IGlkbGVgIGhhcyBiZWVuIGFkZGVkLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIG9wdGltaXppbmcgYSBjaGVjaywgc28gbWF5YmUgd2UgY2FuIHJ1bGUgaXQgb3V0IGltbWVkaWF0ZWx5LCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgbW9yZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYGdpdCBncmVwYCBvciBqdXN0IHB1bGwgdXAgdGhlIGZpbGUgYW5kIHJlYWQgYXJvdW5kIHRoYXQgbGluZSwgc2VlIGhvdyB0aGlzIGBzY3guc2NoZWRfaWRsZWAgZmllbGQgaXMgYmVpbmcgdXNlZCBhbmQgbW9kaWZpZWQsIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQuIEtub3dpbmcgd2hhdCBgU0NYX0hBU19PUGAgYW5kIGBTQ1hfQ0FMTF9PUGAgYXJlIHdvdWxkIGJlIGhlbHBmdWwgdG9vLiBCYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgYXNzZXNzbWVudCBhYm91dCB3aGV0aGVyIHRoaXMgY29uZGl0aW9uYWwgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBuZXcgY29kZSBwYXRocyBvciBhbHRlciBleGlzdGluZyBiZWhhdmlvciBpbiBhIHdheSB0aGF0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIGEgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2V4dC9leHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDkyMDpcdFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF93ZWlnaHQpIFx1MDAyNlx1MDAyNlxuNDkyMTpcdFx0ICAgIHRnLVx1MDAzZXNjeC53ZWlnaHQgIT0gd2VpZ2h0KVxuNDkyMjpcdFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0LCBOVUxMLCB0Z19jZ3JwKHRnKSwgd2VpZ2h0KTtcbjQ5MjM6XHRcbjQ5MjQ6XHRcdHRnLVx1MDAzZXNjeC53ZWlnaHQgPSB3ZWlnaHQ7XG40OTI1Olx0XG40OTI2Olx0XHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG40OTI3Olx0fVxuNDkyODpcdFxuNDkyOTpcdHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxuNDkzMDpcdHtcbjQ5MzE6XHRcdHN0cnVjdCBzY3hfc2NoZWQgKnNjaDtcbjQ5MzI6XHRcbjQ5MzM6XHRcdHBlcmNwdV9kb3duX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuNDkzNDpcdFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xuNDkzNTpcdFxuNDkzNjpcdFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSBcdTAwMjZcdTAwMjZcbjQ5Mzc6XHRcdCAgICB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlKVxuNDkzODpcdFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpO1xuNDkzOTpcdFxuNDk0MDpcdFx0LyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi9cbjQ5NDE6XHRcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gaWRsZTtcbjQ5NDI6XHRcbjQ5NDM6XHRcdHBlcmNwdV91cF9yZWFkKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbjQ5NDQ6XHR9XG40OTQ1Olx0XG40OTQ2Olx0dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsXG40OTQ3Olx0XHRcdFx0ICAgICB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cylcbjQ5NDg6XHR7XG40OTQ5Olx0XHRzdHJ1Y3Qgc2N4X3NjaGVkICpzY2g7XG40OTUwOlx0XG40OTUxOlx0XHRwZXJjcHVfZG93bl9yZWFkKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbjQ5NTI6XHRcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcbjQ5NTM6XHRcbjQ5NTQ6XHRcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfYmFuZHdpZHRoKSBcdTAwMjZcdTAwMjZcbjQ5NTU6XHRcdCAgICAodGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyAhPSBwZXJpb2RfdXMgfHxcbjQ5NTY6XHRcdCAgICAgdGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzICE9IHF1b3RhX3VzIHx8XG40OTU3Olx0XHQgICAgIHRnLVx1MDAzZXNjeC5id19idXJzdF91cyAhPSBidXJzdF91cykpXG40OTU4Olx0XHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9iYW5kd2lkdGgsIE5VTEwsXG40OTU5Olx0XHRcdFx0ICAgIHRnX2NncnAodGcpLCBwZXJpb2RfdXMsIHF1b3RhX3VzLCBidXJzdF91cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYHNjeF9ncm91cF9zZXRfaWRsZWAgVXNhZ2UgYW5kIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIHN5c3RlbS4gU28sIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QgaXMgdG8gcmVhY2ggZm9yIGBncmVwYC4gSSYjMzk7bGwgcnVuIGEgcXVpY2sgc2VhcmNoIGZvciB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZSwgYHNjeF9ncm91cF9zZXRfaWRsZWAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsaXN0IG9mIGNhbGwgc2l0ZXMgdG8gd29yayBmcm9tLiBUaGVuIEkgY2FuIGFuYWx5emUgdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIGJvdGggYHNjaGVkX2V4dGAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgY2FuIHVzZSBteSBleHBlcnQga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIEkgY2FuIHVzZSB0aGUgc2VhcmNoIHJlc3VsdHMgYXMgYSBiYXNlIHRvIHN0YXJ0IGZyb20uIFdpdGggYGdyZXBgIEkgY2FuIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29kZSBmbG93LiBXaXRoIHRoZSBjYWxsIHNpdGVzLCBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFzc3VtcHRpb25zIGluIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgY2FsbCBzaXRlcyB3aXRoIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucywgbGlrZWx5IGJ5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgd2F5IEkgY2FuIGRldGVybWluZSB0aGUgcHJlY2lzZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhpcyBraW5kIG9mIHN5c3RlbWF0aWMgYW5hbHlzaXMgaXMgdGhlIGtleSB0byBxdWlja2x5IHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU5PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2NS1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDI2NjpcdFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNjctXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMz12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI4LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTI5OnZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTMwLXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgxPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTMtc3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdmVyaWZ5IGEgZmV3IGtleSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBzY2hlZHVsZXIgZXh0ZW5zaW9ucyBJJiMzOTttIHRhcmdldGluZy4gSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiBmZWF0dXJlcyByZWxhdGVkIHRvIGV4dGVuZGluZyB0aGUgc2NoZWR1bGluZyBjbGFzc2VzLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIGBDR1JPVVBfU0NIRURgIG9wdGlvbiwgYXMgSSB3aWxsIGJlIG5lZWRpbmcgdG8gZW5hYmxlIHNvbWUgbW9yZSBhZHZhbmNlZCBmdW5jdGlvbmFsaXR5IHRoZXJlIHRvby4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgZWl0aGVyIGVuYWJsZWQgb3IgYXQgbGVhc3QgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIGlmIEkgd2FudCBteSB3b3JrIHRvIGJlIHZhbGlkLiBCZXR0ZXIgdG8gY2hlY2sgbm93IGFuZCBzYXZlIHNvbWUgaGVhZGFjaGVzIGxhdGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTU5LVxua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jOjYwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNjEtIyBpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjYwLVxua2VybmVsL3NjaGVkL2NvcmUuYzoyNjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjYyLVx0aWYgKHBhID09IE1BWF9SVF9QUklPICYjNDM7IE1BWF9OSUNFICYjNDM7IDEpXHQvKiBleHQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ1NzM9c3RhdGljIHZvaWQgX19zY2hlZF9mb3JrKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYxMC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDYxMTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEyLVx0aW5pdF9zY3hfZW50aXR5KFx1MDAyNnAtXHUwMDNlc2N4KTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ4MTM9aW50IHNjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00ODYwLVx0XHRwLVx1MDAzZXNjaGVkX2NsYXNzID0gXHUwMDI2cnRfc2NoZWRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjQ4NjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDg2Mi1cdH0gZWxzZSBpZiAodGFza19zaG91bGRfc2N4KHAtXHUwMDNlcG9saWN5KSkge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzYwOD1jb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKl9fc2V0c2NoZWR1bGVyX2NsYXNzKGludCBwb2xpY3ksIGludCBwcmlvKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzYxNS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzYxNjojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2NvcmUuYy03NjE3LVx0aWYgKHRhc2tfc2hvdWxkX3NjeChwb2xpY3kpKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODg2OD1pbnQgc2NoZWRfY3B1X2R5aW5nKHVuc2lnbmVkIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04ODgyLVx0ZGxfc2VydmVyX3N0b3AoXHUwMDI2cnEtXHUwMDNlZmFpcl9zZXJ2ZXIpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo4ODgzOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg4ODQtXHRkbF9zZXJ2ZXJfc3RvcChcdTAwMjZycS1cdTAwM2VleHRfc2VydmVyKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg5NTE9dm9pZCBfX2luaXQgc2NoZWRfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2MC1cdEJVR19PTighc2NoZWRfY2xhc3NfYWJvdmUoXHUwMDI2ZmFpcl9zY2hlZF9jbGFzcywgXHUwMDI2aWRsZV9zY2hlZF9jbGFzcykpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo4OTYxOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NjItXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MsIFx1MDAyNmV4dF9zY2hlZF9jbGFzcykpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA3OC1cdFx0ZmFpcl9zZXJ2ZXJfaW5pdChycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjkwNzk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA4MC1cdFx0ZXh0X3NlcnZlcl9pbml0KHJxKTtcbi0tXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xMDg9c3RhdGljIGlubGluZSB1OCBkbF9nZXRfdHlwZShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMTMtXHRcdHJldHVybiBETF9TRVJWRVJfRkFJUjtcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjExNDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMTE1LVx0aWYgKGRsX3NlID09IFx1MDAyNnJxLVx1MDAzZWV4dF9zZXJ2ZXIpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MTg0Mj12b2lkIHNjaGVkX2luaXRfZGxfc2VydmVycyh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTE4NjYtXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYzoxODY3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY4LVx0XHRkbF9zZSA9IFx1MDAyNnJxLVx1MDAzZWV4dF9zZXJ2ZXI7XG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ1MT1zdGF0aWMgdm9pZCBkbF9zZXJ2ZXJfYWRkX2J3KHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMzQ1OC1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NTk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTM0NjAtXHRkbF9zZSA9IFx1MDAyNmNwdV9ycShjcHUpLVx1MDAzZWV4dF9zZXJ2ZXI7XG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ2Nj1zdGF0aWMgdTY0IGRsX3NlcnZlcl9yZWFkX2J3KGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMzQ3My1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NzQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTM0NzUtXHRpZiAoY3B1X3JxKGNwdSktXHUwMDNlZXh0X3NlcnZlci5kbF9zZXJ2ZXIgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NDk0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3NjaGVkO1xua2VybmVsL3NjaGVkL2RlYnVnLmMtNDk1LVxua2VybmVsL3NjaGVkL2RlYnVnLmM6NDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvZGVidWcuYy00OTctc3RhdGljIHNzaXplX3Rcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYz01NjE9c3RhdGljIHZvaWQgZGVidWdmc19leHRfc2VydmVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy01ODAtfVxua2VybmVsL3NjaGVkL2RlYnVnLmM6NTgxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXG5rZXJuZWwvc2NoZWQvZGVidWcuYy01ODItXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NjktXHRkZWJ1Z2ZzX2ZhaXJfc2VydmVyX2luaXQoKTtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjc3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNzcxLVx0ZGVidWdmc19leHRfc2VydmVyX2luaXQoKTtcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYz0xNDA2PXZvaWQgcHJvY19zY2hlZF9zaG93X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMTUwNS1cdH1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjE1MDY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTE1MDctXHRfX1BTKFwmIzM0O2V4dC5lbmFibGVkXCYjMzQ7LCB0YXNrX29uX3NjeChwKSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz02NDE9dm9pZCBzY3hfc2V0X3Rhc2tfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgc3RhdGUpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02OTctICogc2N4X3Rhc2tzIGNhbiBiZSByZW1vdmVkIGluIGZhdm9yIG9mIGFsd2F5cyB1c2luZyBjZ3JvdXAgaXRlcmF0aW9uIGlmXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjY5ODogKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUIGRlcGVuZHMgb24gQ09ORklHX0NHUk9VUFMuXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTY5OS0gKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOC0gKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC0xMC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTM5PWJvb2wgc2N4X3ByaW9fbGVzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmEsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYixcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTQyLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo0MzojZWxzZVx0LyogQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC00NC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTU3PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NjaGVkX2V4dF9jbGFzcyh2b2lkKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC01OC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NTk6I2VuZGlmXHQvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYwLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo2MTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC02Mi12b2lkIF9fc2N4X3VwZGF0ZV9pZGxlKHN0cnVjdCBycSAqcnEsIGJvb2wgaWRsZSwgYm9vbCBkb19ub3RpZnkpO1xuLS1cbmtlcm5lbC9zY2hlZC9pZGxlLmM9NTU3PXN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyX2lkbGUoc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU2OS1cdGRsX3NlcnZlcl91cGRhdGVfaWRsZShcdTAwMjZycS1cdTAwM2VmYWlyX3NlcnZlciwgZGVsdGFfZXhlYyk7XG5rZXJuZWwvc2NoZWQvaWRsZS5jOjU3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2lkbGUuYy01NzEtXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXHUwMDI2cnEtXHUwMDNlZXh0X3NlcnZlciwgZGVsdGFfZXhlYyk7XG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTk0PXN0YXRpYyBpbmxpbmUgaW50IG5vcm1hbF9wb2xpY3koaW50IHBvbGljeSlcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5NS17XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5Ny1cdGlmIChwb2xpY3kgPT0gU0NIRURfRVhUKVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTY4MT1zdHJ1Y3QgY2ZzX3JxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC03NzktXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo3ODA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTc4MS0vKiBzY3hfcnEtXHUwMDNlZmxhZ3MsIHByb3RlY3RlZCBieSB0aGUgcnEgbG9jayAqL1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTgxMT1zdHJ1Y3Qgc2N4X3JxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC04NTAtfTtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjg1MTojZW5kaWYgLyogQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL3NjaGVkLmgtODUyLVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjEzLVx0c3RydWN0IGRsX3JxXHRcdGRsO1xua2VybmVsL3NjaGVkL3NjaGVkLmg6MTIxNDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxNS1cdHN0cnVjdCBzY3hfcnFcdFx0c2N4O1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE4ODU9ZXh0ZXJuIHN0cnVjdCBiYWxhbmNlX2NhbGxiYWNrIGJhbGFuY2VfcHVzaF9jYWxsYmFjaztcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODYtXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxODg3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xODg4LWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgZXh0X3NjaGVkX2NsYXNzO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MDQ9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxMC1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjE5MTE6I2Vsc2UgLyogIUNPTkZJR19TQ0hFRF9DTEFTU19FWFQ6ICovXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTEyLSNkZWZpbmUgc2N4X2VuYWJsZWQoKVx0XHRmYWxzZVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MTY9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTE3OiNlbmRpZiAvKiAhQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxOC1cbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0yODQxPXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpuZXh0X2FjdGl2ZV9jbGFzcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzKVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NDMtXHRjbGFzcyYjNDM7JiM0Mzs7XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODQ0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODQ1LVx0aWYgKHNjeF9zd2l0Y2hlZF9hbGwoKSBcdTAwMjZcdTAwMjYgY2xhc3MgPT0gXHUwMDI2ZmFpcl9zY2hlZF9jbGFzcylcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz00NzQ9dm9pZCBycV9hdHRhY2hfcm9vdChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkKVxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTUxMi1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjUxMzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNTE0LVx0aWYgKHJxLVx1MDAzZWV4dF9zZXJ2ZXIuZGxfc2VydmVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb246CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoIGZvciBTQ0hFRF9DTEFTU19FWFQqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgU0NIRURfQ0xBU1NfRVhUYCBjb25maWcgb3B0aW9uIGxpdmVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIHRoZSBzY2hlZHVsZXIuIGBpbml0L0tjb25maWdgIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdlbmVyYWwgc3lzdGVtIGZlYXR1cmVzLCBidXQgZ2l2ZW4gaXQmIzM5O3Mgc2NoZWR1bGVyIHJlbGF0ZWQsIEnigJlsbCBsaWtlbHkgYmUgbW9yZSBzdWNjZXNzZnVsIGxvb2tpbmcgaW5zaWRlIGBrZXJuZWwvc2NoZWQvS2NvbmZpZ2AuIEFuZCwgZGVwZW5kaW5nLCBtYXliZSB0aGlzIGV4dGVuZHMgdG8gc29tZSBvZiB0aGUgcHJlZW1wdGlvbiBjb25maWd1cmF0aW9uIGlmIEkmIzM5O20gdGhpbmtpbmcgbW9yZSBicm9hZGx5IGFib3V0IGl0cyBpbXBsaWNhdGlvbnMuIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCYjMzk7cyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIGl0cyByZWxhdGVkIHRvIHNjaGVkdWxpbmcgY2xhc3Nlcywgb3IgcHJlZW1wdGlvbiwgYXMgdGhlIGNhc2UgbWF5IGJlLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGF0IHN0cmluZywgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCBpdHMgZGVmaW5pdGlvbiBhbmQgY29udGV4dCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0NIRURfQ0xBU1NfRVhUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9MTU1PWNvbmZpZyBTQ0hFRF9DT1JFXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNzItXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjE3Mzpjb25maWcgU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3NC1cdGJvb2wgXCYjMzQ7RXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFByZWVtcHRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgcHJlZW1wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGtlcm5lbC9LY29uZmlnLnByZWVtcHRgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTczLiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgcHJlZW1wdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBsaWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgY2hvaWNlcyB0aGVyZSB0aGF0IGRyaXZlIHRoZSBiZWhhdmlvcjogd2hldGhlciBpdCYjMzk7cyBmdWxsIHByZWVtcHRpb24sIHZvbHVudGFyeSBwcmVlbXB0aW9uLCBvciBtYXliZSBzb21lIG1vcmUgbnVhbmNlZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBhdXRob3JzIGNvbnNpZGVyZWQgY3JpdGljYWwgaW4gbWFraW5nIHRoZWlyIGRlY2lzaW9ucy4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIGJhc2lzIHRvIHNlZSB0aGUgaW50ZXItcmVsYXRlZCBpbXBhY3RzIGluIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XHQgIHdoaWNoIGlzIHRoZSBsaWtlbHkgdXNhZ2UgYnkgTGludXggZGlzdHJpYnV0aW9ucywgdGhlcmUgc2hvdWxkXG4gMTcxOlx0XHQgIGJlIG5vIG1lYXN1cmFibGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcbiAxNzQ6XHRcdGJvb2wgXCYjMzQ7RXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXCYjMzQ7XG4gMTc1Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuIDE3NjpcdFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gMTc3Olx0XHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAxNzg6XHRcdGhlbHBcbiAxNzk6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIG5ldyBzY2hlZHVsZXIgY2xhc3Mgc2NoZWRfZXh0IChTQ1gpLCB3aGljaFxuIDE4MDpcdFx0ICBhbGxvd3Mgc2NoZWR1bGluZyBwb2xpY2llcyB0byBiZSBpbXBsZW1lbnRlZCBhcyBCUEYgcHJvZ3JhbXMgdG9cbiAxODE6XHRcdCAgYWNoaWV2ZSB0aGUgZm9sbG93aW5nOlxuIDE4MjpcdFxuIDE4MzpcdFx0ICAtIEVhc2Ugb2YgZXhwZXJpbWVudGF0aW9uIGFuZCBleHBsb3JhdGlvbjogRW5hYmxpbmcgcmFwaWRcbiAxODQ6XHRcdCAgICBpdGVyYXRpb24gb2YgbmV3IHNjaGVkdWxpbmcgcG9saWNpZXMuXG4gMTg1Olx0XHQgIC0gQ3VzdG9taXphdGlvbjogQnVpbGRpbmcgYXBwbGljYXRpb24tc3BlY2lmaWMgc2NoZWR1bGVycyB3aGljaFxuIDE4NjpcdFx0ICAgIGltcGxlbWVudCBwb2xpY2llcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byBnZW5lcmFsLXB1cnBvc2VcbiAxODc6XHRcdCAgICBzY2hlZHVsZXJzLlxuIDE4ODpcdFx0ICAtIFJhcGlkIHNjaGVkdWxlciBkZXBsb3ltZW50czogTm9uLWRpc3J1cHRpdmUgc3dhcCBvdXRzIG9mXG4gMTg5Olx0XHQgICAgc2NoZWR1bGluZyBwb2xpY2llcyBpbiBwcm9kdWN0aW9uIGVudmlyb25tZW50cy5cbiAxOTA6XHRcbiAxOTE6XHRcdCAgc2NoZWRfZXh0IGxldmVyYWdlcyBCUEYgc3RydWN0X29wcyBmZWF0dXJlIHRvIGRlZmluZSBhIHN0cnVjdHVyZVxuIDE5MjpcdFx0ICB3aGljaCBleHBvcnRzIGZ1bmN0aW9uIGNhbGxiYWNrcyBhbmQgZmxhZ3MgdG8gQlBGIHByb2dyYW1zIHRoYXRcbiAxOTM6XHRcdCAgd2lzaCB0byBpbXBsZW1lbnQgc2NoZWR1bGluZyBwb2xpY2llcy4gVGhlIHN0cnVjdF9vcHMgc3RydWN0dXJlXG4gMTk0Olx0XHQgIGV4cG9ydGVkIGJ5IHNjaGVkX2V4dCBpcyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgYW5kIGlzIGNvbmNlcHR1YWxseVxuIDE5NTpcdFx0ICBzaW1pbGFyIHRvIHN0cnVjdCBzY2hlZF9jbGFzcy5cbiAxOTY6XHRcbiAxOTc6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb246XG4gMTk4Olx0XHQgICAgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZXh0LnJzdFxuIDE5OTpcdFx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zY2hlZC1leHQvc2N4XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaWdnaW5nIGludG8gU2NoZWR1bGVyIEV4dGVuc2lvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc2NoZWR1bGVyIGV4dGVuc2lvbnMgYXJlIGludGVyYWN0aW5nLiBNeSBodW5jaCB0ZWxscyBtZSB0aGUgcGllY2VzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgZ29pbmcgdG8gYmUgbHVya2luZyBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuaGAgYW5kIGBrZXJuZWwvc2NoZWQvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgODAgaW4gdGhlIGBleHQuaGAgaGVhZGVyLCBhbmQgdGhlbiBhcm91bmQgbGluZSAxMDI1OSBpbiB0aGUgY29yZSBmaWxlLiBJJiMzOTttIGhvcGluZyB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBmbGFncyB0aGF0IGFjdHVhbGx5ICplbmFibGUqIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGFuZCBgY3B1X2lkbGVfd3JpdGVfczY0YC4gVGhvc2UgdHdvIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtLiBCeSB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBleGFjdCBzZXQgb2YgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBwYXJ0aWN1bGFyIGJlaGF2aW9yLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBpZGxlIHRhc2sgbWFuYWdlbWVudCBpbnRlcmFjdHMgd2l0aCBzY2hlZHVsZXIgZXh0ZW5zaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZXh0L2V4dC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSkge31cbiAgNzE6XHQjZW5kaWZcbiAgNzI6XHRcbiAgNzM6XHQjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRFxuICA3NDpcdCNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG4gIDc1Olx0dm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xuICA3NjpcdGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XG4gIDc3Olx0dm9pZCBzY3hfdGdfb2ZmbGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xuICA3ODpcdGludCBzY3hfY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KTtcbiAgNzk6XHR2b2lkIHNjeF9jZ3JvdXBfbW92ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4gIDgwOlx0dm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KTtcbiAgODE6XHR2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XG4gIDgyOlx0dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xuICA4MzpcdHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cyk7XG4gIDg0Olx0I2Vsc2VcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbiAgODU6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7fVxuICA4NjpcdHN0YXRpYyBpbmxpbmUgaW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7IHJldHVybiAwOyB9XG4gIDg3Olx0c3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19vZmZsaW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cbiAgODg6XHRzdGF0aWMgaW5saW5lIGludCBzY3hfY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7IHJldHVybiAwOyB9XG4gIDg5Olx0c3RhdGljIGlubGluZSB2b2lkIHNjeF9jZ3JvdXBfbW92ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cbiAgOTA6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cbiAgOTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KSB7fVxuICA5MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XG4gIDkzOlx0c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4gIDk0Olx0I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG4gIDk1Olx0I2VuZGlmXHQvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBFeHRlbmRlZCBHcm91cCBTY2hlZHVsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYCBpcyBmbGFzaGluZyBhIG1lbnRhbCByZWQgZmxhZywgb3IgcGVyaGFwcyBhIGdyZWVuIGZsYWcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBrZXJuZWwgc291cmNlcywgb3IgbWF5YmUganVzdCBteSBsb2NhbCB0cmVlIGlmIEkgaGF2ZSBvbmUgc2V0IHVwIHdpdGggcmVsZXZhbnQgcGF0Y2hlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYENPTkZJR19FWFRfR1JPVVBfU0NIRURgIGlzIGFjdHVhbGx5IHVzZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQmIzM5O3MgKmRlZmluZWQqIGFuZCAqcmVmZXJlbmNlZCogd2l0aGluIHRoZSBzY2hlZHVsZXIgY29kZS4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgc2NoZWR1bGluZyBmZWF0dXJlcywgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIEkgbWlnaHQgYWxzbyBsb29rIGZvciB1c2VzIG9mIGBFWFRfR1JPVVBfU0NIRURgIGRpcmVjdGx5LCBhcyBpdCBtYXkgYmUgdXNlZCBpbiBtYWNyb3Mgb3Igb3RoZXIgZGVmaW5pdGlvbnMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBtYXAgdGhlIGxhbmRzY2FwZSBzdXJyb3VuZGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uOiBpdHMgcHVycG9zZSwgc2NvcGUsIGFuZCBpbXBhY3Qgb24gdGhlIGtlcm5lbCYjMzk7cyBzY2hlZHVsaW5nIGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGlmIGl0JiMzOTtzIG5ldywgb3IgYW4gZXZvbHV0aW9uIG9mIHNvbWV0aGluZyBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCwgb3IgaWYgSSYjMzk7dmUgYmVlbiBzbGVlcGluZyBvbiBhIHNpZ25pZmljYW50IHNjaGVkdWxlciBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFRfR1JPVVBfU0NIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9leHQuaD0xODU9c3RydWN0IHNjaGVkX2V4dF9lbnRpdHkge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgtMjgxLVx0LyogY29sZCBmaWVsZHMgKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0Lmg6MjgyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oLTI4My1cdHN0cnVjdCBjZ3JvdXBcdFx0KmNncnBfbW92aW5nX2Zyb207XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaD0zMDQ9c3RydWN0IHNjeF90YXNrX2dyb3VwIHtcbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0Lmg6MzA1OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oLTMwNi1cdC8qXG4tLVxuaW5pdC9LY29uZmlnPTExOTc9Y29uZmlnIFJUX0dST1VQX1NDSEVEX0RFRkFVTFRfRElTQUJMRURcbi0tXG5pbml0L0tjb25maWctMTIwNy1cbmluaXQvS2NvbmZpZzoxMjA4OmNvbmZpZyBFWFRfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMjA5LVx0Ym9vbFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTQxPUJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3Qgc2N4X2luaXRfdGFza19hcmdzKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTk0MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5NDMtXHRzdHJ1Y3QgY2dyb3VwICpjZ3JvdXA7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NzMtI2VuZGlmIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5NzQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3NS1cdHNjeF90Z19pbml0KFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5NzY6I2VuZGlmIC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3Ny0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVEXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0zNzkyPXN0YXRpYyB2b2lkIHRhc2tfdGlja19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBpbnQgcXVldWVkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgxMC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgxMTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODEyLXN0YXRpYyBzdHJ1Y3QgY2dyb3VwICp0Z19jZ3JwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MjYtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjM4Mjc6I2Vsc2VcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgyOC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MzAtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjM4MzE6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MzItXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NjQyPWJvb2wgc2N4X2Nhbl9zdG9wX3RpY2soc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2NzctXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ2Nzg6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY3OS1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5NDY9dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTY2LX1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk2NzojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk2OC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk2OTojaWYgZGVmaW5lZChDT05GSUdfRVhUX0dST1VQX1NDSEVEKSB8fCBkZWZpbmVkKENPTkZJR19FWFRfU1VCX1NDSEVEKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTcwLXN0YXRpYyBzdHJ1Y3QgY2dyb3VwICpyb290X2Nncm91cCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk4MD12b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk4Mi1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5ODM6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk4NC1cdHBlcmNwdV9kb3duX3dyaXRlKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5ODg9dm9pZCBzY3hfY2dyb3VwX3VubG9jayh2b2lkKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTg5LXtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk5MDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTkxLVx0cGVyY3B1X3VwX3dyaXRlKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTQtfVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTk1OiNlbHNlXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEIHx8IENPTkZJR19FWFRfU1VCX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTYtc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyb3VwICpyb290X2Nncm91cCh2b2lkKSB7IHJldHVybiBOVUxMOyB9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX3VubG9jayh2b2lkKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTk5OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCB8fCBDT05GSUdfRVhUX1NVQl9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MDAwLVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NTExMD1zdGF0aWMgdm9pZCBkZXN0cm95X2RzcShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHU2NCBkc3FfaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTQ4LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo1MTQ5OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNTAtc3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNzU9c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgaW5pdF90YXNrKTpcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA4MzojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDg0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI0MD1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI0MTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQyLXN0YXRpYyBzMzIgc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzICphcmdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjQ5PXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfaWRsZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyNTA6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyNTEtc3RhdGljIHMzMiBzY2hlZF9leHRfb3BzX19zdWJfYXR0YWNoKHN0cnVjdCBzY3hfc3ViX2F0dGFjaF9hcmdzICphcmdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjYyPXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyBfX2JwZl9vcHNfc2NoZWRfZXh0X29wcyA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODItXHQuZGlzYWJsZVx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODM6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4NC1cdC5jZ3JvdXBfaW5pdFx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyOT1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNDctXHQuZGlzYWJsZVx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNDg6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM0OS1cdC5jcHVjdGxfaW5pdFx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA3ODY9c3RhdGljIGNvbnN0IHUzMiBzY3hfa2ZfYWxsb3dfZmxhZ3NbXSA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkyLVx0W1NDWF9PUF9JRFgoZHVtcCldXHRcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDc5MzojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5NC1cdFtTQ1hfT1BfSURYKGNncm91cF9pbml0KV1cdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA4MDAtXHRbU0NYX09QX0lEWChjZ3JvdXBfc2V0X2lkbGUpXVx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwODAxOiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDgwMi1cdFtTQ1hfT1BfSURYKHN1Yl9hdHRhY2gpXVx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDkwMT1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTYtXHRDSURfT0ZGU0VUX01BVENIKGR1bXBfY3B1LCBkdW1wX2NpZCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTU3OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTU4LVx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfaW5pdCwgY3B1Y3RsX2luaXQpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTEwNTQ9X19pbml0Y2FsbChzY3hfaW5pdCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2NC0gKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwNjU6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjYtREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDY3OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NzA9c3RhdGljIGlubGluZSB2b2lkIHNjeF91cGRhdGVfaWRsZShzdHJ1Y3QgcnEgKnJxLCBib29sIGlkbGUsIGJvb2wgZG9fbm90aWZ5KSB7fVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzMtI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NzQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzUtdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODM9dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODQ6I2Vsc2VcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODUtc3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkzPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo5NDojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTUtI2VuZGlmXHQvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTIzNT1zdHJ1Y3Qgc2N4X2luaXRfdGFza19hcmdzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMjQwLVx0Ym9vbFx0XHRcdGZvcms7XG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjQxOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMjQyLVx0LyogdGhlIGNncm91cCB0aGUgdGFzayBpcyBqb2luaW5nICovXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTMyMj1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1MS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NTI6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTMtXHQvKipcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzg2LVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjc4NzojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODgtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTEwNDY9c3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3MS1cdHZvaWQgKCpkdW1wX3Rhc2spKHN0cnVjdCBzY3hfZHVtcF9jdHggKmN0eCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDcyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3My1cdHMzMiAoKmNwdWN0bF9pbml0KShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgKmFyZ3MpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDgzLVx0dm9pZCAoKmNwdWN0bF9zZXRfaWRsZSkoc3RydWN0IGNncm91cCAqY2dycCwgYm9vbCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDg0OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwODUtXHRzMzIgKCpzdWJfYXR0YWNoKShzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncyAqYXJncyk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTIwNzk9dm9pZCBzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoyMDgwOiNpZiBkZWZpbmVkKENPTkZJR19FWFRfR1JPVVBfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX0VYVF9TVUJfU0NIRUQpXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMjA4MS12b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jPTEyOTQ9c3RhdGljIHZvaWQgc2N4X2ZhaWxfcGFyZW50KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzMjAtXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzMjE6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMyMi0vKipcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvY29uZmlnPTM9Q09ORklHX0NHUk9VUF9TQ0hFRD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvY29uZmlnOjQ6Q09ORklHX0VYVF9HUk9VUF9TQ0hFRD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvY29uZmlnLTUtQ09ORklHX0JQRj15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBzeXN0ZW0uIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgbGVhZCwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBNeSBndXQgc2F5cyBpdCYjMzk7cyBsaWtlbHkgYSBzZXR0aW5nIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcywgcHJvYmFibHkgcmVsYXRlZCB0byBhIGNvbXBvbmVudCBvciBmZWF0dXJlIGJlaW5nIGluaXRpYWxpemVkIGF0IGJvb3QuIFNvLCBJIG5lZWQgdG8gY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcGxhY2UgZm9yIHRoZXNlIHNvcnRzIG9mIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzY2FuIGFyb3VuZCBsaW5lIDEyMDguIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBzZXR0aW5nIEkgYW0gaW50ZXJlc3RlZCBpbiBpcyBkZWZpbmVkLCBvciBhdCBsZWFzdCBsaW5rZWQgdG8uIFRpbWUgdG8gZ2V0IGRvd24gdG8gZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTk1Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4xMTk2Olx0XG4xMTk3Olx0Y29uZmlnIFJUX0dST1VQX1NDSEVEX0RFRkFVTFRfRElTQUJMRURcbjExOTg6XHRcdGJvb2wgXCYjMzQ7UmVxdWlyZSBib290IHBhcmFtZXRlciB0byBlbmFibGUgZ3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfUlIvRklGT1wmIzM0O1xuMTE5OTpcdFx0ZGVwZW5kcyBvbiBSVF9HUk9VUF9TQ0hFRFxuMTIwMDpcdFx0ZGVmYXVsdCBuXG4xMjAxOlx0XHRoZWxwXG4xMjAyOlx0XHQgIFdoZW4gc2V0LCB0aGUgUlQgZ3JvdXAgc2NoZWR1bGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBUaGUgb3B0aW9uXG4xMjAzOlx0XHQgIGlzIGluIGludmVydGVkIGZvcm0gc28gdGhhdCBtZXJlIFJUX0dST1VQX1NDSEVEIGVuYWJsZXMgdGhlIGdyb3VwXG4xMjA0Olx0XHQgIHNjaGVkdWxpbmcuXG4xMjA1Olx0XG4xMjA2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEyMDc6XHRcbjEyMDg6XHRjb25maWcgRVhUX0dST1VQX1NDSEVEXG4xMjA5Olx0XHRib29sXG4xMjEwOlx0XHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcdTAwMjZcdTAwMjYgQ0dST1VQX1NDSEVEXG4xMjExOlx0XHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXG4xMjEyOlx0XHRzZWxlY3QgR1JPVVBfU0NIRURfQkFORFdJRFRIXG4xMjEzOlx0XHRkZWZhdWx0IHlcbjEyMTQ6XHRcbjEyMTU6XHRlbmRpZiAjQ0dST1VQX1NDSEVEXG4xMjE2Olx0XG4xMjE3Olx0Y29uZmlnIEVYVF9TVUJfU0NIRURcbjEyMTg6XHQgICAgICAgIGRlZl9ib29sIHlcbjEyMTk6XHQgICAgICAgIGRlcGVuZHMgb24gU0NIRURfQ0xBU1NfRVhUIFx1MDAyNlx1MDAyNiBDR1JPVVBTXG4xMjIwOlx0XG4xMjIxOlx0Y29uZmlnIFNDSEVEX01NX0NJRFxuMTIyMjpcdFx0ZGVmX2Jvb2wgeVxuMTIyMzpcdFx0ZGVwZW5kcyBvbiBTTVAgXHUwMDI2XHUwMDI2IFJTRVFcbjEyMjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHRlbmRlZCBHcm91cCBTY2hlZHVsaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBFWFRfR1JPVVBfU0NIRURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCwgYW5kIHRoYXQgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIGBTQ0hFRF9DTEFTU19FWFRgLCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxyaWdodCwgc28gdGhlIGV4dGVuZGVkIHNjaGVkdWxlciBjbGFzcyBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBCUEYgZnVuY3Rpb25hbGl0aWVzLCBhbmQgZGVidWcgaW5mby4gVGhpcyBhbGwgc2VlbXMgdG8gYmUgYnVpbGRpbmcgYSBwaWN0dXJlIG9mIGEgbW9yZSBmbGV4aWJsZSBhbmQgcHJvZ3JhbW1hYmxlIHNjaGVkdWxpbmcgZW52aXJvbm1lbnQuCgpMZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGZvciBhIG1vbWVudC4gVG8gc2VlIGhvdyB0aGVzZSBzY2hlZHVsaW5nIHByaW5jaXBsZXMgYXJlIGFwcGxpZWQsIEkgd2FudCB0byBleHBsb3JlIGhvdyBgY3B1X2lkbGVfd3JpdGVfczY0YCB3b3JrcyBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aHJvdWdoIHRoYXQgZnVuY3Rpb24gdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24mIzM5O3MgaW1wYWN0IGlzIHJlYWxpemVkLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3B1X2lkbGVfd3JpdGVfczY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9MTAyNTM9c3RhdGljIHM2NCBjcHVfaWRsZV9yZWFkX3M2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNTgtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjU5OnN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjYwLVx0XHRcdFx0c3RydWN0IGNmdHlwZSAqY2Z0LCBzNjQgaWRsZSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTEwMjcxPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNwdV9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjgwLVx0XHQucmVhZF9zNjQgPSBjcHVfaWRsZV9yZWFkX3M2NCxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTAyODE6XHRcdC53cml0ZV9zNjQgPSBjcHVfaWRsZV93cml0ZV9zNjQsXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjgyLVx0fSxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTEwNTQxPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNwdV9maWxlc1tdID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA1NTgtXHRcdC5yZWFkX3M2NCA9IGNwdV9pZGxlX3JlYWRfczY0LFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDU1OTpcdFx0LndyaXRlX3M2NCA9IGNwdV9pZGxlX3dyaXRlX3M2NCxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA1NjAtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgU2NoZWR1bGVyIENvcmUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIExpbnV4IHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvc2NoZWQvY29yZS5jYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gbGluZSAxMDI1OS4gSSBrbm93IHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBzcGVjaWZpYyBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGdpdmVuIHRoZSBjb250ZXh0IEkmIzM5O20gd29ya2luZyB3aXRoLiBUaGlzIGZ1bmN0aW9uIGNhbGwuLi4gdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3Igd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gSXQmIzM5O3Mgb2Z0ZW4gaGVscGZ1bCB0byBwaW5wb2ludCB0aGUgY29kZSBsb2NhdGlvbiBkaXJlY3RseSBpbnN0ZWFkIG9mIHNlYXJjaGluZyB0aHJvdWdoIHRoZSBlbnRpcmUgY29kZSBvciBsb29raW5nIGluIHRoZSBkb2N1bWVudGF0aW9uLiBIb3BlZnVsbHksIHRoaXMgc3RhcnRpbmcgcG9pbnQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIG9mIHRhc2sgc2NoZWR1bGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAyNTA6XHQjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovXG4xMDI1MTpcdFxuMTAyNTI6XHQjaWZkZWYgQ09ORklHX0dST1VQX1NDSEVEX1dFSUdIVFxuMTAyNTM6XHRzdGF0aWMgczY0IGNwdV9pZGxlX3JlYWRfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4xMDI1NDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnQpXG4xMDI1NTpcdHtcbjEwMjU2Olx0XHRyZXR1cm4gY3NzX3RnKGNzcyktXHUwMDNlaWRsZTtcbjEwMjU3Olx0fVxuMTAyNTg6XHRcbjEwMjU5Olx0c3RhdGljIGludCBjcHVfaWRsZV93cml0ZV9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbjEwMjYwOlx0XHRcdFx0XHRzdHJ1Y3QgY2Z0eXBlICpjZnQsIHM2NCBpZGxlKVxuMTAyNjE6XHR7XG4xMDI2MjpcdFx0aW50IHJldDtcbjEwMjYzOlx0XG4xMDI2NDpcdFx0cmV0ID0gc2NoZWRfZ3JvdXBfc2V0X2lkbGUoY3NzX3RnKGNzcyksIGlkbGUpO1xuMTAyNjU6XHRcdGlmICghcmV0KVxuMTAyNjY6XHRcdFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcbjEwMjY3Olx0XHRyZXR1cm4gcmV0O1xuMTAyNjg6XHR9XG4xMDI2OTpcdCNlbmRpZiAvKiBDT05GSUdfR1JPVVBfU0NIRURfV0VJR0hUICovXG4xMDI3MDpcdFxuMTAyNzE6XHRzdGF0aWMgc3RydWN0IGNmdHlwZSBjcHVfbGVnYWN5X2ZpbGVzW10gPSB7XG4xMDI3MjpcdCNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRURfV0VJR0hUXG4xMDI3MzpcdFx0e1xuMTAyNzQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDtzaGFyZXNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBTY2hlZHVsZXIgRXh0IENncm91cCBJZGxlIFN0YXRlIEhhbmRsaW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGRlYWw6IEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgc2N4X2dyb3VwX3NldF9pZGxlYCwgcGFydCBvZiB0aGUgc2NoZWR1bGVyJiMzOTtzIGV4dGVuc2libGUgY2xhc3MgKGBzY2hlZF9leHRgKS4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBpZGxlIHN0YXRlIHdpdGhpbiBjZ3JvdXBzLiAgSXQgc2VlbXMgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIGNhbGxpbmcgdGhlIEJQRiBvcGVyYXRpb24gYGNncm91cF9zZXRfaWRsZWAgdW5jb25kaXRpb25hbGx5LiBUaGlzIGlzIGEgcHJvYmxlbSwgYmVjYXVzZSBpdCYjMzk7cyBpbmVmZmljaWVudCBhbmQgcG90ZW50aWFsbHkgYnVnZ3kuCgpUaGUgZml4PyAgQSBzaW1wbGUsIGJ1dCBjcnVjaWFsLCBjaGVjazogYHRnLSZndDtzY3guc2NoZWRfaWRsZSAhPSBpZGxlYC4gVGhpcyBwcmV2ZW50cyByZWR1bmRhbnQgY2FsbHMgdG8gYGNncm91cF9zZXRfaWRsZWAgd2hlbiB0aGUgaWRsZSBzdGF0ZSBoYXNuJiMzOTt0IGFjdHVhbGx5IGNoYW5nZWQuICBFc3NlbnRpYWxseSwgbWFraW5nIHRoaXMgbW9kaWZpY2F0aW9uIGlzIHNpbWlsYXIgdG8gd2hhdCYjMzk7cyBkb25lIGZvciB0aGUgYHdlaWdodGAgYW5kIGBiYW5kd2lkdGhgIGNncm91cCBvcGVyYXRpb25zIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dvcnRoIGZ1enppbmc/JiMzNDsgQmFzZWQgb24gbXkgY3JpdGVyaWEsIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBzY2hlZHVsZXIgbG9naWMgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgLiBUaGUgY29kZSBpcyAqcmVhY2hhYmxlKiBmcm9tIHVzZXJzcGFjZSB2aWEgd3JpdGluZyB0byB0aGUgYGNwdS5pZGxlYCBjZ3JvdXAgY29udHJvbCBmaWxlLCB3aGljaCBjYWxscyB0aGUgYGNwdV9pZGxlX3dyaXRlX3M2NGAgZnVuY3Rpb24uIFRoaXMgcGF0Y2ggZGVmaW5pdGVseSBtb2RpZmllcyBhIGNvcmUgY29tcG9uZW50LgoKVG8gdmVyaWZ5IG15IGZ1enppbmcgaHlwb3RoZXNpcywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGNvbmZpZ3MgYW5kIHN5bWJvbHMgbmVlZCB0byBiZSBzZXQuICBPYnZpb3VzbHksIEkgbmVlZCBgU0NIRURfQ0xBU1NfRVhUYCwgYENHUk9VUF9TQ0hFRGAsIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBERUJVR19JTkZPX0JURmAuIFRoZXNlIGVuYWJsZSB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGFuZCBhcmUgY3JpdGljYWwgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBzY2hlZF9leHRgLiAgRW5hYmxpbmcgdGhlc2UgYWxzbyBpbXBsaWVzIHRoZSBlbmFibGVtZW50IG9mIGBFWFRfR1JPVVBfU0NIRURgLgoKSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGF0IHRoZSBmdW5jdGlvbnMgYHNjeF9ncm91cF9zZXRfaWRsZWAgYW5kIGBjcHVfaWRsZV93cml0ZV9zNjRgIGFyZSBpbXBvcnRhbnQgdG8gbm90ZS4KClNvLCBpbiBjb25jbHVzaW9uLCB0aGUgYW5zd2VyIGlzICpXb3J0aEZ1enppbmc9dHJ1ZSouICBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpbmVmZmljaWVuY3kgaW4gYSBjb3JlIHNjaGVkdWxpbmcgcGF0aCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyB0byB1bmNvdmVyIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvciByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcmVkdW5kYW50IGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1NDSEVEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMTQ4PWNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4tLVxuaW5pdC9LY29uZmlnLTExNTItXG5pbml0L0tjb25maWc6MTE1MzptZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnLTExNTQtXHRib29sIFwmIzM0O0NQVSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBzdHVmZi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gYmUsIGFuZCBJIHJlbWVtYmVyIHNvbWV0aGluZyBiZWluZyBpbiB0aGF0IGFyZWEgcmVnYXJkaW5nIGl0cyBzdHJ1Y3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMTE1MyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eSBncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUxOlx0XHRkZWZhdWx0IHlcbjExNTI6XHRcbjExNTM6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1NDpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NTpcdFx0ZGVmYXVsdCBuXG4xMTU2Olx0XHRoZWxwXG4xMTU3Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1ODpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTk6XHRcdCAgdGFza3MuXG4xMTYwOlx0XG4xMTYxOlx0aWYgQ0dST1VQX1NDSEVEXG4xMTYyOlx0Y29uZmlnIEdST1VQX1NDSEVEX1dFSUdIVFxuMTE2MzpcdFx0ZGVmX2Jvb2wgblxuMTE2NDpcdFxuMTE2NTpcdGNvbmZpZyBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcbjExNjY6XHRcdGRlZl9ib29sIG5cbjExNjc6XHRcbjExNjg6XHRjb25maWcgRkFJUl9HUk9VUF9TQ0hFRFxuMTE2OTpcdFx0Ym9vbCBcJiMzNDtHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9PVEhFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA4MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlnIGZvciBDR1JPVVBfU0NIRUQqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgQ0dST1VQX1NDSEVEYCDigJMgd2hhdGV2ZXIgaXQgaXMg4oCTIGlzICpkZXBlbmRlbnQqIG9uIGBDR1JPVVBTYC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZywgcmVhbGx5OyBpdCYjMzk7cyBwcmFjdGljYWxseSBhIGdpdmVuIHdpdGggdGhpcyBraW5kIG9mIG1vZHVsYXJpdHkuIElmIEkgd2FudCB0byBlbmFibGUgYWR2YW5jZWQgc2NoZWR1bGluZyB3aXRoaW4gY2dyb3VwcywgSSYjMzk7bGwgbmVlZCB0aGUgY2dyb3VwIGluZnJhc3RydWN0dXJlIGl0c2VsZiBmaXJzdC4gU28sIHRoZSBwYXJlbnQgbWVudSBvciBjb25maWcgb3B0aW9uIGlzIGNsZWFybHkgYENHUk9VUFNgLgoKQWxyaWdodCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0IGV4cGxpY2l0bHkuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IGBDR1JPVVBfU0NIRURgICppcyogaW4gdGhhdCBjb250ZXh0LiBXaGF0IGZlYXR1cmVzIGRvZXMgaXQgZW5hYmxlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBleGFtaW5pbmcgYGluaXQvS2NvbmZpZ2Agd2lsbCBwcm92aWRlIHRoZSBmdWxsIHBpY3R1cmUuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIENHUk9VUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDU0PWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA1Ni1cbmluaXQvS2NvbmZpZzoxMDU3Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNTgtXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ2NAoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWxpemluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1pemVkIEtlcm5lbCBGdXp6aW5nKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gY29uZmlndXJpbmcgYW5kIHdoeS4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7dmUgZ290IG15IGxpc3Q6IGBTQ0hFRF9DTEFTU19FWFRgLCBgQ0dST1VQU2AsIGBDR1JPVVBfU0NIRURgLCBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYEJQRl9KSVRgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlcyBhbmQgaW5zdHJ1bWVudGF0aW9uIEkgbmVlZCBmb3IgZWZmZWN0aXZlIGZ1enppbmcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJlYXMgcmVsYXRlZCB0byBzY2hlZHVsaW5nLCBjZ3JvdXBzLCBhbmQgQlBGLiBFbmFibGluZyB0aGUgQlRGIGRhdGEgd2lsbCBnaXZlIGJldHRlciBjb3ZlcmFnZSBpbiB0cmFjaW5nIGFuZCBhbmFseXNpcy4gQlBGIGlzIGNlbnRyYWwsIG9mIGNvdXJzZSwgdG8gaG9va2luZyBpbnRvIHRoZSBrZXJuZWwgYW5kIG9ic2VydmluZyBpdHMgYmVoYXZpb3VyLgoKTm93LCByZWdhcmRpbmcgc3BlY2lmaWMgdGFyZ2V0cywgSSYjMzk7bSBmb2N1c2luZyBvbiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSBzZWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNjaGVkdWxlciBhbmQgY2dyb3VwJiMzOTtzIENQVSBpZGxlIHN0YXRlLiBUaGUgY2hhbmdlIGhlcmUgaXMgY2hlY2tpbmcgd2hldGhlciB0aGUgYHNjaGVkX2lkbGVgIGhhcyBjaGFuZ2VkIGJlZm9yZSBpbnZva2luZyB0aGUgQlBGIGNhbGxiYWNrLiBUaGlzIGlzIG91ciBhcmVhIG9mIGludGVyZXN0LCB0aGUgcG90ZW50aWFsIGZvciBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBUaGUgY2dyb3VwIGNwdS5pZGxlIGtub2IgcHJvdmlkZXMgYWNjZXNzIHRvIHRoaXMgZnVuY3Rpb24gc28gd2UgaGF2ZSBhIHRhcmdldGFibGUga25vYiBmb3IgdGhpcy4KClNvLCBpbiBzdW1tYXJ5OgoKKiAgIEkmIzM5O20gY29uZmlkZW50IHRoaXMgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBiZSBmdXp6aW5nIChXb3J0aEZ1enppbmc6IGB0cnVlYCkuCiogICBNeSBtYWluIHRhcmdldCBpcyB0aGUgYHNjeF9ncm91cF9zZXRfaWRsZWAgZnVuY3Rpb24gKEZvY3VzU3ltYm9sczogYFsmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7XWApLgoqICAgVG8gZW5hYmxlIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eSBhbmQgb2JzZXJ2YWJpbGl0eSwgdGhlIGZvbGxvd2luZyBjb25maWdzIGFyZSBzZXQgKEVuYWJsZUNvbmZpZ3M6IGBbJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OywgJiMzNDtDR1JPVVBTJiMzNDssICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywgJiMzNDtCUEZfSklUJiMzNDssICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0O11gKS4KKiAgIE15IHJlYXNvbmluZyBpcyBjb25jaXNlOiBXZSB3YW50IHRvIHRyaWdnZXIgYSBCUEYgY2FsbGJhY2sgcmVsYXRlZCB0byB0aGUgY2dyb3VwIGNwdS5pZGxlIGtub2Igd2hpY2ggd2UgY2FuIHJlYWNoIGJ5IGNoYW5naW5nIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLgoKQWxyaWdodCwgSSYjMzk7bSBoYXBweSB3aXRoIHRoaXMgYXNzZXNzbWVudC4gTGV0JiMzOTtzIGV4ZWN1dGUgYHNldC1yZXN1bHRzYCBhbmQgZ2V0IHRoaXMgcm9sbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjeF9ncm91cF9zZXRfaWRsZSgpIGluIHRoZSBleHRlbnNpYmxlIHNjaGVkdWxlciBjbGFzcyAoc2NoZWRfZXh0KSB0byBhdm9pZCBpbnZva2luZyB0aGUgY2dyb3VwX3NldF9pZGxlIEJQRiBjYWxsYmFjayBpZiB0aGUgdGFzayBncm91cCYjMzk7cyBpZGxlIHN0YXRlIGhhc24mIzM5O3QgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBjZ3JvdXAgQ1BVIGNvbnRyb2xsZXIgaW50ZXJmYWNlIChlLmcuIGNwdS5pZGxlIGtub2IpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzY3hfZ3JvdXBfc2V0X2lkbGUoKSBpbiB0aGUgZXh0ZW5zaWJsZSBzY2hlZHVsZXIgY2xhc3MgKHNjaGVkX2V4dCkgdG8gYXZvaWQgaW52b2tpbmcgdGhlIGNncm91cF9zZXRfaWRsZSBCUEYgY2FsbGJhY2sgaWYgdGhlIHRhc2sgZ3JvdXAmIzM5O3MgaWRsZSBzdGF0ZSBoYXNuJiMzOTt0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzY3hfZ3JvdXBfc2V0X2lkbGUoKWAgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHRvIGNoZWNrIGB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlYCBiZWZvcmUgaW52b2tpbmcgdGhlIGBjZ3JvdXBfc2V0X2lkbGVgIHNjaGVkdWxlciBvcGVyYXRpb24gY2FsbGJhY2ssIGF2b2lkaW5nIHJlZHVuZGFudCBjYWxsYmFja3Mgd2hlbiB0aGUgaWRsZSBzdGF0ZSBkb2VzIG5vdCBjaGFuZ2UuXG5cbmB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZWAgaXMgYSBib29sZWFuIG1lbWJlciBvZiBgc3RydWN0IHRhc2tfZ3JvdXBgIHRoYXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBzY3hfdGdfaW5pdCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaGVhcCBvciBzdGFjayBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzdhM2EwZDQwNDI2NWM4NmRiNjMxZjdiMGRjNzgxMTNkNjUwYzUyNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDE6NTU6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuYwppbmRleCA4MDQxYzg3YTM1NjJlLi44YjM2MjUxMDdiNzI0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKQEAgLTQ5MzMsNyAmIzQzOzQ5MzMsOCBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkKIAlwZXJjcHVfZG93bl9yZWFkKCZhbXA7c2N4X2Nncm91cF9vcHNfcndzZW0pOwogCXNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTsKIAotCWlmIChzY3hfY2dyb3VwX2VuYWJsZWQgJmFtcDsmYW1wOyBzY2ggJmFtcDsmYW1wOyBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSkKJiM0MzsJaWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCAmYW1wOyZhbXA7IHNjaCAmYW1wOyZhbXA7IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpICZhbXA7JmFtcDsKJiM0MzsJICAgIHRnLSZndDtzY3guc2NoZWRfaWRsZSAhPSBpZGxlKQogCQlTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpOwogCiAJLyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBQYXRjaCBBbmFseXNpcyAmYW1wOyBDb250ZXh0KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSwgd2hpY2ggSSYjMzk7bSBwcmV0dHkgc3VyZSB3aWxsIGJlIGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ5MzMuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgc2NoZWR1bGVyJiMzOTtzIGV4dGVuc2lvbnMuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgaW5zcGVjdCB0aGUgY29udGV4dCBhcm91bmQgdGhhdCBsaW5lLiBNeSBwcmVmZXJyZWQgdG9vbHMgZm9yIHRoaXMga2luZCBvZiBxdWljayBpbnZlc3RpZ2F0aW9uIGFyZSBlaXRoZXIgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLiBJJiMzOTtsbCByZWFjaCBmb3Igd2hpY2hldmVyIG9uZSBpcyBmYXN0ZXN0IHRvIGdldCBtZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIHRoZSBzaXR1YXRpb24uIEl0JiMzOTtzIGFib3V0IGVzdGFibGlzaGluZyBhIHNvbGlkIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZ28gYW55IGRlZXBlci4gSSBleHBlY3QgdGhlIGNvbnRleHQgd2lsbCByZXZlYWwgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucywgdmFyaWFibGVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGJ1aWxkIGEgbW9yZSBjb21wcmVoZW5zaXZlIG1lbnRhbCBtb2RlbCBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9leHQvZXh0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5MjA6XHRcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0KSBcdTAwMjZcdTAwMjZcbjQ5MjE6XHRcdCAgICB0Zy1cdTAwM2VzY3gud2VpZ2h0ICE9IHdlaWdodClcbjQ5MjI6XHRcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCwgTlVMTCwgdGdfY2dycCh0ZyksIHdlaWdodCk7XG40OTIzOlx0XG40OTI0Olx0XHR0Zy1cdTAwM2VzY3gud2VpZ2h0ID0gd2VpZ2h0O1xuNDkyNTpcdFxuNDkyNjpcdFx0cGVyY3B1X3VwX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuNDkyNzpcdH1cbjQ5Mjg6XHRcbjQ5Mjk6XHR2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcbjQ5MzA6XHR7XG40OTMxOlx0XHRzdHJ1Y3Qgc2N4X3NjaGVkICpzY2g7XG40OTMyOlx0XG40OTMzOlx0XHRwZXJjcHVfZG93bl9yZWFkKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbjQ5MzQ6XHRcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcbjQ5MzU6XHRcbjQ5MzY6XHRcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXHUwMDI2XHUwMDI2XG40OTM3Olx0XHQgICAgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcbjQ5Mzg6XHRcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcbjQ5Mzk6XHRcbjQ5NDA6XHRcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCYjMzk7cyBpZGxlIHN0YXRlICovXG40OTQxOlx0XHR0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XG40OTQyOlx0XG40OTQzOlx0XHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG40OTQ0Olx0fVxuNDk0NTpcdFxuNDk0NjpcdHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLFxuNDk0NzpcdFx0XHRcdCAgICAgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpXG40OTQ4Olx0e1xuNDk0OTpcdFx0c3RydWN0IHNjeF9zY2hlZCAqc2NoO1xuNDk1MDpcdFxuNDk1MTpcdFx0cGVyY3B1X2Rvd25fcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG40OTUyOlx0XHRzY2ggPSBzY3hfdGdfa25vYl9zY2hlZCh0Zyk7XG40OTUzOlx0XG40OTU0Olx0XHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBzY2ggXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCkgXHUwMDI2XHUwMDI2XG40OTU1Olx0XHQgICAgKHRnLVx1MDAzZXNjeC5id19wZXJpb2RfdXMgIT0gcGVyaW9kX3VzIHx8XG40OTU2Olx0XHQgICAgIHRnLVx1MDAzZXNjeC5id19xdW90YV91cyAhPSBxdW90YV91cyB8fFxuNDk1NzpcdFx0ICAgICB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMgIT0gYnVyc3RfdXMpKVxuNDk1ODpcdFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfYmFuZHdpZHRoLCBOVUxMLFxuNDk1OTpcdFx0XHRcdCAgICB0Z19jZ3JwKHRnKSwgcGVyaW9kX3VzLCBxdW90YV91cywgYnVyc3RfdXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0Zy0mZ3Q7c2N4IGFuZCBJZGxlIEdyb3VwIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgdGctJmd0O3NjeGAsIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgYW5kIHRoZSByb2xlIG9mIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB0Zy0mZ3Q7c2N4YCBhbmQgZm9sbG93IHRoZSB1c2FnZSBvZiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdvb2Qgb2xkLWZhc2hpb25lZCBjb2RlIHNlYXJjaC4gSSYjMzk7bGwgbG9vayBmb3IgaW5zdGFuY2VzIG9mIGBzY2hlZF9pZGxlYCBiZWNhdXNlIHRoYXQmIzM5O3Mgb2Z0ZW4gdGllZCB0byBpZGxlIGdyb3VwIG1hbmFnZW1lbnQuIEFsdGVybmF0aXZlbHksIEkmIzM5O2xsIHNlYXJjaCBmb3IgYHNjeF9ncm91cF9zZXRfaWRsZWAgZGlyZWN0bHksIGFzIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBtb3JlIHRhcmdldGVkIHZpZXcgb2YgaXRzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGlkbGUgZ3JvdXBzIGFyZSBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3hfZ3JvdXBfc2V0X2lkbGV8c2NoZWRfaWRsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3BzdG9yZS1ibGsucnN0PTEyND1yZWxhdGVkIGhhbmdzLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdXNhZ2U6OlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3QtMTM1LSBDUFU6MCB0czo1OTE0NjgwIGMwMzllOWEwICBjMDM5ZWNmMCAgY3B1aWRsZV9lbnRlcl9mcmVlemUgXHUwMDNjLSBjcHVpZGxlX2VudGVyX3N0YXRlJiM0MzsweDMwNC8weDMxNFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJzdDoxMzY6IENQVTowIHRzOjU5MTQ2ODEgYzAwNjM4NzAgIGMwMzllYTMwICBzY2hlZF9pZGxlX3NldF9zdGF0ZSBcdTAwM2MtIGNwdWlkbGVfZW50ZXJfc3RhdGUmIzQzOzB4NDQvMHgzMTRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3QtMTM3LSBDUFU6MSB0czo1OTE2NzIwIGMwMTYwZjU5ICBjMDE1ZWUwNCAga2VybmZzX3VubWFwX2Jpbl9maWxlIFx1MDAzYy0gX19rZXJuZnNfcmVtb3ZlJiM0MzsweDE0MC8weDIwNFxuLS1cbk5leHQvbWVyZ2UubG9nPTQwNDg9TWVyZ2UgbWFkZSBieSB0aGUgJiMzOTtvcnQmIzM5OyBzdHJhdGVneS5cbi0tXG5OZXh0L21lcmdlLmxvZy00MDUwLSAxIGZpbGUgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygmIzQzOyksIDg1IGRlbGV0aW9ucygtKVxuTmV4dC9tZXJnZS5sb2c6NDA1MTpNZXJnaW5nIHNjaGVkLWV4dC9mb3ItbmV4dCAoMTRlYmE2ZDk4Y2FiZSBzY2hlZF9leHQ6IFJlbmFtZSB0Zy1cdTAwM2VzY3guaWRsZSB0byB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSlcbk5leHQvbWVyZ2UubG9nLTQwNTItJCBnaXQgbWVyZ2UgLW0gTWVyZ2UgYnJhbmNoICYjMzk7Zm9yLW5leHQmIzM5OyBvZiBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9zY2hlZF9leHQuZ2l0IHNjaGVkLWV4dC9mb3ItbmV4dFxuLS1cbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmM9MjE3PW5vaW5zdHIgaW50IGNwdWlkbGVfZW50ZXJfc3RhdGUoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYy0yNDUtXHQvKiBUYWtlIG5vdGUgb2YgdGhlIHBsYW5uZWQgaWRsZSBzdGF0ZS4gKi9cbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmM6MjQ2Olx0c2NoZWRfaWRsZV9zZXRfc3RhdGUodGFyZ2V0X3N0YXRlKTtcbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMtMjQ3LVxuLS1cbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMtMjg1LVx0LyogVGhlIGNwdSBpcyBubyBsb25nZXIgaWRsZSBvciBhYm91dCB0byBlbnRlciBpZGxlLiAqL1xuZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYzoyODY6XHRzY2hlZF9pZGxlX3NldF9zdGF0ZShOVUxMKTtcbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMtMjg3LVxuLS1cbmluY2x1ZGUvbGludXgvY3B1aWRsZS5oPTI2NT1zdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRsZV91c2VfZGVlcGVzdF9zdGF0ZSh1NjQgbGF0ZW5jeV9saW1pdF9ucylcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaC0yNzAtLyoga2VybmVsL3NjaGVkL2lkbGUuYyAqL1xuaW5jbHVkZS9saW51eC9jcHVpZGxlLmg6MjcxOmV4dGVybiB2b2lkIHNjaGVkX2lkbGVfc2V0X3N0YXRlKHN0cnVjdCBjcHVpZGxlX3N0YXRlICppZGxlX3N0YXRlKTtcbmluY2x1ZGUvbGludXgvY3B1aWRsZS5oLTI3Mi1leHRlcm4gdm9pZCBkZWZhdWx0X2lkbGVfY2FsbCh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oPTMwND1zdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgtMzI1LVx0dTY0XHRcdFx0YndfYnVyc3RfdXM7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oOjMyNjpcdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaC0zMjctI2VuZGlmXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz02NzY2PXN0YXRpYyBpbmxpbmUgdm9pZCBwcm94eV9zZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjc4MC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njc4MTpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJveHlfcmVzY2hlZF9pZGxlKHN0cnVjdCBycSAqcnEpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY3ODIte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9Njc5MD1zdGF0aWMgdm9pZCBwcm94eV9kZWFjdGl2YXRlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqZG9ub3IpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02Nzk3LVx0ICogQmVjYXVzZSB3ZSBnb3QgZG9ub3IgZnJvbSBwaWNrX25leHRfdGFzaygpLCBpdCBpcyAqY3J1Y2lhbCpcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njc5ODpcdCAqIHRoYXQgd2UgY2FsbCBwcm94eV9yZXNjaGVkX2lkbGUoKSBiZWZvcmUgd2UgZGVhY3RpdmF0ZSBpdC5cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjc5OS1cdCAqIEFzIG9uY2Ugd2UgZGVhY3RpdmF0ZSBkb25vciwgZG9ub3ItXHUwMDNlb25fcnEgaXMgc2V0IHRvIHplcm8sXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02ODA0LVx0ICovXG5rZXJuZWwvc2NoZWQvY29yZS5jOjY4MDU6XHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02ODA2LVx0YmxvY2tfdGFzayhycSwgZG9ub3IsIHN0YXRlKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTY4NDk9c3RhdGljIHZvaWQgcHJveHlfbWlncmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02ODY0LVx0ICpcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njg2NTpcdCAqIFNvIGNhbGwgcHJveHlfcmVzY2hlZF9pZGxlKCkgdG8gZHJvcCB0aGUgcnEtXHUwMDNlZG9ub3IgcmVmZXJlbmNlc1xua2VybmVsL3NjaGVkL2NvcmUuYy02ODY2LVx0ICogYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGxvY2suXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NjctXHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njg2ODpcdHByb3h5X3Jlc2NoZWRfaWRsZShycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NjktXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz02OTA3PWZpbmRfcHJveHlfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRvbm9yLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk2Ny1cdFx0XHRpZiAoY3Vycl9pbl9jaGFpbilcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njk2ODpcdFx0XHRcdHJldHVybiBwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02OTY5LVx0XHRcdF9fY2xlYXJfdGFza19ibG9ja2VkX29uKHAsIE5VTEwpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk3OS1cdFx0XHRpZiAoY3Vycl9pbl9jaGFpbilcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njk4MDpcdFx0XHRcdHJldHVybiBwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02OTgxLVx0XHRcdGdvdG8gbWlncmF0ZV90YXNrO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk5Mi1cdFx0XHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njk5MzpcdFx0XHRyZXR1cm4gcHJveHlfcmVzY2hlZF9pZGxlKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk5NC1cdFx0fVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzAyOS1cdFx0XHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzAzMDpcdFx0XHRyZXR1cm4gcHJveHlfcmVzY2hlZF9pZGxlKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzAzMS1cdFx0fVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTAyNTk9c3RhdGljIGludCBjcHVfaWRsZV93cml0ZV9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY1LVx0aWYgKCFyZXQpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjY2Olx0XHRzY3hfZ3JvdXBfc2V0X2lkbGUoY3NzX3RnKGNzcyksIGlkbGUpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2Ny1cdHJldHVybiByZXQ7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NjgyPXZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY4Ni1cdHRnLVx1MDAzZXNjeC5id19xdW90YV91cyA9IFJVTlRJTUVfSU5GO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0Njg3Olx0dGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgPSBmYWxzZTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY4OC19XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NzQ0PWludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NjktXHRcdFx0XHQgIC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc3MDpcdFx0XHRcdCAgLnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSB9O1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzcxLVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMz12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI4LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTI5OnZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTMwLXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MzYtXHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBzY2ggXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpIFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTM3Olx0ICAgIHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGUpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MzgtXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTQwLVx0LyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk0MTpcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gaWRsZTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk0Mi1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUxNzE9c3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE5MS1cdFx0XHRcdC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5MjpcdFx0XHRcdC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxOTMtXHRcdFx0fTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgxPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTMtc3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTI1ND1zdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNjMtXHQvKiB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgY29uZmlndXJlZCBTQ0hFRF9JRExFIHZpYSBjcHUuaWRsZSAqL1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjI2NDpcdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI2NS19O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTM0OT1zdGF0aWMgczMyIHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzYzLVx0XHRcdC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTM2NDpcdFx0XHQuc2NoZWRfaWRsZSA9IHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlLFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzY1LVx0XHR9O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTQzOD1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjctXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxNDY4Olx0XHRcdC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUsXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjktXHRcdH07XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz03ODczPXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja191cGRhdGVfb3ZlcnV0aWxpemVkX3N0YXR1cyhzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg4NC0vKiBSdW5xdWV1ZSBvbmx5IGhhcyBTQ0hFRF9JRExFIHRhc2tzIGVucXVldWVkICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjc4ODU6c3RhdGljIGludCBzY2hlZF9pZGxlX3JxKHN0cnVjdCBycSAqcnEpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4ODYte1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg5MC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5MTpzdGF0aWMgaW50IGNob29zZV9zY2hlZF9pZGxlX3JxKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg5Mi17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjc4OTM6XHRyZXR1cm4gc2NoZWRfaWRsZV9ycShycSkgXHUwMDI2XHUwMDI2ICF0YXNrX2hhc19pZGxlX3BvbGljeShwKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg5NC19XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz03ODk2PXN0YXRpYyBpbnQgY2hvb3NlX2lkbGVfY3B1KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4OTgtXHRyZXR1cm4gYXZhaWxhYmxlX2lkbGVfY3B1KGNwdSkgfHxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5OTpcdCAgICAgICBjaG9vc2Vfc2NoZWRfaWRsZV9ycShjcHVfcnEoY3B1KSwgcCk7XG5rZXJuZWwvc2NoZWQvZmFpci5jLTc5MDAtfVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODExND1zdGF0aWMgYm9vbCBfX2RlcXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxMTctXHRzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSBcdTAwMjZycS1cdTAwM2VjZnM7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjgxMTg6XHRib29sIHdhc19zY2hlZF9pZGxlID0gc2NoZWRfaWRsZV9ycShycSk7XG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxMTktXHRib29sIHRhc2tfc2xlZXAgPSBmbGFncyBcdTAwMjYgREVRVUVVRV9TTEVFUDtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxNTktXHQvKiBiYWxhbmNlIGVhcmx5IHRvIHB1bGwgaGlnaCBwcmlvcml0eSB0YXNrcyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzo4MTYwOlx0aWYgKHVubGlrZWx5KCF3YXNfc2NoZWRfaWRsZSBcdTAwMjZcdTAwMjYgc2NoZWRfaWRsZV9ycShycSkpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy04MTYxLVx0XHRycS1cdTAwM2VuZXh0X2JhbGFuY2UgPSBqaWZmaWVzO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODQ1MD1zY2hlZF9iYWxhbmNlX2ZpbmRfZHN0X2dyb3VwX2NwdShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB0aGlzX2NwdSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTg0NjktXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg0NzA6XHRcdGlmIChjaG9vc2Vfc2NoZWRfaWRsZV9ycShycSwgcCkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTg0NzEtXHRcdFx0cmV0dXJuIGk7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz04NjI1PXN0YXRpYyBpbnQgc2VsZWN0X2lkbGVfY29yZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjb3JlLCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICppZGxlX2NwdSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTg2MzMtXHRcdFx0aWYgKCppZGxlX2NwdSA9PSAtMSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzo4NjM0Olx0XHRcdFx0aWYgKGNob29zZV9zY2hlZF9pZGxlX3JxKGNwdV9ycShjcHUpLCBwKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODYzNS1cdFx0XHRcdCAgICBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1cykpIHtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEzOTI2PXN0YXRpYyB2b2lkIHNjaGVkX2JhbGFuY2VfZG9tYWlucyhzdHJ1Y3QgcnEgKnJxLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEzOTI5LVx0aW50IGNwdSA9IHJxLVx1MDAzZWNwdTtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTM5MzA6XHRpbnQgYnVzeSA9IGlkbGUgIT0gQ1BVX0lETEUgXHUwMDI2XHUwMDI2ICFzY2hlZF9pZGxlX3JxKHJxKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5MzEtXHR1bnNpZ25lZCBsb25nIGludGVydmFsO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NjctXHRcdFx0XHRpZGxlID0gaWRsZV9jcHUoY3B1KTtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTM5Njg6XHRcdFx0XHRidXN5ID0gIWlkbGUgXHUwMDI2XHUwMDI2ICFzY2hlZF9pZGxlX3JxKHJxKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NjktXHRcdFx0fVxuLS1cbmtlcm5lbC9zY2hlZC9pZGxlLmM9MTY9ZXh0ZXJuIGNoYXIgX19jcHVpZGxlX3RleHRfc3RhcnRbXSwgX19jcHVpZGxlX3RleHRfZW5kW107XG4tLVxua2VybmVsL3NjaGVkL2lkbGUuYy0xOC0vKipcbmtlcm5lbC9zY2hlZC9pZGxlLmM6MTk6ICogc2NoZWRfaWRsZV9zZXRfc3RhdGUgLSBSZWNvcmQgaWRsZSBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgQ1BVLlxua2VybmVsL3NjaGVkL2lkbGUuYy0yMC0gKiBAaWRsZV9zdGF0ZTogU3RhdGUgdG8gcmVjb3JkLlxua2VybmVsL3NjaGVkL2lkbGUuYy0yMS0gKi9cbmtlcm5lbC9zY2hlZC9pZGxlLmM6MjI6dm9pZCBzY2hlZF9pZGxlX3NldF9zdGF0ZShzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqaWRsZV9zdGF0ZSlcbmtlcm5lbC9zY2hlZC9pZGxlLmMtMjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjMyCgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDgxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTY2hlZHVsZXIgRXh0ZW5zaW9uIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYHNjeF9ncm91cF9zZXRfaWRsZWAuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFuIG9wdGltaXphdGlvbi4gQ3VycmVudGx5LCB0aGUgY29kZSwgd2l0aGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCwgY2FsbHMgdGhlIGBjZ3JvdXBfc2V0X2lkbGVgIG9wZXJhdGlvbiwgYnV0IG5vdywgaXQgaGFzIGFkZGVkIGFuIGFkZGl0aW9uYWwgY2hlY2ssIGVuc3VyaW5nIHRoZSBjYWxsYmFjayBpc24mIzM5O3QgY2FsbGVkIGlmIHRoZSBpZGxlIHN0YXRlIGhhc24mIzM5O3QgYWN0dWFsbHkgY2hhbmdlZC4gU3BlY2lmaWNhbGx5LCBiZWZvcmUgdGhlIGNoYW5nZSwgaXQgZGlkIHRoaXM6CgpgYGBjCglpZiAoc2N4X2Nncm91cF9lbmFibGVkICZhbXA7JmFtcDsgc2NoICZhbXA7JmFtcDsgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkpCgkJU0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTsKYGBgCgphbmQgYWZ0ZXIgdGhlIGNoYW5nZSwgdGhlIGFkZGl0aW9uIG9mIHRoZSBjaGVjayBub3cgaXM6CgpgYGBjCglpZiAoc2N4X2Nncm91cF9lbmFibGVkICZhbXA7JmFtcDsgc2NoICZhbXA7JmFtcDsgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgJmFtcDsmYW1wOwoJICAgIHRnLSZndDtzY3guc2NoZWRfaWRsZSAhPSBpZGxlKQoJCVNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7CmBgYAoKVGhpcyBwcmV2ZW50cyB0aGUgY2FsbGJhY2sgZnJvbSBiZWluZyBjYWxsZWQgaWYgdGhlIGlkbGUgc3RhdGUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIGB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGVgLiBJIGNhbiBzZWUgdGhlIGludGVudDogcmVkdWNlIHVubmVjZXNzYXJ5IG92ZXJoZWFkLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UsIGF2b2lkaW5nIHJlZHVuZGFudCB3b3JrLCBhbmQgaW1wcm92aW5nIHBlcmZvcm1hbmNlIHNsaWdodGx5LgoKTm93LCBhIGtleSBjb25jZXJuIGluIHRoZXNlIHR5cGVzIG9mIGNoYW5nZXMgaXMgbWVtb3J5IHNhZmV0eSBhbmQgcG9zc2libGUgaW5mb3JtYXRpb24gbGVha3MuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIENoZWNraW5nIGluIGBzY3hfdGdfaW5pdGAsIGB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYDoKCmBgYGMKdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpCnsKLi4uCgl0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7Cgl0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgPSBmYWxzZTsKfQpgYGAKClRoYXQmIzM5O3MgZ29vZC4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgb24gdGFzayBncm91cCBpbml0aWFsaXphdGlvbi4KClNvLCBsZXQmIzM5O3MgYW5hbHl6ZSB0aGUgcG90ZW50aWFsIHJpc2tzOgoKKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/KiogTm8uIGB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCiogICAqKk5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBkYXRhIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZT8qKiBOb3BlLiBUaGUgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGRhdGEgZXhwb3NlZCB0byB1c2VyIHNwYWNlLgoqICAgKipVbmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgcGFkZGluZyBzZW50IGFjcm9zcyB0aGUgdXNlci9rZXJuZWwgYm91bmRhcnk/KiogTm90IGF0IGFsbC4gTm8gc3VjaCB0aGluZyBpcyBoYXBwZW5pbmcuCiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogTm8sIGJlY2F1c2UgYHRnLSZndDtzY3guc2NoZWRfaWRsZWAgaXMgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIHRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBvcHRpbWl6YXRpb24sIG1pbmltaXppbmcgdGhlIG5lZWQgdG8gaW52b2tlIHRoZSBjYWxsYmFjayB3aGVuIGl0IGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgY2FsbGVkLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIGxldCYjMzk7cyB0cmlwbGUtY2hlY2sgYWdhaW5zdCBteSBjcml0ZXJpYSBmb3IgYEtNU0FOYDoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/KiogTm8uCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBObywgYHRnLSZndDtzY3guc2NoZWRfaWRsZWAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHNjeF90Z19pbml0KClgLgozLiAgKipBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyoqIE5vLgo0LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNhbiBsZWFkIHRvIGFjY2VzcyBvZiB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLgoKQWxyaWdodC4gTm8gS01TQU4gbmVlZGVkIGhlcmUuIFRoaXMgYm9pbHMgZG93biB0byBhIGxvZ2ljIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLiBJJiMzOTtkIGFzc2VzcyB0aGF0IHN0YW5kYXJkIHNhbml0aXplcnMsIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAsIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudC4gS01TQU4gaXMgb3ZlcmtpbGwgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UuCk5vdywgcmVhZHkgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2N4X2dyb3VwX3NldF9pZGxlKClgIGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCB0byBjaGVjayBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAgYmVmb3JlIGludm9raW5nIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBzY2hlZHVsZXIgb3BlcmF0aW9uIGNhbGxiYWNrLCBhdm9pZGluZyByZWR1bmRhbnQgY2FsbGJhY2tzIHdoZW4gdGhlIGlkbGUgc3RhdGUgZG9lcyBub3QgY2hhbmdlLlxuXG5gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGEgYm9vbGVhbiBtZW1iZXIgb2YgYHN0cnVjdCB0YXNrX2dyb3VwYCB0aGF0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgc2N4X3RnX2luaXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGhlYXAgb3Igc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2N4X2dyb3VwX3NldF9pZGxlKClgIGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCB0byBjaGVjayBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAgYmVmb3JlIGludm9raW5nIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBzY2hlZHVsZXIgb3BlcmF0aW9uIGNhbGxiYWNrLCBhdm9pZGluZyByZWR1bmRhbnQgY2FsbGJhY2tzIHdoZW4gdGhlIGlkbGUgc3RhdGUgZG9lcyBub3QgY2hhbmdlLlxuXG5gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGEgYm9vbGVhbiBtZW1iZXIgb2YgYHN0cnVjdCB0YXNrX2dyb3VwYCB0aGF0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgc2N4X3RnX2luaXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGhlYXAgb3Igc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU1OjQ0LjIzMzYyODY3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTQwMjc3NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICAgIFwiQ0dST1VQX1NDSEVEXCIsXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzY3hfZ3JvdXBfc2V0X2lkbGUoKWAgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHRvIGNoZWNrIGB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAgYmVmb3JlIGludm9raW5nIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBzY2hlZHVsZXIgb3BlcmF0aW9uIGNhbGxiYWNrLCBhdm9pZGluZyByZWR1bmRhbnQgY2FsbGJhY2tzIHdoZW4gdGhlIGlkbGUgc3RhdGUgZG9lcyBub3QgY2hhbmdlLlxcblxcbmB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGEgYm9vbGVhbiBtZW1iZXIgb2YgYHN0cnVjdCB0YXNrX2dyb3VwYCB0aGF0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgc2N4X3RnX2luaXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGhlYXAgb3Igc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2N4X2dyb3VwX3NldF9pZGxlKCkgaW4gdGhlIGV4dGVuc2libGUgc2NoZWR1bGVyIGNsYXNzIChzY2hlZF9leHQpIHRvIGF2b2lkIGludm9raW5nIHRoZSBjZ3JvdXBfc2V0X2lkbGUgQlBGIGNhbGxiYWNrIGlmIHRoZSB0YXNrIGdyb3VwJ3MgaWRsZSBzdGF0ZSBoYXNuJ3QgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBjZ3JvdXAgQ1BVIGNvbnRyb2xsZXIgaW50ZXJmYWNlIChlLmcuIGNwdS5pZGxlIGtub2IpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NTo0NC4yMzM2MzM0NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDQ1OTYwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3N2EzYTBkNDA0MjY1Yzg2ZGI2MzFmN2IwZGM3ODExM2Q2NTBjNTI1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDE6NTU6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcXG5pbmRleCA4MDQxYzg3YTM1NjJlLi44YjM2MjUxMDdiNzI0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXFxuQEAgLTQ5MzMsNyArNDkzMyw4IEBAIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxcbiBcXHRwZXJjcHVfZG93bl9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuIFxcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcXG4gXFxuLVxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpKVxcbitcXHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IHNjaCBcXHUwMDI2XFx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGUpXFxuIFxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XFxuIFxcbiBcXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU1OjQ1LjY3ODk3NTI0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTc1NjI3MjUxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNjeF9ncm91cF9zZXRfaWRsZSgpIGluIHRoZSBleHRlbnNpYmxlIHNjaGVkdWxlciBjbGFzcyAoc2NoZWRfZXh0KSB0byBhdm9pZCBpbnZva2luZyB0aGUgY2dyb3VwX3NldF9pZGxlIEJQRiBjYWxsYmFjayBpZiB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzdhM2EwZDQwNDI2NWM4NmRiNjMxZjdiMGRjNzgxMTNkNjUwYzUyNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDE6NTU6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuaW5kZXggODA0MWM4N2EzNTYyZS4uOGIzNjI1MTA3YjcyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbkBAIC00OTMzLDcgKzQ5MzMsOCBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcbiBcdHBlcmNwdV9kb3duX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuIFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xuIFxuLVx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSlcbitcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcbiBcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU1OjQ1LjY3ODk3NjUyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMjEzMTgwNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gTGV0J3MgZGlnIGluLiBJIHNlZSBhIGNvbW1pdCB3aXRoIGEgYGRpZmZgIHByZXNlbnRlZCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIFRoaXMgaXMgaW4gdGhlIHNjaGVkdWxlciBleHRlbnNpb24gY29kZSwgd2hpY2ggY291bGQgZGVmaW5pdGVseSBiZSBpbnRlcmVzdGluZy5cblxuVGhlIGRpZmYgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMgYXJvdW5kIGxpbmUgNDkzMywgaXQgbG9va3MgbGlrZSBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBoYXMgYmVlbiBtb2RpZmllZCB3aXRoaW4gdGhlIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYSBjaGVjayBmb3IgYHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGVgIGhhcyBiZWVuIGFkZGVkLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIG9wdGltaXppbmcgYSBjaGVjaywgc28gbWF5YmUgd2UgY2FuIHJ1bGUgaXQgb3V0IGltbWVkaWF0ZWx5LCBidXQgaXQncyBpbXBvcnRhbnQgdG8gbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSwgSSdtIGdvaW5nIHRvIG5lZWQgbW9yZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdXNlIGVpdGhlciBgZ2l0IGdyZXBgIG9yIGp1c3QgcHVsbCB1cCB0aGUgZmlsZSBhbmQgcmVhZCBhcm91bmQgdGhhdCBsaW5lLCBzZWUgaG93IHRoaXMgYHNjeC5zY2hlZF9pZGxlYCBmaWVsZCBpcyBiZWluZyB1c2VkIGFuZCBtb2RpZmllZCwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZC4gS25vd2luZyB3aGF0IGBTQ1hfSEFTX09QYCBhbmQgYFNDWF9DQUxMX09QYCBhcmUgd291bGQgYmUgaGVscGZ1bCB0b28uIEJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBtYWtlIGEgbW9yZSBpbmZvcm1lZCBhc3Nlc3NtZW50IGFib3V0IHdoZXRoZXIgdGhpcyBjb25kaXRpb25hbCBjaGFuZ2UgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIG5ldyBjb2RlIHBhdGhzIG9yIGFsdGVyIGV4aXN0aW5nIGJlaGF2aW9yIGluIGEgd2F5IHRoYXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gYSBmdXp6ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NTo1OC44OTIxNTk4MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3NjaGVkL2V4dC9leHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0OTIwOlxcdFxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCkgXFx1MDAyNlxcdTAwMjZcXG40OTIxOlxcdFxcdCAgICB0Zy1cXHUwMDNlc2N4LndlaWdodCAhPSB3ZWlnaHQpXFxuNDkyMjpcXHRcXHRcXHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0LCBOVUxMLCB0Z19jZ3JwKHRnKSwgd2VpZ2h0KTtcXG40OTIzOlxcdFxcbjQ5MjQ6XFx0XFx0dGctXFx1MDAzZXNjeC53ZWlnaHQgPSB3ZWlnaHQ7XFxuNDkyNTpcXHRcXG40OTI2OlxcdFxcdHBlcmNwdV91cF9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuNDkyNzpcXHR9XFxuNDkyODpcXHRcXG40OTI5OlxcdHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxcbjQ5MzA6XFx0e1xcbjQ5MzE6XFx0XFx0c3RydWN0IHNjeF9zY2hlZCAqc2NoO1xcbjQ5MzI6XFx0XFxuNDkzMzpcXHRcXHRwZXJjcHVfZG93bl9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuNDkzNDpcXHRcXHRzY2ggPSBzY3hfdGdfa25vYl9zY2hlZCh0Zyk7XFxuNDkzNTpcXHRcXG40OTM2OlxcdFxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpIFxcdTAwMjZcXHUwMDI2XFxuNDkzNzpcXHRcXHQgICAgdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGUpXFxuNDkzODpcXHRcXHRcXHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpO1xcbjQ5Mzk6XFx0XFxuNDk0MDpcXHRcXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXFxuNDk0MTpcXHRcXHR0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgPSBpZGxlO1xcbjQ5NDI6XFx0XFxuNDk0MzpcXHRcXHRwZXJjcHVfdXBfcmVhZChcXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xcbjQ5NDQ6XFx0fVxcbjQ5NDU6XFx0XFxuNDk0NjpcXHR2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZyxcXG40OTQ3OlxcdFxcdFxcdFxcdCAgICAgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpXFxuNDk0ODpcXHR7XFxuNDk0OTpcXHRcXHRzdHJ1Y3Qgc2N4X3NjaGVkICpzY2g7XFxuNDk1MDpcXHRcXG40OTUxOlxcdFxcdHBlcmNwdV9kb3duX3JlYWQoXFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcXG40OTUyOlxcdFxcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcXG40OTUzOlxcdFxcbjQ5NTQ6XFx0XFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBzY2ggXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfYmFuZHdpZHRoKSBcXHUwMDI2XFx1MDAyNlxcbjQ5NTU6XFx0XFx0ICAgICh0Zy1cXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyAhPSBwZXJpb2RfdXMgfHxcXG40OTU2OlxcdFxcdCAgICAgdGctXFx1MDAzZXNjeC5id19xdW90YV91cyAhPSBxdW90YV91cyB8fFxcbjQ5NTc6XFx0XFx0ICAgICB0Zy1cXHUwMDNlc2N4LmJ3X2J1cnN0X3VzICE9IGJ1cnN0X3VzKSlcXG40OTU4OlxcdFxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9iYW5kd2lkdGgsIE5VTEwsXFxuNDk1OTpcXHRcXHRcXHRcXHQgICAgdGdfY2dycCh0ZyksIHBlcmlvZF91cywgcXVvdGFfdXMsIGJ1cnN0X3VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTU6NTguODkyNTg5NjM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE3MTA1NzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgc2N4X2dyb3VwX3NldF9pZGxlYCBVc2FnZSBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIHN5c3RlbS4gU28sIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QgaXMgdG8gcmVhY2ggZm9yIGBncmVwYC4gSSdsbCBydW4gYSBxdWljayBzZWFyY2ggZm9yIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lLCBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxpc3Qgb2YgY2FsbCBzaXRlcyB0byB3b3JrIGZyb20uIFRoZW4gSSBjYW4gYW5hbHl6ZSB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBlbmFibGUgYm90aCBgc2NoZWRfZXh0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAuIFRoYXQncyB3aGVyZSBJIGNhbiB1c2UgbXkgZXhwZXJ0IGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBJIGNhbiB1c2UgdGhlIHNlYXJjaCByZXN1bHRzIGFzIGEgYmFzZSB0byBzdGFydCBmcm9tLiBXaXRoIGBncmVwYCBJIGNhbiBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvZGUgZmxvdy4gV2l0aCB0aGUgY2FsbCBzaXRlcywgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhc3N1bXB0aW9ucyBpbiB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgY2FsbCBzaXRlcyB3aXRoIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucywgbGlrZWx5IGJ5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgd2F5IEkgY2FuIGRldGVybWluZSB0aGUgcHJlY2lzZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhpcyBraW5kIG9mIHN5c3RlbWF0aWMgYW5hbHlzaXMgaXMgdGhlIGtleSB0byBxdWlja2x5IHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjowMi4wNjM2NTA5OTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTU2Nzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuYz0xMDI1OT1zdGF0aWMgaW50IGNwdV9pZGxlX3dyaXRlX3M2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2NS1cXHRpZiAoIXJldClcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjY2OlxcdFxcdHNjeF9ncm91cF9zZXRfaWRsZShjc3NfdGcoY3NzKSwgaWRsZSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2Ny1cXHRyZXR1cm4gcmV0O1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTEzPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkyOC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5Mjk6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTMwLXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODE9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODMtdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjkyOnN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05My1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cykge31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MDMuNjU5MjI2ODg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2MTk0NTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBRdWVyeSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdmVyaWZ5IGEgZmV3IGtleSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBzY2hlZHVsZXIgZXh0ZW5zaW9ucyBJJ20gdGFyZ2V0aW5nLiBJJ20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gZmVhdHVyZXMgcmVsYXRlZCB0byBleHRlbmRpbmcgdGhlIHNjaGVkdWxpbmcgY2xhc3Nlcywgc28gSSdsbCBiZSBsb29raW5nIGZvciBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFRoZW4gdGhlcmUncyB0aGUgYENHUk9VUF9TQ0hFRGAgb3B0aW9uLCBhcyBJIHdpbGwgYmUgbmVlZGluZyB0byBlbmFibGUgc29tZSBtb3JlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHkgdGhlcmUgdG9vLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBlaXRoZXIgZW5hYmxlZCBvciBhdCBsZWFzdCBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQgaWYgSSB3YW50IG15IHdvcmsgdG8gYmUgdmFsaWQuIEJldHRlciB0byBjaGVjayBub3cgYW5kIHNhdmUgc29tZSBoZWFkYWNoZXMgbGF0ZXIuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDkyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MDUuODIxMTc1NDg0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTY4NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTU5LVxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo2MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy02MS0jIGluY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yNjAtXFxua2VybmVsL3NjaGVkL2NvcmUuYzoyNjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI2Mi1cXHRpZiAocGEgPT0gTUFYX1JUX1BSSU8gKyBNQVhfTklDRSArIDEpXFx0LyogZXh0ICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ1NzM9c3RhdGljIHZvaWQgX19zY2hlZF9mb3JrKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEwLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDYxMTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYxMi1cXHRpbml0X3NjeF9lbnRpdHkoXFx1MDAyNnAtXFx1MDAzZXNjeCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ4MTM9aW50IHNjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ4NjAtXFx0XFx0cC1cXHUwMDNlc2NoZWRfY2xhc3MgPSBcXHUwMDI2cnRfc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo0ODYxOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2NvcmUuYy00ODYyLVxcdH0gZWxzZSBpZiAodGFza19zaG91bGRfc2N4KHAtXFx1MDAzZXBvbGljeSkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzYwOD1jb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKl9fc2V0c2NoZWR1bGVyX2NsYXNzKGludCBwb2xpY3ksIGludCBwcmlvKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03NjE1LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzYxNjojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzYxNy1cXHRpZiAodGFza19zaG91bGRfc2N4KHBvbGljeSkpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg4Njg9aW50IHNjaGVkX2NwdV9keWluZyh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04ODgyLVxcdGRsX3NlcnZlcl9zdG9wKFxcdTAwMjZycS1cXHUwMDNlZmFpcl9zZXJ2ZXIpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODg4MzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODg4NC1cXHRkbF9zZXJ2ZXJfc3RvcChcXHUwMDI2cnEtXFx1MDAzZWV4dF9zZXJ2ZXIpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2MC1cXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzLCBcXHUwMDI2aWRsZV9zY2hlZF9jbGFzcykpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk2MTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2Mi1cXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzLCBcXHUwMDI2ZXh0X3NjaGVkX2NsYXNzKSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwNzgtXFx0XFx0ZmFpcl9zZXJ2ZXJfaW5pdChycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MDc5OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MDgwLVxcdFxcdGV4dF9zZXJ2ZXJfaW5pdChycSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xMDg9c3RhdGljIGlubGluZSB1OCBkbF9nZXRfdHlwZShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTExMy1cXHRcXHRyZXR1cm4gRExfU0VSVkVSX0ZBSVI7XFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM6MTE0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMTE1LVxcdGlmIChkbF9zZSA9PSBcXHUwMDI2cnEtXFx1MDAzZWV4dF9zZXJ2ZXIpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xODQyPXZvaWQgc2NoZWRfaW5pdF9kbF9zZXJ2ZXJzKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY2LVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjE4Njc6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY4LVxcdFxcdGRsX3NlID0gXFx1MDAyNnJxLVxcdTAwM2VleHRfc2VydmVyO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ1MT1zdGF0aWMgdm9pZCBkbF9zZXJ2ZXJfYWRkX2J3KHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDU4LVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NTk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDYwLVxcdGRsX3NlID0gXFx1MDAyNmNwdV9ycShjcHUpLVxcdTAwM2VleHRfc2VydmVyO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ2Nj1zdGF0aWMgdTY0IGRsX3NlcnZlcl9yZWFkX2J3KGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDczLVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NzQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDc1LVxcdGlmIChjcHVfcnEoY3B1KS1cXHUwMDNlZXh0X3NlcnZlci5kbF9zZXJ2ZXIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTQ5ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZGVidWdmc19zY2hlZDtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy00OTUtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6NDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNDk3LXN0YXRpYyBzc2l6ZV90XFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYz01NjE9c3RhdGljIHZvaWQgZGVidWdmc19leHRfc2VydmVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTU4MC19XFxua2VybmVsL3NjaGVkL2RlYnVnLmM6NTgxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNTgyLVxcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTc2OS1cXHRkZWJ1Z2ZzX2ZhaXJfc2VydmVyX2luaXQoKTtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NzEtXFx0ZGVidWdmc19leHRfc2VydmVyX2luaXQoKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTE0MDY9dm9pZCBwcm9jX3NjaGVkX3Nob3dfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTE1MDUtXFx0fVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjE1MDY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0xNTA3LVxcdF9fUFMoXFxcImV4dC5lbmFibGVkXFxcIiwgdGFza19vbl9zY3gocCkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz02NDE9dm9pZCBzY3hfc2V0X3Rhc2tfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgc3RhdGUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTY5Ny0gKiBzY3hfdGFza3MgY2FuIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YgYWx3YXlzIHVzaW5nIGNncm91cCBpdGVyYXRpb24gaWZcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjY5ODogKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUIGRlcGVuZHMgb24gQ09ORklHX0NHUk9VUFMuXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02OTktICpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOC0gKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTEwLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD0zOT1ib29sIHNjeF9wcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmIsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTQyLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NDM6I2Vsc2VcXHQvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC00NC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NTc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2NoZWRfZXh0X2NsYXNzKHZvaWQpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC01OC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjU5OiNlbmRpZlxcdC8qIENPTkZJR19TQ0hFRF9DTEFTU19FWFQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYwLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYyLXZvaWQgX19zY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvaWRsZS5jPTU1Nz1zdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9pZGxlKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU2OS1cXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXFx1MDAyNnJxLVxcdTAwM2VmYWlyX3NlcnZlciwgZGVsdGFfZXhlYyk7XFxua2VybmVsL3NjaGVkL2lkbGUuYzo1NzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU3MS1cXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXFx1MDAyNnJxLVxcdTAwM2VleHRfc2VydmVyLCBkZWx0YV9leGVjKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5ND1zdGF0aWMgaW5saW5lIGludCBub3JtYWxfcG9saWN5KGludCBwb2xpY3kpXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTk1LXtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTctXFx0aWYgKHBvbGljeSA9PSBTQ0hFRF9FWFQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD02ODE9c3RydWN0IGNmc19ycSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC03NzktXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6NzgwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtNzgxLS8qIHNjeF9ycS1cXHUwMDNlZmxhZ3MsIHByb3RlY3RlZCBieSB0aGUgcnEgbG9jayAqL1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9ODExPXN0cnVjdCBzY3hfcnEge1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtODUwLX07XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6ODUxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtODUyLVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTE1OT1zdHJ1Y3QgcnEge1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxMy1cXHRzdHJ1Y3QgZGxfcnFcXHRcXHRkbDtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMjE0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxNS1cXHRzdHJ1Y3Qgc2N4X3JxXFx0XFx0c2N4O1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTg4NT1leHRlcm4gc3RydWN0IGJhbGFuY2VfY2FsbGJhY2sgYmFsYW5jZV9wdXNoX2NhbGxiYWNrO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODYtXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTg4NzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODgtZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBleHRfc2NoZWRfY2xhc3M7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xOTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfcnFfY2xvY2tfaW52YWxpZGF0ZShzdHJ1Y3QgcnEgKnJxKVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxMC1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTExOiNlbHNlIC8qICFDT05GSUdfU0NIRURfQ0xBU1NfRVhUOiAqL1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5MTItI2RlZmluZSBzY3hfZW5hYmxlZCgpXFx0XFx0ZmFsc2VcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MTY9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTkxNzojZW5kaWYgLyogIUNPTkZJR19TQ0hFRF9DTEFTU19FWFQgKi9cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTE4LVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9Mjg0MT1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqbmV4dF9hY3RpdmVfY2xhc3MoY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzcylcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NDMtXFx0Y2xhc3MrKztcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODQ0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg0NS1cXHRpZiAoc2N4X3N3aXRjaGVkX2FsbCgpIFxcdTAwMjZcXHUwMDI2IGNsYXNzID09IFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzKVxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM9NDc0PXZvaWQgcnFfYXR0YWNoX3Jvb3Qoc3RydWN0IHJxICpycSwgc3RydWN0IHJvb3RfZG9tYWluICpyZClcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTUxMi1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo1MTM6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy01MTQtXFx0aWYgKHJxLVxcdTAwM2VleHRfc2VydmVyLmRsX3NlcnZlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MDUuODY4NzQ4MjMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzMDc2NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCBmb3IgU0NIRURfQ0xBU1NfRVhUKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBTQ0hFRF9DTEFTU19FWFRgIGNvbmZpZyBvcHRpb24gbGl2ZXMuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24gb3IgdGhlIHNjaGVkdWxlci4gYGluaXQvS2NvbmZpZ2AgaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ2VuZXJhbCBzeXN0ZW0gZmVhdHVyZXMsIGJ1dCBnaXZlbiBpdCdzIHNjaGVkdWxlciByZWxhdGVkLCBJ4oCZbGwgbGlrZWx5IGJlIG1vcmUgc3VjY2Vzc2Z1bCBsb29raW5nIGluc2lkZSBga2VybmVsL3NjaGVkL0tjb25maWdgLiBBbmQsIGRlcGVuZGluZywgbWF5YmUgdGhpcyBleHRlbmRzIHRvIHNvbWUgb2YgdGhlIHByZWVtcHRpb24gY29uZmlndXJhdGlvbiBpZiBJJ20gdGhpbmtpbmcgbW9yZSBicm9hZGx5IGFib3V0IGl0cyBpbXBsaWNhdGlvbnMuIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCdzIHByb2JhYmx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gaXRzIHJlbGF0ZWQgdG8gc2NoZWR1bGluZyBjbGFzc2VzLCBvciBwcmVlbXB0aW9uLCBhcyB0aGUgY2FzZSBtYXkgYmUuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLiBJJ2xsIHNlYXJjaCBmb3IgdGhhdCBzdHJpbmcsIGFuZCBob3BlZnVsbHksIEknbGwgZmluZCBpdHMgZGVmaW5pdGlvbiBhbmQgY29udGV4dCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MDguMjk5NTE2MjYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY5NDgxMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD0xNTU9Y29uZmlnIFNDSEVEX0NPUkVcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcyLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTczOmNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3NC1cXHRib29sIFxcXCJFeHRlbnNpYmxlIFNjaGVkdWxpbmcgQ2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjA5Ljk2OTAwMzMzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI5NjE2NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFByZWVtcHRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCBwcmVlbXB0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzdGFydCB3aXRoIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3My4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIHByZWVtcHRpb24gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGxpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGNob2ljZXMgdGhlcmUgdGhhdCBkcml2ZSB0aGUgYmVoYXZpb3I6IHdoZXRoZXIgaXQncyBmdWxsIHByZWVtcHRpb24sIHZvbHVudGFyeSBwcmVlbXB0aW9uLCBvciBtYXliZSBzb21lIG1vcmUgbnVhbmNlZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBhdXRob3JzIGNvbnNpZGVyZWQgY3JpdGljYWwgaW4gbWFraW5nIHRoZWlyIGRlY2lzaW9ucy4gSXQncyBwcm9iYWJseSB0aGUgYmFzaXMgdG8gc2VlIHRoZSBpbnRlci1yZWxhdGVkIGltcGFjdHMgaW4gb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjEyLjA5ODYyMjE5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0XCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHQgIHdoaWNoIGlzIHRoZSBsaWtlbHkgdXNhZ2UgYnkgTGludXggZGlzdHJpYnV0aW9ucywgdGhlcmUgc2hvdWxkXFxuIDE3MTpcXHRcXHQgIGJlIG5vIG1lYXN1cmFibGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLlxcbiAxNzI6XFx0XFxuIDE3MzpcXHRjb25maWcgU0NIRURfQ0xBU1NfRVhUXFxuIDE3NDpcXHRcXHRib29sIFxcXCJFeHRlbnNpYmxlIFNjaGVkdWxpbmcgQ2xhc3NcXFwiXFxuIDE3NTpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgREVCVUdfSU5GT19CVEZcXG4gMTc2OlxcdFxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbiAxNzc6XFx0XFx0c2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDE3ODpcXHRcXHRoZWxwXFxuIDE3OTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBuZXcgc2NoZWR1bGVyIGNsYXNzIHNjaGVkX2V4dCAoU0NYKSwgd2hpY2hcXG4gMTgwOlxcdFxcdCAgYWxsb3dzIHNjaGVkdWxpbmcgcG9saWNpZXMgdG8gYmUgaW1wbGVtZW50ZWQgYXMgQlBGIHByb2dyYW1zIHRvXFxuIDE4MTpcXHRcXHQgIGFjaGlldmUgdGhlIGZvbGxvd2luZzpcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0ICAtIEVhc2Ugb2YgZXhwZXJpbWVudGF0aW9uIGFuZCBleHBsb3JhdGlvbjogRW5hYmxpbmcgcmFwaWRcXG4gMTg0OlxcdFxcdCAgICBpdGVyYXRpb24gb2YgbmV3IHNjaGVkdWxpbmcgcG9saWNpZXMuXFxuIDE4NTpcXHRcXHQgIC0gQ3VzdG9taXphdGlvbjogQnVpbGRpbmcgYXBwbGljYXRpb24tc3BlY2lmaWMgc2NoZWR1bGVycyB3aGljaFxcbiAxODY6XFx0XFx0ICAgIGltcGxlbWVudCBwb2xpY2llcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byBnZW5lcmFsLXB1cnBvc2VcXG4gMTg3OlxcdFxcdCAgICBzY2hlZHVsZXJzLlxcbiAxODg6XFx0XFx0ICAtIFJhcGlkIHNjaGVkdWxlciBkZXBsb3ltZW50czogTm9uLWRpc3J1cHRpdmUgc3dhcCBvdXRzIG9mXFxuIDE4OTpcXHRcXHQgICAgc2NoZWR1bGluZyBwb2xpY2llcyBpbiBwcm9kdWN0aW9uIGVudmlyb25tZW50cy5cXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0ICBzY2hlZF9leHQgbGV2ZXJhZ2VzIEJQRiBzdHJ1Y3Rfb3BzIGZlYXR1cmUgdG8gZGVmaW5lIGEgc3RydWN0dXJlXFxuIDE5MjpcXHRcXHQgIHdoaWNoIGV4cG9ydHMgZnVuY3Rpb24gY2FsbGJhY2tzIGFuZCBmbGFncyB0byBCUEYgcHJvZ3JhbXMgdGhhdFxcbiAxOTM6XFx0XFx0ICB3aXNoIHRvIGltcGxlbWVudCBzY2hlZHVsaW5nIHBvbGljaWVzLiBUaGUgc3RydWN0X29wcyBzdHJ1Y3R1cmVcXG4gMTk0OlxcdFxcdCAgZXhwb3J0ZWQgYnkgc2NoZWRfZXh0IGlzIHN0cnVjdCBzY2hlZF9leHRfb3BzLCBhbmQgaXMgY29uY2VwdHVhbGx5XFxuIDE5NTpcXHRcXHQgIHNpbWlsYXIgdG8gc3RydWN0IHNjaGVkX2NsYXNzLlxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uOlxcbiAxOTg6XFx0XFx0ICAgIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWV4dC5yc3RcXG4gMTk5OlxcdFxcdCAgICBodHRwczovL2dpdGh1Yi5jb20vc2NoZWQtZXh0L3NjeFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjoxMi4wOTg3MDAxNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNTYxNjQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaWdnaW5nIGludG8gU2NoZWR1bGVyIEV4dGVuc2lvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHNjaGVkdWxlciBleHRlbnNpb25zIGFyZSBpbnRlcmFjdGluZy4gTXkgaHVuY2ggdGVsbHMgbWUgdGhlIHBpZWNlcyBJJ20gaW50ZXJlc3RlZCBpbiBhcmUgZ29pbmcgdG8gYmUgbHVya2luZyBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuaGAgYW5kIGBrZXJuZWwvc2NoZWQvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSA4MCBpbiB0aGUgYGV4dC5oYCBoZWFkZXIsIGFuZCB0aGVuIGFyb3VuZCBsaW5lIDEwMjU5IGluIHRoZSBjb3JlIGZpbGUuIEknbSBob3BpbmcgdG8gcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBhY3R1YWxseSAqZW5hYmxlKiBgc2N4X2dyb3VwX3NldF9pZGxlYCBhbmQgYGNwdV9pZGxlX3dyaXRlX3M2NGAuIFRob3NlIHR3byBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gQnkgdHJhY2luZyBiYWNrIHRocm91Z2ggdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlZHVjZSB0aGUgZXhhY3Qgc2V0IG9mIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgcGFydGljdWxhciBiZWhhdmlvci4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgaWRsZSB0YXNrIG1hbmFnZW1lbnQgaW50ZXJhY3RzIHdpdGggc2NoZWR1bGVyIGV4dGVuc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjE0LjEwNDMxOTMyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc2NoZWQvZXh0L2V4dC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSkge31cXG4gIDcxOlxcdCNlbmRpZlxcbiAgNzI6XFx0XFxuICA3MzpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRFxcbiAgNzQ6XFx0I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG4gIDc1OlxcdHZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTtcXG4gIDc2OlxcdGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XFxuICA3NzpcXHR2b2lkIHNjeF90Z19vZmZsaW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XFxuICA3ODpcXHRpbnQgc2N4X2Nncm91cF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCk7XFxuICA3OTpcXHR2b2lkIHNjeF9jZ3JvdXBfbW92ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuICA4MDpcXHR2b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpO1xcbiAgODE6XFx0dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbiAgODI6XFx0dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbiAgODM6XFx0dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG4gIDg0OlxcdCNlbHNlXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbiAgODU6XFx0c3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cXG4gIDg2OlxcdHN0YXRpYyBpbmxpbmUgaW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7IHJldHVybiAwOyB9XFxuICA4NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X3RnX29mZmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7fVxcbiAgODg6XFx0c3RhdGljIGlubGluZSBpbnQgc2N4X2Nncm91cF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkgeyByZXR1cm4gMDsgfVxcbiAgODk6XFx0c3RhdGljIGlubGluZSB2b2lkIHNjeF9jZ3JvdXBfbW92ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cXG4gIDkwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxcbiAgOTE6XFx0c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG4gIDkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cykge31cXG4gIDk0OlxcdCNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4gIDk1OlxcdCNlbmRpZlxcdC8qIENPTkZJR19DR1JPVVBfU0NIRUQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MTQuMTA0MzgzNjI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzAwMDUxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEV4dGVuZGVkIEdyb3VwIFNjaGVkdWxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYCBpcyBmbGFzaGluZyBhIG1lbnRhbCByZWQgZmxhZywgb3IgcGVyaGFwcyBhIGdyZWVuIGZsYWcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2VzLCBvciBtYXliZSBqdXN0IG15IGxvY2FsIHRyZWUgaWYgSSBoYXZlIG9uZSBzZXQgdXAgd2l0aCByZWxldmFudCBwYXRjaGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRGAgaXMgYWN0dWFsbHkgdXNlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCdzICpkZWZpbmVkKiBhbmQgKnJlZmVyZW5jZWQqIHdpdGhpbiB0aGUgc2NoZWR1bGVyIGNvZGUuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHNjaGVkdWxpbmcgZmVhdHVyZXMsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBJIG1pZ2h0IGFsc28gbG9vayBmb3IgdXNlcyBvZiBgRVhUX0dST1VQX1NDSEVEYCBkaXJlY3RseSwgYXMgaXQgbWF5IGJlIHVzZWQgaW4gbWFjcm9zIG9yIG90aGVyIGRlZmluaXRpb25zLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIHRoZSBsYW5kc2NhcGUgc3Vycm91bmRpbmcgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbjogaXRzIHB1cnBvc2UsIHNjb3BlLCBhbmQgaW1wYWN0IG9uIHRoZSBrZXJuZWwncyBzY2hlZHVsaW5nIGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGlmIGl0J3MgbmV3LCBvciBhbiBldm9sdXRpb24gb2Ygc29tZXRoaW5nIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGgsIG9yIGlmIEkndmUgYmVlbiBzbGVlcGluZyBvbiBhIHNpZ25pZmljYW50IHNjaGVkdWxlciBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjoxOC43NzQzOTE0MzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDI0MzkyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhUX0dST1VQX1NDSEVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvZXh0Lmg9MTg1PXN0cnVjdCBzY2hlZF9leHRfZW50aXR5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgtMjgxLVxcdC8qIGNvbGQgZmllbGRzICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaDoyODI6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oLTI4My1cXHRzdHJ1Y3QgY2dyb3VwXFx0XFx0KmNncnBfbW92aW5nX2Zyb207XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oPTMwND1zdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXAge1xcbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0Lmg6MzA1OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaC0zMDYtXFx0LypcXG4tLVxcbmluaXQvS2NvbmZpZz0xMTk3PWNvbmZpZyBSVF9HUk9VUF9TQ0hFRF9ERUZBVUxUX0RJU0FCTEVEXFxuLS1cXG5pbml0L0tjb25maWctMTIwNy1cXG5pbml0L0tjb25maWc6MTIwODpjb25maWcgRVhUX0dST1VQX1NDSEVEXFxuaW5pdC9LY29uZmlnLTEyMDktXFx0Ym9vbFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU5NDE9QlRGX1RZUEVfU0FGRV9UUlVTVEVEKHN0cnVjdCBzY3hfaW5pdF90YXNrX2FyZ3MpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTk0MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTQzLVxcdHN0cnVjdCBjZ3JvdXAgKmNncm91cDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk1MT12b2lkIF9faW5pdCBzY2hlZF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NzMtI2VuZGlmIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzo4OTc0OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2NvcmUuYy04OTc1LVxcdHNjeF90Z19pbml0KFxcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk3NjojZW5kaWYgLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3Ny0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVEXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTM3OTI9c3RhdGljIHZvaWQgdGFza190aWNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBxdWV1ZWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MTAtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozODExOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODEyLXN0YXRpYyBzdHJ1Y3QgY2dyb3VwICp0Z19jZ3JwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgyNi1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjM4Mjc6I2Vsc2VcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODI4LVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODMwLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgzMTojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODMyLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NjQyPWJvb2wgc2N4X2Nhbl9zdG9wX3RpY2soc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY3Ny1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ2Nzg6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2NzktXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5NDY9dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5NjYtfVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk2NzojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTY4LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk2OTojaWYgZGVmaW5lZChDT05GSUdfRVhUX0dST1VQX1NDSEVEKSB8fCBkZWZpbmVkKENPTkZJR19FWFRfU1VCX1NDSEVEKVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk3MC1zdGF0aWMgc3RydWN0IGNncm91cCAqcm9vdF9jZ3JvdXAodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk4MD12b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTgyLVxcdGNncm91cF9sb2NrKCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTgzOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTg0LVxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5ODg9dm9pZCBzY3hfY2dyb3VwX3VubG9jayh2b2lkKVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk4OS17XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTkwOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTkxLVxcdHBlcmNwdV91cF93cml0ZShcXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTk0LX1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5OTU6I2Vsc2VcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEIHx8IENPTkZJR19FWFRfU1VCX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTk2LXN0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cCAqcm9vdF9jZ3JvdXAodm9pZCkgeyByZXR1cm4gTlVMTDsgfVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX3VubG9jayh2b2lkKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk5OTojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEIHx8IENPTkZJR19FWFRfU1VCX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MDAwLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01MTEwPXN0YXRpYyB2b2lkIGRlc3Ryb3lfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgdTY0IGRzcV9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE0OC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNDk6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNTAtc3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODA3NT1zdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0X3Rhc2spOlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA4MzojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4NC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDA9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MjQxOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQyLXN0YXRpYyBzMzIgc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzICphcmdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDk9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlKHN0cnVjdCBjZ3JvdXAgKmNncnAsIGJvb2wgaWRsZSkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyNTA6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI1MS1zdGF0aWMgczMyIHNjaGVkX2V4dF9vcHNfX3N1Yl9hdHRhY2goc3RydWN0IHNjeF9zdWJfYXR0YWNoX2FyZ3MgKmFyZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI2Mj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHMgX19icGZfb3BzX3NjaGVkX2V4dF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODItXFx0LmRpc2FibGVcXHRcXHQ9IHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MjgzOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mjg0LVxcdC5jZ3JvdXBfaW5pdFxcdFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgzMjk9c3RhdGljIHN0cnVjdCBzY2hlZF9leHRfb3BzX2NpZCBfX2JwZl9vcHNfc2NoZWRfZXh0X29wc19jaWQgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNDctXFx0LmRpc2FibGVcXHRcXHQ9IHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzQ4OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzQ5LVxcdC5jcHVjdGxfaW5pdFxcdFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzg2PXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkyLVxcdFtTQ1hfT1BfSURYKGR1bXApXVxcdFxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTM6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzk0LVxcdFtTQ1hfT1BfSURYKGNncm91cF9pbml0KV1cXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA4MDAtXFx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9pZGxlKV1cXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwODAxOiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwODAyLVxcdFtTQ1hfT1BfSURYKHN1Yl9hdHRhY2gpXVxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDkwMT1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cXHRDSURfT0ZGU0VUX01BVENIKGR1bXBfY3B1LCBkdW1wX2NpZCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk1NzojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTgtXFx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfaW5pdCwgY3B1Y3RsX2luaXQpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMTA1ND1fX2luaXRjYWxsKHNjeF9pbml0KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjQtICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA2NTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjYtREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA2NzojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTcwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSkge31cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzMtI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjc0OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC03NS12b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgzPXZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cyk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4NDojZWxzZVxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTg1LXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpIHt9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkzPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTQ6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTUtI2VuZGlmXFx0LyogQ09ORklHX0NHUk9VUF9TQ0hFRCAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTIzNT1zdHJ1Y3Qgc2N4X2luaXRfdGFza19hcmdzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNDAtXFx0Ym9vbFxcdFxcdFxcdGZvcms7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjI0MTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNDItXFx0LyogdGhlIGNncm91cCB0aGUgdGFzayBpcyBqb2luaW5nICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzIyPXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTEtXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY1MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTMtXFx0LyoqXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzg2LVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3ODc6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODgtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTA0Nj1zdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwNzEtXFx0dm9pZCAoKmR1bXBfdGFzaykoc3RydWN0IHNjeF9kdW1wX2N0eCAqY3R4LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDcyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwNzMtXFx0czMyICgqY3B1Y3RsX2luaXQpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA4My1cXHR2b2lkICgqY3B1Y3RsX3NldF9pZGxlKShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDg0OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA4NS1cXHRzMzIgKCpzdWJfYXR0YWNoKShzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncyAqYXJncyk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjA3OT12b2lkIHNjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoyMDgwOiNpZiBkZWZpbmVkKENPTkZJR19FWFRfR1JPVVBfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX0VYVF9TVUJfU0NIRUQpXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTIwODEtdm9pZCBzY3hfY2dyb3VwX2xvY2sodm9pZCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jPTEyOTQ9c3RhdGljIHZvaWQgc2N4X2ZhaWxfcGFyZW50KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMyMC1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzMjE6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzMjItLyoqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvY29uZmlnPTM9Q09ORklHX0NHUk9VUF9TQ0hFRD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L2NvbmZpZzo0OkNPTkZJR19FWFRfR1JPVVBfU0NIRUQ9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9jb25maWctNS1DT05GSUdfQlBGPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MjAuMjc2ODM0NDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3MTc4ODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiB0aGlzIHN5c3RlbS4gSSB0aGluayBJJ3ZlIGdvdCBhIGxlYWQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybS4gTXkgZ3V0IHNheXMgaXQncyBsaWtlbHkgYSBzZXR0aW5nIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgY29tcG9uZW50IG9yIGZlYXR1cmUgYmVpbmcgaW5pdGlhbGl6ZWQgYXQgYm9vdC4gU28sIEkgbmVlZCB0byBjaGVjayBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSB0eXBpY2FsIHBsYWNlIGZvciB0aGVzZSBzb3J0cyBvZiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzY2FuIGFyb3VuZCBsaW5lIDEyMDguIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIHNldHRpbmcgSSBhbSBpbnRlcmVzdGVkIGluIGlzIGRlZmluZWQsIG9yIGF0IGxlYXN0IGxpbmtlZCB0by4gVGltZSB0byBnZXQgZG93biB0byBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MjIuMTQ4NjI1NDE5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE5NTpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuMTE5NjpcXHRcXG4xMTk3OlxcdGNvbmZpZyBSVF9HUk9VUF9TQ0hFRF9ERUZBVUxUX0RJU0FCTEVEXFxuMTE5ODpcXHRcXHRib29sIFxcXCJSZXF1aXJlIGJvb3QgcGFyYW1ldGVyIHRvIGVuYWJsZSBncm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPXFxcIlxcbjExOTk6XFx0XFx0ZGVwZW5kcyBvbiBSVF9HUk9VUF9TQ0hFRFxcbjEyMDA6XFx0XFx0ZGVmYXVsdCBuXFxuMTIwMTpcXHRcXHRoZWxwXFxuMTIwMjpcXHRcXHQgIFdoZW4gc2V0LCB0aGUgUlQgZ3JvdXAgc2NoZWR1bGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBUaGUgb3B0aW9uXFxuMTIwMzpcXHRcXHQgIGlzIGluIGludmVydGVkIGZvcm0gc28gdGhhdCBtZXJlIFJUX0dST1VQX1NDSEVEIGVuYWJsZXMgdGhlIGdyb3VwXFxuMTIwNDpcXHRcXHQgIHNjaGVkdWxpbmcuXFxuMTIwNTpcXHRcXG4xMjA2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEyMDc6XFx0XFxuMTIwODpcXHRjb25maWcgRVhUX0dST1VQX1NDSEVEXFxuMTIwOTpcXHRcXHRib29sXFxuMTIxMDpcXHRcXHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcXHUwMDI2XFx1MDAyNiBDR1JPVVBfU0NIRURcXG4xMjExOlxcdFxcdHNlbGVjdCBHUk9VUF9TQ0hFRF9XRUlHSFRcXG4xMjEyOlxcdFxcdHNlbGVjdCBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcXG4xMjEzOlxcdFxcdGRlZmF1bHQgeVxcbjEyMTQ6XFx0XFxuMTIxNTpcXHRlbmRpZiAjQ0dST1VQX1NDSEVEXFxuMTIxNjpcXHRcXG4xMjE3OlxcdGNvbmZpZyBFWFRfU1VCX1NDSEVEXFxuMTIxODpcXHQgICAgICAgIGRlZl9ib29sIHlcXG4xMjE5OlxcdCAgICAgICAgZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXFx1MDAyNlxcdTAwMjYgQ0dST1VQU1xcbjEyMjA6XFx0XFxuMTIyMTpcXHRjb25maWcgU0NIRURfTU1fQ0lEXFxuMTIyMjpcXHRcXHRkZWZfYm9vbCB5XFxuMTIyMzpcXHRcXHRkZXBlbmRzIG9uIFNNUCBcXHUwMDI2XFx1MDAyNiBSU0VRXFxuMTIyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MjIuMTQ4ODAxOTk5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDE5NDIwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHRlbmRlZCBHcm91cCBTY2hlZHVsaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgRVhUX0dST1VQX1NDSEVEYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgaXQncyBkZXBlbmRlbnQgb24gYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgLCBhbmQgdGhhdCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIGBTQ0hFRF9DTEFTU19FWFRgLCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxyaWdodCwgc28gdGhlIGV4dGVuZGVkIHNjaGVkdWxlciBjbGFzcyBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBCUEYgZnVuY3Rpb25hbGl0aWVzLCBhbmQgZGVidWcgaW5mby4gVGhpcyBhbGwgc2VlbXMgdG8gYmUgYnVpbGRpbmcgYSBwaWN0dXJlIG9mIGEgbW9yZSBmbGV4aWJsZSBhbmQgcHJvZ3JhbW1hYmxlIHNjaGVkdWxpbmcgZW52aXJvbm1lbnQuXG5cbkxldCdzIHN3aXRjaCBnZWFycyBmb3IgYSBtb21lbnQuIFRvIHNlZSBob3cgdGhlc2Ugc2NoZWR1bGluZyBwcmluY2lwbGVzIGFyZSBhcHBsaWVkLCBJIHdhbnQgdG8gZXhwbG9yZSBob3cgYGNwdV9pZGxlX3dyaXRlX3M2NGAgd29ya3MgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgLiBJJ2xsIG5lZWQgdG8gcmVhZCB0aHJvdWdoIHRoYXQgZnVuY3Rpb24gdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24ncyBpbXBhY3QgaXMgcmVhbGl6ZWQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjI0Ljc1MDc0NjI5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMjI5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3B1X2lkbGVfd3JpdGVfczY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjUzPXN0YXRpYyBzNjQgY3B1X2lkbGVfcmVhZF9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNTgtXFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDI1OTpzdGF0aWMgaW50IGNwdV9pZGxlX3dyaXRlX3M2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNjAtXFx0XFx0XFx0XFx0c3RydWN0IGNmdHlwZSAqY2Z0LCBzNjQgaWRsZSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTAyNzE9c3RhdGljIHN0cnVjdCBjZnR5cGUgY3B1X2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI4MC1cXHRcXHQucmVhZF9zNjQgPSBjcHVfaWRsZV9yZWFkX3M2NCxcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjgxOlxcdFxcdC53cml0ZV9zNjQgPSBjcHVfaWRsZV93cml0ZV9zNjQsXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI4Mi1cXHR9LFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0xMDU0MT1zdGF0aWMgc3RydWN0IGNmdHlwZSBjcHVfZmlsZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA1NTgtXFx0XFx0LnJlYWRfczY0ID0gY3B1X2lkbGVfcmVhZF9zNjQsXFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDU1OTpcXHRcXHQud3JpdGVfczY0ID0gY3B1X2lkbGVfd3JpdGVfczY0LFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA1NjAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MjQuNzk3ODcyODc2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTA3OTk1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgU2NoZWR1bGVyIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgTGludXggc2NoZWR1bGVyLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLiBMZXQncyB6ZXJvIGluIG9uIGxpbmUgMTAyNTkuIEkga25vdyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgc3BlY2lmaWMgbG9naWMgSSdtIGludGVyZXN0ZWQgaW4sIGdpdmVuIHRoZSBjb250ZXh0IEknbSB3b3JraW5nIHdpdGguIFRoaXMgZnVuY3Rpb24gY2FsbC4uLiB0aGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBwaW5wb2ludCB0aGUgY29kZSBsb2NhdGlvbiBkaXJlY3RseSBpbnN0ZWFkIG9mIHNlYXJjaGluZyB0aHJvdWdoIHRoZSBlbnRpcmUgY29kZSBvciBsb29raW5nIGluIHRoZSBkb2N1bWVudGF0aW9uLiBIb3BlZnVsbHksIHRoaXMgc3RhcnRpbmcgcG9pbnQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIG9mIHRhc2sgc2NoZWR1bGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjoyNi44MDg2NzQ3MzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjUwOlxcdCNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi9cXG4xMDI1MTpcXHRcXG4xMDI1MjpcXHQjaWZkZWYgQ09ORklHX0dST1VQX1NDSEVEX1dFSUdIVFxcbjEwMjUzOlxcdHN0YXRpYyBzNjQgY3B1X2lkbGVfcmVhZF9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4xMDI1NDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmdHlwZSAqY2Z0KVxcbjEwMjU1OlxcdHtcXG4xMDI1NjpcXHRcXHRyZXR1cm4gY3NzX3RnKGNzcyktXFx1MDAzZWlkbGU7XFxuMTAyNTc6XFx0fVxcbjEwMjU4OlxcdFxcbjEwMjU5OlxcdHN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuMTAyNjA6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGNmdHlwZSAqY2Z0LCBzNjQgaWRsZSlcXG4xMDI2MTpcXHR7XFxuMTAyNjI6XFx0XFx0aW50IHJldDtcXG4xMDI2MzpcXHRcXG4xMDI2NDpcXHRcXHRyZXQgPSBzY2hlZF9ncm91cF9zZXRfaWRsZShjc3NfdGcoY3NzKSwgaWRsZSk7XFxuMTAyNjU6XFx0XFx0aWYgKCFyZXQpXFxuMTAyNjY6XFx0XFx0XFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcXG4xMDI2NzpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwMjY4OlxcdH1cXG4xMDI2OTpcXHQjZW5kaWYgLyogQ09ORklHX0dST1VQX1NDSEVEX1dFSUdIVCAqL1xcbjEwMjcwOlxcdFxcbjEwMjcxOlxcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNwdV9sZWdhY3lfZmlsZXNbXSA9IHtcXG4xMDI3MjpcXHQjaWZkZWYgQ09ORklHX0dST1VQX1NDSEVEX1dFSUdIVFxcbjEwMjczOlxcdFxcdHtcXG4xMDI3NDpcXHRcXHRcXHQubmFtZSA9IFxcXCJzaGFyZXNcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjoyNi44MDkyNzcxMTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk5NzAwMjU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBTY2hlZHVsZXIgRXh0IENncm91cCBJZGxlIFN0YXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsOiBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgc2N4X2dyb3VwX3NldF9pZGxlYCwgcGFydCBvZiB0aGUgc2NoZWR1bGVyJ3MgZXh0ZW5zaWJsZSBjbGFzcyAoYHNjaGVkX2V4dGApLiBJJ20gbG9va2luZyBhdCBob3cgaXQgaGFuZGxlcyB0aGUgaWRsZSBzdGF0ZSB3aXRoaW4gY2dyb3Vwcy4gIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBjYWxsaW5nIHRoZSBCUEYgb3BlcmF0aW9uIGBjZ3JvdXBfc2V0X2lkbGVgIHVuY29uZGl0aW9uYWxseS4gVGhpcyBpcyBhIHByb2JsZW0sIGJlY2F1c2UgaXQncyBpbmVmZmljaWVudCBhbmQgcG90ZW50aWFsbHkgYnVnZ3kuXG5cblRoZSBmaXg/ICBBIHNpbXBsZSwgYnV0IGNydWNpYWwsIGNoZWNrOiBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAuIFRoaXMgcHJldmVudHMgcmVkdW5kYW50IGNhbGxzIHRvIGBjZ3JvdXBfc2V0X2lkbGVgIHdoZW4gdGhlIGlkbGUgc3RhdGUgaGFzbid0IGFjdHVhbGx5IGNoYW5nZWQuICBFc3NlbnRpYWxseSwgbWFraW5nIHRoaXMgbW9kaWZpY2F0aW9uIGlzIHNpbWlsYXIgdG8gd2hhdCdzIGRvbmUgZm9yIHRoZSBgd2VpZ2h0YCBhbmQgYGJhbmR3aWR0aGAgY2dyb3VwIG9wZXJhdGlvbnMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXb3J0aCBmdXp6aW5nP1wiIEJhc2VkIG9uIG15IGNyaXRlcmlhLCB0aGlzIGxvb2tzIHByb21pc2luZy4gSXQncyB0b3VjaGluZyBjb3JlIGtlcm5lbCBzY2hlZHVsZXIgbG9naWMgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgLiBUaGUgY29kZSBpcyAqcmVhY2hhYmxlKiBmcm9tIHVzZXJzcGFjZSB2aWEgd3JpdGluZyB0byB0aGUgYGNwdS5pZGxlYCBjZ3JvdXAgY29udHJvbCBmaWxlLCB3aGljaCBjYWxscyB0aGUgYGNwdV9pZGxlX3dyaXRlX3M2NGAgZnVuY3Rpb24uIFRoaXMgcGF0Y2ggZGVmaW5pdGVseSBtb2RpZmllcyBhIGNvcmUgY29tcG9uZW50LlxuXG5UbyB2ZXJpZnkgbXkgZnV6emluZyBoeXBvdGhlc2lzLCBsZXQncyBuYWlsIGRvd24gd2hhdCBjb25maWdzIGFuZCBzeW1ib2xzIG5lZWQgdG8gYmUgc2V0LiAgT2J2aW91c2x5LCBJIG5lZWQgYFNDSEVEX0NMQVNTX0VYVGAsIGBDR1JPVVBfU0NIRURgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBUaGVzZSBlbmFibGUgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSBhbmQgYXJlIGNyaXRpY2FsIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgc2NoZWRfZXh0YC4gIEVuYWJsaW5nIHRoZXNlIGFsc28gaW1wbGllcyB0aGUgZW5hYmxlbWVudCBvZiBgRVhUX0dST1VQX1NDSEVEYC5cblxuSSd2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBgc2N4X2dyb3VwX3NldF9pZGxlYCBhbmQgYGNwdV9pZGxlX3dyaXRlX3M2NGAgYXJlIGltcG9ydGFudCB0byBub3RlLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgdGhlIGFuc3dlciBpcyAqV29ydGhGdXp6aW5nPXRydWUqLiAgVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaW5lZmZpY2llbmN5IGluIGEgY29yZSBzY2hlZHVsaW5nIHBhdGggYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyB0byB1bmNvdmVyIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvciByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcmVkdW5kYW50IGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjozMi44MDYyODEzODdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTM3NjM4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9TQ0hFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTE0OD1jb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbi0tXFxuaW5pdC9LY29uZmlnLTExNTItXFxuaW5pdC9LY29uZmlnOjExNTM6bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTE1NC1cXHRib29sIFxcXCJDUFUgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MzQuMzIwMDUxODQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTcyMzQ1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIHN0dWZmLiBMZXQncyBzZWUuLi4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIGJlLCBhbmQgSSByZW1lbWJlciBzb21ldGhpbmcgYmVpbmcgaW4gdGhhdCBhcmVhIHJlZ2FyZGluZyBpdHMgc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMTE1MyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eSBncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MzYuNDM3Mjg5MDc4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1MDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHIFxcdTAwMjZcXHUwMDI2IEJMS19DR1JPVVBcXG4xMTUxOlxcdFxcdGRlZmF1bHQgeVxcbjExNTI6XFx0XFxuMTE1MzpcXHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxcbjExNTQ6XFx0XFx0Ym9vbCBcXFwiQ1BVIGNvbnRyb2xsZXJcXFwiXFxuMTE1NTpcXHRcXHRkZWZhdWx0IG5cXG4xMTU2OlxcdFxcdGhlbHBcXG4xMTU3OlxcdFxcdCAgVGhpcyBmZWF0dXJlIGxldHMgQ1BVIHNjaGVkdWxlciByZWNvZ25pemUgdGFzayBncm91cHMgYW5kIGNvbnRyb2wgQ1BVXFxuMTE1ODpcXHRcXHQgIGJhbmR3aWR0aCBhbGxvY2F0aW9uIHRvIHN1Y2ggdGFzayBncm91cHMuIEl0IHVzZXMgY2dyb3VwcyB0byBncm91cFxcbjExNTk6XFx0XFx0ICB0YXNrcy5cXG4xMTYwOlxcdFxcbjExNjE6XFx0aWYgQ0dST1VQX1NDSEVEXFxuMTE2MjpcXHRjb25maWcgR1JPVVBfU0NIRURfV0VJR0hUXFxuMTE2MzpcXHRcXHRkZWZfYm9vbCBuXFxuMTE2NDpcXHRcXG4xMTY1OlxcdGNvbmZpZyBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcXG4xMTY2OlxcdFxcdGRlZl9ib29sIG5cXG4xMTY3OlxcdFxcbjExNjg6XFx0Y29uZmlnIEZBSVJfR1JPVVBfU0NIRURcXG4xMTY5OlxcdFxcdGJvb2wgXFxcIkdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX09USEVSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjozNi40Mzc0MTczMThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwMjY5OTI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWcgZm9yIENHUk9VUF9TQ0hFRCoqXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgQ0dST1VQX1NDSEVEYCDigJMgd2hhdGV2ZXIgaXQgaXMg4oCTIGlzICpkZXBlbmRlbnQqIG9uIGBDR1JPVVBTYC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLCByZWFsbHk7IGl0J3MgcHJhY3RpY2FsbHkgYSBnaXZlbiB3aXRoIHRoaXMga2luZCBvZiBtb2R1bGFyaXR5LiBJZiBJIHdhbnQgdG8gZW5hYmxlIGFkdmFuY2VkIHNjaGVkdWxpbmcgd2l0aGluIGNncm91cHMsIEknbGwgbmVlZCB0aGUgY2dyb3VwIGluZnJhc3RydWN0dXJlIGl0c2VsZiBmaXJzdC4gU28sIHRoZSBwYXJlbnQgbWVudSBvciBjb25maWcgb3B0aW9uIGlzIGNsZWFybHkgYENHUk9VUFNgLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBsYWlkIG91dCBleHBsaWNpdGx5LiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCBgQ0dST1VQX1NDSEVEYCAqaXMqIGluIHRoYXQgY29udGV4dC4gV2hhdCBmZWF0dXJlcyBkb2VzIGl0IGVuYWJsZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQ/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBleGFtaW5pbmcgYGluaXQvS2NvbmZpZ2Agd2lsbCBwcm92aWRlIHRoZSBmdWxsIHBpY3R1cmUuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA4MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MzguODQwMTE5MTg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDgyODk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENHUk9VUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA1ND1jb25maWcgU0xBQl9PQkpfRVhUXFxuLS1cXG5pbml0L0tjb25maWctMTA1Ni1cXG5pbml0L0tjb25maWc6MTA1NzptZW51Y29uZmlnIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA1OC1cXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjM4Ljg4NDk1MTE3OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjgxNjI1MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmFsaXppbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIE9wdGltaXplZCBLZXJuZWwgRnV6emluZyoqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGNvbmZpZ3VyaW5nIGFuZCB3aHkuIEZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSd2ZSBnb3QgbXkgbGlzdDogYFNDSEVEX0NMQVNTX0VYVGAsIGBDR1JPVVBTYCwgYENHUk9VUF9TQ0hFRGAsIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0pJVGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgdGhlIGZlYXR1cmVzIGFuZCBpbnN0cnVtZW50YXRpb24gSSBuZWVkIGZvciBlZmZlY3RpdmUgZnV6emluZywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhcmVhcyByZWxhdGVkIHRvIHNjaGVkdWxpbmcsIGNncm91cHMsIGFuZCBCUEYuIEVuYWJsaW5nIHRoZSBCVEYgZGF0YSB3aWxsIGdpdmUgYmV0dGVyIGNvdmVyYWdlIGluIHRyYWNpbmcgYW5kIGFuYWx5c2lzLiBCUEYgaXMgY2VudHJhbCwgb2YgY291cnNlLCB0byBob29raW5nIGludG8gdGhlIGtlcm5lbCBhbmQgb2JzZXJ2aW5nIGl0cyBiZWhhdmlvdXIuXG5cbk5vdywgcmVnYXJkaW5nIHNwZWNpZmljIHRhcmdldHMsIEknbSBmb2N1c2luZyBvbiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgdGhlIHBvaW50IHdoZXJlIHdlIHNlZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2NoZWR1bGVyIGFuZCBjZ3JvdXAncyBDUFUgaWRsZSBzdGF0ZS4gVGhlIGNoYW5nZSBoZXJlIGlzIGNoZWNraW5nIHdoZXRoZXIgdGhlIGBzY2hlZF9pZGxlYCBoYXMgY2hhbmdlZCBiZWZvcmUgaW52b2tpbmcgdGhlIEJQRiBjYWxsYmFjay4gVGhpcyBpcyBvdXIgYXJlYSBvZiBpbnRlcmVzdCwgdGhlIHBvdGVudGlhbCBmb3IgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ci4gVGhlIGNncm91cCBjcHUuaWRsZSBrbm9iIHByb3ZpZGVzIGFjY2VzcyB0byB0aGlzIGZ1bmN0aW9uIHNvIHdlIGhhdmUgYSB0YXJnZXRhYmxlIGtub2IgZm9yIHRoaXMuXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgSSdtIGNvbmZpZGVudCB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYmUgZnV6emluZyAoV29ydGhGdXp6aW5nOiBgdHJ1ZWApLlxuKiAgIE15IG1haW4gdGFyZ2V0IGlzIHRoZSBgc2N4X2dyb3VwX3NldF9pZGxlYCBmdW5jdGlvbiAoRm9jdXNTeW1ib2xzOiBgW1wic2N4X2dyb3VwX3NldF9pZGxlXCJdYCkuXG4qICAgVG8gZW5hYmxlIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eSBhbmQgb2JzZXJ2YWJpbGl0eSwgdGhlIGZvbGxvd2luZyBjb25maWdzIGFyZSBzZXQgKEVuYWJsZUNvbmZpZ3M6IGBbXCJTQ0hFRF9DTEFTU19FWFRcIiwgXCJDR1JPVVBfU0NIRURcIiwgXCJDR1JPVVBTXCIsIFwiQlBGX1NZU0NBTExcIiwgXCJCUEZfSklUXCIsIFwiREVCVUdfSU5GT19CVEZcIl1gKS5cbiogICBNeSByZWFzb25pbmcgaXMgY29uY2lzZTogV2Ugd2FudCB0byB0cmlnZ2VyIGEgQlBGIGNhbGxiYWNrIHJlbGF0ZWQgdG8gdGhlIGNncm91cCBjcHUuaWRsZSBrbm9iIHdoaWNoIHdlIGNhbiByZWFjaCBieSBjaGFuZ2luZyBgc2N4X2dyb3VwX3NldF9pZGxlYC5cblxuQWxyaWdodCwgSSdtIGhhcHB5IHdpdGggdGhpcyBhc3Nlc3NtZW50LiBMZXQncyBleGVjdXRlIGBzZXQtcmVzdWx0c2AgYW5kIGdldCB0aGlzIHJvbGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDY0LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo0My4xNjY1NzgzNTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTExOTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNjeF9ncm91cF9zZXRfaWRsZSgpIGluIHRoZSBleHRlbnNpYmxlIHNjaGVkdWxlciBjbGFzcyAoc2NoZWRfZXh0KSB0byBhdm9pZCBpbnZva2luZyB0aGUgY2dyb3VwX3NldF9pZGxlIEJQRiBjYWxsYmFjayBpZiB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DTEFTU19FWFRcIixcbiAgICBcIkNHUk9VUF9TQ0hFRFwiLFxuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N4X2dyb3VwX3NldF9pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2N4X2dyb3VwX3NldF9pZGxlKCkgaW4gdGhlIGV4dGVuc2libGUgc2NoZWR1bGVyIGNsYXNzIChzY2hlZF9leHQpIHRvIGF2b2lkIGludm9raW5nIHRoZSBjZ3JvdXBfc2V0X2lkbGUgQlBGIGNhbGxiYWNrIGlmIHRoZSB0YXNrIGdyb3VwJ3MgaWRsZSBzdGF0ZSBoYXNuJ3QgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBjZ3JvdXAgQ1BVIGNvbnRyb2xsZXIgaW50ZXJmYWNlIChlLmcuIGNwdS5pZGxlIGtub2IpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo0My4yNDE3MDQyNzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTMyMTkyNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6NDMuMjQyMjIwMTk4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE1MzE2NzMwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzY3hfZ3JvdXBfc2V0X2lkbGUoKWAgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHRvIGNoZWNrIGB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAgYmVmb3JlIGludm9raW5nIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBzY2hlZHVsZXIgb3BlcmF0aW9uIGNhbGxiYWNrLCBhdm9pZGluZyByZWR1bmRhbnQgY2FsbGJhY2tzIHdoZW4gdGhlIGlkbGUgc3RhdGUgZG9lcyBub3QgY2hhbmdlLlxcblxcbmB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGEgYm9vbGVhbiBtZW1iZXIgb2YgYHN0cnVjdCB0YXNrX2dyb3VwYCB0aGF0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgc2N4X3RnX2luaXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGhlYXAgb3Igc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzdhM2EwZDQwNDI2NWM4NmRiNjMxZjdiMGRjNzgxMTNkNjUwYzUyNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDE6NTU6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuaW5kZXggODA0MWM4N2EzNTYyZS4uOGIzNjI1MTA3YjcyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbkBAIC00OTMzLDcgKzQ5MzMsOCBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcbiBcdHBlcmNwdV9kb3duX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuIFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xuIFxuLVx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSlcbitcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcbiBcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjQzLjI0MjIyMTY4OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjI2OTkwNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBQYXRjaCBBbmFseXNpcyBcdTAwMjYgQ29udGV4dCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHRob3JvdWdobHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCB3aGljaCBJJ20gcHJldHR5IHN1cmUgd2lsbCBiZSBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0OTMzLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlIHNjaGVkdWxlcidzIGV4dGVuc2lvbnMuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGluc3BlY3QgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbGluZS4gTXkgcHJlZmVycmVkIHRvb2xzIGZvciB0aGlzIGtpbmQgb2YgcXVpY2sgaW52ZXN0aWdhdGlvbiBhcmUgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi4gSSdsbCByZWFjaCBmb3Igd2hpY2hldmVyIG9uZSBpcyBmYXN0ZXN0IHRvIGdldCBtZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIHRoZSBzaXR1YXRpb24uIEl0J3MgYWJvdXQgZXN0YWJsaXNoaW5nIGEgc29saWQgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBnbyBhbnkgZGVlcGVyLiBJIGV4cGVjdCB0aGUgY29udGV4dCB3aWxsIHJldmVhbCB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBidWlsZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6NDcuODY5MjE0NTczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc2NoZWQvZXh0L2V4dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5MjA6XFx0XFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBzY2ggXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0KSBcXHUwMDI2XFx1MDAyNlxcbjQ5MjE6XFx0XFx0ICAgIHRnLVxcdTAwM2VzY3gud2VpZ2h0ICE9IHdlaWdodClcXG40OTIyOlxcdFxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF93ZWlnaHQsIE5VTEwsIHRnX2NncnAodGcpLCB3ZWlnaHQpO1xcbjQ5MjM6XFx0XFxuNDkyNDpcXHRcXHR0Zy1cXHUwMDNlc2N4LndlaWdodCA9IHdlaWdodDtcXG40OTI1OlxcdFxcbjQ5MjY6XFx0XFx0cGVyY3B1X3VwX3JlYWQoXFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcXG40OTI3OlxcdH1cXG40OTI4OlxcdFxcbjQ5Mjk6XFx0dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXFxuNDkzMDpcXHR7XFxuNDkzMTpcXHRcXHRzdHJ1Y3Qgc2N4X3NjaGVkICpzY2g7XFxuNDkzMjpcXHRcXG40OTMzOlxcdFxcdHBlcmNwdV9kb3duX3JlYWQoXFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcXG40OTM0OlxcdFxcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcXG40OTM1OlxcdFxcbjQ5MzY6XFx0XFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBzY2ggXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXFx1MDAyNlxcdTAwMjZcXG40OTM3OlxcdFxcdCAgICB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcXG40OTM4OlxcdFxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XFxuNDkzOTpcXHRcXG40OTQwOlxcdFxcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgKi9cXG40OTQxOlxcdFxcdHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XFxuNDk0MjpcXHRcXG40OTQzOlxcdFxcdHBlcmNwdV91cF9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuNDk0NDpcXHR9XFxuNDk0NTpcXHRcXG40OTQ2OlxcdHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLFxcbjQ5NDc6XFx0XFx0XFx0XFx0ICAgICB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cylcXG40OTQ4OlxcdHtcXG40OTQ5OlxcdFxcdHN0cnVjdCBzY3hfc2NoZWQgKnNjaDtcXG40OTUwOlxcdFxcbjQ5NTE6XFx0XFx0cGVyY3B1X2Rvd25fcmVhZChcXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xcbjQ5NTI6XFx0XFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xcbjQ5NTM6XFx0XFxuNDk1NDpcXHRcXHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IHNjaCBcXHUwMDI2XFx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9iYW5kd2lkdGgpIFxcdTAwMjZcXHUwMDI2XFxuNDk1NTpcXHRcXHQgICAgKHRnLVxcdTAwM2VzY3guYndfcGVyaW9kX3VzICE9IHBlcmlvZF91cyB8fFxcbjQ5NTY6XFx0XFx0ICAgICB0Zy1cXHUwMDNlc2N4LmJ3X3F1b3RhX3VzICE9IHF1b3RhX3VzIHx8XFxuNDk1NzpcXHRcXHQgICAgIHRnLVxcdTAwM2VzY3guYndfYnVyc3RfdXMgIT0gYnVyc3RfdXMpKVxcbjQ5NTg6XFx0XFx0XFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCwgTlVMTCxcXG40OTU5OlxcdFxcdFxcdFxcdCAgICB0Z19jZ3JwKHRnKSwgcGVyaW9kX3VzLCBxdW90YV91cywgYnVyc3RfdXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo0Ny44Njk3NjUwNDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQyNzQxMDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0Zy1cdTAwM2VzY3ggYW5kIElkbGUgR3JvdXAgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYHRnLVx1MDAzZXNjeGAsIHNwZWNpZmljYWxseSBob3cgaXQncyBpbml0aWFsaXplZCBhbmQgdGhlIHJvbGUgb2YgYHNjeF9ncm91cF9zZXRfaWRsZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHRnLVx1MDAzZXNjeGAgYW5kIGZvbGxvdyB0aGUgdXNhZ2Ugb2YgYHNjeF9ncm91cF9zZXRfaWRsZWAuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdvb2Qgb2xkLWZhc2hpb25lZCBjb2RlIHNlYXJjaC4gSSdsbCBsb29rIGZvciBpbnN0YW5jZXMgb2YgYHNjaGVkX2lkbGVgIGJlY2F1c2UgdGhhdCdzIG9mdGVuIHRpZWQgdG8gaWRsZSBncm91cCBtYW5hZ2VtZW50LiBBbHRlcm5hdGl2ZWx5LCBJJ2xsIHNlYXJjaCBmb3IgYHNjeF9ncm91cF9zZXRfaWRsZWAgZGlyZWN0bHksIGFzIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBtb3JlIHRhcmdldGVkIHZpZXcgb2YgaXRzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGlkbGUgZ3JvdXBzIGFyZSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo1Mi4yOTcxNzY5NDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODczMDgxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N4X2dyb3VwX3NldF9pZGxlfHNjaGVkX2lkbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJzdD0xMjQ9cmVsYXRlZCBoYW5ncy4gSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzYWdlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3QtMTM1LSBDUFU6MCB0czo1OTE0NjgwIGMwMzllOWEwICBjMDM5ZWNmMCAgY3B1aWRsZV9lbnRlcl9mcmVlemUgXFx1MDAzYy0gY3B1aWRsZV9lbnRlcl9zdGF0ZSsweDMwNC8weDMxNFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3Q6MTM2OiBDUFU6MCB0czo1OTE0NjgxIGMwMDYzODcwICBjMDM5ZWEzMCAgc2NoZWRfaWRsZV9zZXRfc3RhdGUgXFx1MDAzYy0gY3B1aWRsZV9lbnRlcl9zdGF0ZSsweDQ0LzB4MzE0XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJzdC0xMzctIENQVToxIHRzOjU5MTY3MjAgYzAxNjBmNTkgIGMwMTVlZTA0ICBrZXJuZnNfdW5tYXBfYmluX2ZpbGUgXFx1MDAzYy0gX19rZXJuZnNfcmVtb3ZlKzB4MTQwLzB4MjA0XFxuLS1cXG5OZXh0L21lcmdlLmxvZz00MDQ4PU1lcmdlIG1hZGUgYnkgdGhlICdvcnQnIHN0cmF0ZWd5Llxcbi0tXFxuTmV4dC9tZXJnZS5sb2ctNDA1MC0gMSBmaWxlIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDg1IGRlbGV0aW9ucygtKVxcbk5leHQvbWVyZ2UubG9nOjQwNTE6TWVyZ2luZyBzY2hlZC1leHQvZm9yLW5leHQgKDE0ZWJhNmQ5OGNhYmUgc2NoZWRfZXh0OiBSZW5hbWUgdGctXFx1MDAzZXNjeC5pZGxlIHRvIHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSlcXG5OZXh0L21lcmdlLmxvZy00MDUyLSQgZ2l0IG1lcmdlIC1tIE1lcmdlIGJyYW5jaCAnZm9yLW5leHQnIG9mIGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RqL3NjaGVkX2V4dC5naXQgc2NoZWQtZXh0L2Zvci1uZXh0XFxuLS1cXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jPTIxNz1ub2luc3RyIGludCBjcHVpZGxlX2VudGVyX3N0YXRlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYy0yNDUtXFx0LyogVGFrZSBub3RlIG9mIHRoZSBwbGFubmVkIGlkbGUgc3RhdGUuICovXFxuZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYzoyNDY6XFx0c2NoZWRfaWRsZV9zZXRfc3RhdGUodGFyZ2V0X3N0YXRlKTtcXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jLTI0Ny1cXG4tLVxcbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMtMjg1LVxcdC8qIFRoZSBjcHUgaXMgbm8gbG9uZ2VyIGlkbGUgb3IgYWJvdXQgdG8gZW50ZXIgaWRsZS4gKi9cXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jOjI4NjpcXHRzY2hlZF9pZGxlX3NldF9zdGF0ZShOVUxMKTtcXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jLTI4Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1aWRsZS5oPTI2NT1zdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRsZV91c2VfZGVlcGVzdF9zdGF0ZSh1NjQgbGF0ZW5jeV9saW1pdF9ucylcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1aWRsZS5oLTI3MC0vKiBrZXJuZWwvc2NoZWQvaWRsZS5jICovXFxuaW5jbHVkZS9saW51eC9jcHVpZGxlLmg6MjcxOmV4dGVybiB2b2lkIHNjaGVkX2lkbGVfc2V0X3N0YXRlKHN0cnVjdCBjcHVpZGxlX3N0YXRlICppZGxlX3N0YXRlKTtcXG5pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaC0yNzItZXh0ZXJuIHZvaWQgZGVmYXVsdF9pZGxlX2NhbGwodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oPTMwND1zdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaC0zMjUtXFx0dTY0XFx0XFx0XFx0YndfYnVyc3RfdXM7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaDozMjY6XFx0Ym9vbFxcdFxcdFxcdHNjaGVkX2lkbGU7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaC0zMjctI2VuZGlmXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTY3NjY9c3RhdGljIGlubGluZSB2b2lkIHByb3h5X3NldF90YXNrX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY3ODAtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo2NzgxOnN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpwcm94eV9yZXNjaGVkX2lkbGUoc3RydWN0IHJxICpycSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY3ODIte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz02NzkwPXN0YXRpYyB2b2lkIHByb3h5X2RlYWN0aXZhdGUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vcilcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjc5Ny1cXHQgKiBCZWNhdXNlIHdlIGdvdCBkb25vciBmcm9tIHBpY2tfbmV4dF90YXNrKCksIGl0IGlzICpjcnVjaWFsKlxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njc5ODpcXHQgKiB0aGF0IHdlIGNhbGwgcHJveHlfcmVzY2hlZF9pZGxlKCkgYmVmb3JlIHdlIGRlYWN0aXZhdGUgaXQuXFxua2VybmVsL3NjaGVkL2NvcmUuYy02Nzk5LVxcdCAqIEFzIG9uY2Ugd2UgZGVhY3RpdmF0ZSBkb25vciwgZG9ub3ItXFx1MDAzZW9uX3JxIGlzIHNldCB0byB6ZXJvLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02ODA0LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NjgwNTpcXHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjgwNi1cXHRibG9ja190YXNrKHJxLCBkb25vciwgc3RhdGUpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz02ODQ5PXN0YXRpYyB2b2lkIHByb3h5X21pZ3JhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02ODY0LVxcdCAqXFxua2VybmVsL3NjaGVkL2NvcmUuYzo2ODY1OlxcdCAqIFNvIGNhbGwgcHJveHlfcmVzY2hlZF9pZGxlKCkgdG8gZHJvcCB0aGUgcnEtXFx1MDAzZWRvbm9yIHJlZmVyZW5jZXNcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NjYtXFx0ICogYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGxvY2suXFxua2VybmVsL3NjaGVkL2NvcmUuYy02ODY3LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njg2ODpcXHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjg2OS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NjkwNz1maW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZilcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk2Ny1cXHRcXHRcXHRpZiAoY3Vycl9pbl9jaGFpbilcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjY5Njg6XFx0XFx0XFx0XFx0cmV0dXJuIHByb3h5X3Jlc2NoZWRfaWRsZShycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy02OTY5LVxcdFxcdFxcdF9fY2xlYXJfdGFza19ibG9ja2VkX29uKHAsIE5VTEwpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02OTc5LVxcdFxcdFxcdGlmIChjdXJyX2luX2NoYWluKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njk4MDpcXHRcXHRcXHRcXHRyZXR1cm4gcHJveHlfcmVzY2hlZF9pZGxlKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY5ODEtXFx0XFx0XFx0Z290byBtaWdyYXRlX3Rhc2s7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY5OTItXFx0XFx0XFx0ICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzo2OTkzOlxcdFxcdFxcdHJldHVybiBwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk5NC1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcwMjktXFx0XFx0XFx0ICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzo3MDMwOlxcdFxcdFxcdHJldHVybiBwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzAzMS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU5PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY1LVxcdGlmICghcmV0KVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTAyNjY6XFx0XFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ2ODI9dm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2ODYtXFx0dGctXFx1MDAzZXNjeC5id19xdW90YV91cyA9IFJVTlRJTUVfSU5GO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDY4NzpcXHR0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgPSBmYWxzZTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2ODgtfVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NzQ0PWludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc2OS1cXHRcXHRcXHRcXHQgIC5id19idXJzdF91cyA9IHRnLVxcdTAwM2VzY3guYndfYnVyc3RfdXMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NzcwOlxcdFxcdFxcdFxcdCAgLnNjaGVkX2lkbGUgPSB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzEtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5MTM9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgd2VpZ2h0KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI4LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkyOTp2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MzAte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTM2LVxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTM3OlxcdCAgICB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MzgtXFx0XFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk0MC1cXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTQxOlxcdHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTQyLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01MTcxPXN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE5MS1cXHRcXHRcXHRcXHQuYndfYnVyc3RfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5MjpcXHRcXHRcXHRcXHQuc2NoZWRfaWRsZSA9IHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxOTMtXFx0XFx0XFx0fTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODE9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODMtdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjkyOnN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05My1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cykge31cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0yNTQ9c3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNjMtXFx0Lyogd2hldGhlciB0aGUgY2dyb3VwIGlzIGNvbmZpZ3VyZWQgU0NIRURfSURMRSB2aWEgY3B1LmlkbGUgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjY0OlxcdGJvb2xcXHRcXHRcXHRzY2hlZF9pZGxlO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNjUtfTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTM0OT1zdGF0aWMgczMyIHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNjMtXFx0XFx0XFx0LmJ3X2J1cnN0X3VzID0gdGctXFx1MDAzZXNjeC5id19idXJzdF91cyxcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzNjQ6XFx0XFx0XFx0LnNjaGVkX2lkbGUgPSB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUsXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzY1LVxcdFxcdH07XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jPTE0Mzg9c3RhdGljIHZvaWQgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjctXFx0XFx0XFx0LmJ3X2J1cnN0X3VzID0gdGctXFx1MDAzZXNjeC5id19idXJzdF91cyxcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjE0Njg6XFx0XFx0XFx0LnNjaGVkX2lkbGUgPSB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUsXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDY5LVxcdFxcdH07XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTc4NzM9c3RhdGljIGlubGluZSB2b2lkIGNoZWNrX3VwZGF0ZV9vdmVydXRpbGl6ZWRfc3RhdHVzKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4ODQtLyogUnVucXVldWUgb25seSBoYXMgU0NIRURfSURMRSB0YXNrcyBlbnF1ZXVlZCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg4NTpzdGF0aWMgaW50IHNjaGVkX2lkbGVfcnEoc3RydWN0IHJxICpycSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4ODYte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy03ODkwLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5MTpzdGF0aWMgaW50IGNob29zZV9zY2hlZF9pZGxlX3JxKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4OTIte1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5MzpcXHRyZXR1cm4gc2NoZWRfaWRsZV9ycShycSkgXFx1MDAyNlxcdTAwMjYgIXRhc2tfaGFzX2lkbGVfcG9saWN5KHApO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg5NC19XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTc4OTY9c3RhdGljIGludCBjaG9vc2VfaWRsZV9jcHUoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy03ODk4LVxcdHJldHVybiBhdmFpbGFibGVfaWRsZV9jcHUoY3B1KSB8fFxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5OTpcXHQgICAgICAgY2hvb3NlX3NjaGVkX2lkbGVfcnEoY3B1X3JxKGNwdSksIHApO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzkwMC19XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTgxMTQ9c3RhdGljIGJvb2wgX19kZXF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxMTctXFx0c3RydWN0IGNmc19ycSAqY2ZzX3JxID0gXFx1MDAyNnJxLVxcdTAwM2VjZnM7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzo4MTE4OlxcdGJvb2wgd2FzX3NjaGVkX2lkbGUgPSBzY2hlZF9pZGxlX3JxKHJxKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxMTktXFx0Ym9vbCB0YXNrX3NsZWVwID0gZmxhZ3MgXFx1MDAyNiBERVFVRVVFX1NMRUVQO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04MTU5LVxcdC8qIGJhbGFuY2UgZWFybHkgdG8gcHVsbCBoaWdoIHByaW9yaXR5IHRhc2tzICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo4MTYwOlxcdGlmICh1bmxpa2VseSghd2FzX3NjaGVkX2lkbGUgXFx1MDAyNlxcdTAwMjYgc2NoZWRfaWRsZV9ycShycSkpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODE2MS1cXHRcXHRycS1cXHUwMDNlbmV4dF9iYWxhbmNlID0gamlmZmllcztcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODQ1MD1zY2hlZF9iYWxhbmNlX2ZpbmRfZHN0X2dyb3VwX2NwdShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB0aGlzX2NwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODQ2OS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg0NzA6XFx0XFx0aWYgKGNob29zZV9zY2hlZF9pZGxlX3JxKHJxLCBwKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTg0NzEtXFx0XFx0XFx0cmV0dXJuIGk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTg2MjU9c3RhdGljIGludCBzZWxlY3RfaWRsZV9jb3JlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmUsIHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmlkbGVfY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04NjMzLVxcdFxcdFxcdGlmICgqaWRsZV9jcHUgPT0gLTEpIHtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg2MzQ6XFx0XFx0XFx0XFx0aWYgKGNob29zZV9zY2hlZF9pZGxlX3JxKGNwdV9ycShjcHUpLCBwKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODYzNS1cXHRcXHRcXHRcXHQgICAgY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdXMpKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEzOTI2PXN0YXRpYyB2b2lkIHNjaGVkX2JhbGFuY2VfZG9tYWlucyhzdHJ1Y3QgcnEgKnJxLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5MjktXFx0aW50IGNwdSA9IHJxLVxcdTAwM2VjcHU7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMzkzMDpcXHRpbnQgYnVzeSA9IGlkbGUgIT0gQ1BVX0lETEUgXFx1MDAyNlxcdTAwMjYgIXNjaGVkX2lkbGVfcnEocnEpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5MzEtXFx0dW5zaWduZWQgbG9uZyBpbnRlcnZhbDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NjctXFx0XFx0XFx0XFx0aWRsZSA9IGlkbGVfY3B1KGNwdSk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMzk2ODpcXHRcXHRcXHRcXHRidXN5ID0gIWlkbGUgXFx1MDAyNlxcdTAwMjYgIXNjaGVkX2lkbGVfcnEocnEpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NjktXFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL3NjaGVkL2lkbGUuYz0xNj1leHRlcm4gY2hhciBfX2NwdWlkbGVfdGV4dF9zdGFydFtdLCBfX2NwdWlkbGVfdGV4dF9lbmRbXTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9pZGxlLmMtMTgtLyoqXFxua2VybmVsL3NjaGVkL2lkbGUuYzoxOTogKiBzY2hlZF9pZGxlX3NldF9zdGF0ZSAtIFJlY29yZCBpZGxlIHN0YXRlIGZvciB0aGUgY3VycmVudCBDUFUuXFxua2VybmVsL3NjaGVkL2lkbGUuYy0yMC0gKiBAaWRsZV9zdGF0ZTogU3RhdGUgdG8gcmVjb3JkLlxcbmtlcm5lbC9zY2hlZC9pZGxlLmMtMjEtICovXFxua2VybmVsL3NjaGVkL2lkbGUuYzoyMjp2b2lkIHNjaGVkX2lkbGVfc2V0X3N0YXRlKHN0cnVjdCBjcHVpZGxlX3N0YXRlICppZGxlX3N0YXRlKVxcbmtlcm5lbC9zY2hlZC9pZGxlLmMtMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo1NC41ODQ0OTA0MzRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxODkzNzkyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2NoZWR1bGVyIEV4dGVuc2lvbiBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhbiBvcHRpbWl6YXRpb24uIEN1cnJlbnRseSwgdGhlIGNvZGUsIHdpdGhpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AsIGNhbGxzIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBvcGVyYXRpb24sIGJ1dCBub3csIGl0IGhhcyBhZGRlZCBhbiBhZGRpdGlvbmFsIGNoZWNrLCBlbnN1cmluZyB0aGUgY2FsbGJhY2sgaXNuJ3QgY2FsbGVkIGlmIHRoZSBpZGxlIHN0YXRlIGhhc24ndCBhY3R1YWxseSBjaGFuZ2VkLiBTcGVjaWZpY2FsbHksIGJlZm9yZSB0aGUgY2hhbmdlLCBpdCBkaWQgdGhpczpcblxuYGBgY1xuXHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBzY2ggXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpKVxuXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG5gYGBcblxuYW5kIGFmdGVyIHRoZSBjaGFuZ2UsIHRoZSBhZGRpdGlvbiBvZiB0aGUgY2hlY2sgbm93IGlzOlxuXG5gYGBjXG5cdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXHUwMDI2XHUwMDI2XG5cdCAgICB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlKVxuXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG5gYGBcblxuVGhpcyBwcmV2ZW50cyB0aGUgY2FsbGJhY2sgZnJvbSBiZWluZyBjYWxsZWQgaWYgdGhlIGlkbGUgc3RhdGUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIGB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZWAuIEkgY2FuIHNlZSB0aGUgaW50ZW50OiByZWR1Y2UgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIEl0J3MgYSBnb29kIHByYWN0aWNlLCBhdm9pZGluZyByZWR1bmRhbnQgd29yaywgYW5kIGltcHJvdmluZyBwZXJmb3JtYW5jZSBzbGlnaHRseS5cblxuTm93LCBhIGtleSBjb25jZXJuIGluIHRoZXNlIHR5cGVzIG9mIGNoYW5nZXMgaXMgbWVtb3J5IHNhZmV0eSBhbmQgcG9zc2libGUgaW5mb3JtYXRpb24gbGVha3MuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbmV3IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBDaGVja2luZyBpbiBgc2N4X3RnX2luaXRgLCBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYDpcblxuYGBgY1xudm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG57XG4uLi5cblx0dGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7XG5cdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gZmFsc2U7XG59XG5gYGBcblxuVGhhdCdzIGdvb2QuIEl0J3MgaW5pdGlhbGl6ZWQgb24gdGFzayBncm91cCBpbml0aWFsaXphdGlvbi5cblxuU28sIGxldCdzIGFuYWx5emUgdGhlIHBvdGVudGlhbCByaXNrczpcblxuKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/KiogTm8uIGB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC5cbiogICAqKk5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBkYXRhIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZT8qKiBOb3BlLiBUaGUgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4qICAgKipVbmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgcGFkZGluZyBzZW50IGFjcm9zcyB0aGUgdXNlci9rZXJuZWwgYm91bmRhcnk/KiogTm90IGF0IGFsbC4gTm8gc3VjaCB0aGluZyBpcyBoYXBwZW5pbmcuXG4qICAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLCBiZWNhdXNlIGB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZWAgaXMgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIG9wdGltaXphdGlvbiwgbWluaW1pemluZyB0aGUgbmVlZCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdoZW4gaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNhbGxlZC5cblxuR2l2ZW4gYWxsIG9mIHRoYXQsIGxldCdzIHRyaXBsZS1jaGVjayBhZ2FpbnN0IG15IGNyaXRlcmlhIGZvciBgS01TQU5gOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyoqIE5vLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBzY3hfdGdfaW5pdCgpYC5cbjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogTm8uXG40LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNhbiBsZWFkIHRvIGFjY2VzcyBvZiB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLlxuXG5BbHJpZ2h0LiBObyBLTVNBTiBuZWVkZWQgaGVyZS4gVGhpcyBib2lscyBkb3duIHRvIGEgbG9naWMgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUga2VybmVsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEknZCBhc3Nlc3MgdGhhdCBzdGFuZGFyZCBzYW5pdGl6ZXJzLCBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLCBhcmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQuIEtNU0FOIGlzIG92ZXJraWxsIGZvciB0aGlzIGtpbmQgb2YgY2hhbmdlLlxuTm93LCByZWFkeSB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzIsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU3OjA0Ljc3Mzg3MTg1OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNjeF9ncm91cF9zZXRfaWRsZSgpYCBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgdG8gY2hlY2sgYHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlYCBiZWZvcmUgaW52b2tpbmcgdGhlIGBjZ3JvdXBfc2V0X2lkbGVgIHNjaGVkdWxlciBvcGVyYXRpb24gY2FsbGJhY2ssIGF2b2lkaW5nIHJlZHVuZGFudCBjYWxsYmFja3Mgd2hlbiB0aGUgaWRsZSBzdGF0ZSBkb2VzIG5vdCBjaGFuZ2UuXFxuXFxuYHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZWAgaXMgYSBib29sZWFuIG1lbWJlciBvZiBgc3RydWN0IHRhc2tfZ3JvdXBgIHRoYXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBzY3hfdGdfaW5pdCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaGVhcCBvciBzdGFjayBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2N4X2dyb3VwX3NldF9pZGxlKClgIGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCB0byBjaGVjayBgdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGVgIGJlZm9yZSBpbnZva2luZyB0aGUgYGNncm91cF9zZXRfaWRsZWAgc2NoZWR1bGVyIG9wZXJhdGlvbiBjYWxsYmFjaywgYXZvaWRpbmcgcmVkdW5kYW50IGNhbGxiYWNrcyB3aGVuIHRoZSBpZGxlIHN0YXRlIGRvZXMgbm90IGNoYW5nZS5cXG5cXG5gdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlYCBpcyBhIGJvb2xlYW4gbWVtYmVyIG9mIGBzdHJ1Y3QgdGFza19ncm91cGAgdGhhdCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHNjeF90Z19pbml0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBoZWFwIG9yIHN0YWNrIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 01:23:31 +0000 UTC FinishedAt: 2026-09-02 01:57:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8b72f6626dc39b9e7e82b2721d4f7c3b86286012", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED", "CGROUPS", "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "8b72f6626dc39b9e7e82b2721d4f7c3b86286012", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED", "CGROUPS", "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "a0010484-bcc7-4824-b30f-8828a34fd62b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "scx_group_set_idle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNjeF9ncm91cF9zZXRfaWRsZSgpYCBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgdG8gY2hlY2sgYHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGVgIGJlZm9yZSBpbnZva2luZyB0aGUgYGNncm91cF9zZXRfaWRsZWAgc2NoZWR1bGVyIG9wZXJhdGlvbiBjYWxsYmFjaywgYXZvaWRpbmcgcmVkdW5kYW50IGNhbGxiYWNrcyB3aGVuIHRoZSBpZGxlIHN0YXRlIGRvZXMgbm90IGNoYW5nZS5cblxuYHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlYCBpcyBhIGJvb2xlYW4gbWVtYmVyIG9mIGBzdHJ1Y3QgdGFza19ncm91cGAgdGhhdCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHNjeF90Z19pbml0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBoZWFwIG9yIHN0YWNrIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzY3hfZ3JvdXBfc2V0X2lkbGUoKSBpbiB0aGUgZXh0ZW5zaWJsZSBzY2hlZHVsZXIgY2xhc3MgKHNjaGVkX2V4dCkgdG8gYXZvaWQgaW52b2tpbmcgdGhlIGNncm91cF9zZXRfaWRsZSBCUEYgY2FsbGJhY2sgaWYgdGhlIHRhc2sgZ3JvdXAmIzM5O3MgaWRsZSBzdGF0ZSBoYXNuJiMzOTt0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc3YTNhMGQ0MDQyNjVjODZkYjYzMWY3YjBkYzc4MTEzZDY1MGM1MjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDAxOjU1OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5pbmRleCA4MDQxYzg3YTM1NjJlLi44YjM2MjUxMDdiNzI0IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuQEAgLTQ5MzMsNyAmIzQzOzQ5MzMsOCBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcbiBcdHBlcmNwdV9kb3duX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuIFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xuIFxuLVx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSlcbiYjNDM7XHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBzY2ggXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlKVxuIFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzY3hfZ3JvdXBfc2V0X2lkbGUoKSBpbiB0aGUgZXh0ZW5zaWJsZSBzY2hlZHVsZXIgY2xhc3MgKHNjaGVkX2V4dCkgdG8gYXZvaWQgaW52b2tpbmcgdGhlIGNncm91cF9zZXRfaWRsZSBCUEYgY2FsbGJhY2sgaWYgdGhlIHRhc2sgZ3JvdXAmIzM5O3MgaWRsZSBzdGF0ZSBoYXNuJiMzOTt0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3YTNhMGQ0MDQyNjVjODZkYjYzMWY3YjBkYzc4MTEzZDY1MGM1MjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDAxOjU1OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKaW5kZXggODA0MWM4N2EzNTYyZS4uOGIzNjI1MTA3YjcyNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCkBAIC00OTMzLDcgJiM0Mzs0OTMzLDggQEAgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpCiAJcGVyY3B1X2Rvd25fcmVhZCgmYW1wO3NjeF9jZ3JvdXBfb3BzX3J3c2VtKTsKIAlzY2ggPSBzY3hfdGdfa25vYl9zY2hlZCh0Zyk7CiAKLQlpZiAoc2N4X2Nncm91cF9lbmFibGVkICZhbXA7JmFtcDsgc2NoICZhbXA7JmFtcDsgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkpCiYjNDM7CWlmIChzY3hfY2dyb3VwX2VuYWJsZWQgJmFtcDsmYW1wOyBzY2ggJmFtcDsmYW1wOyBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgIT0gaWRsZSkKIAkJU0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTsKIAogCS8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCYjMzk7cyBpZGxlIHN0YXRlICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbi4gSSBzZWUgYSBjb21taXQgd2l0aCBhIGBkaWZmYCBwcmVzZW50ZWQsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgLiBUaGlzIGlzIGluIHRoZSBzY2hlZHVsZXIgZXh0ZW5zaW9uIGNvZGUsIHdoaWNoIGNvdWxkIGRlZmluaXRlbHkgYmUgaW50ZXJlc3RpbmcuCgpUaGUgZGlmZiBpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gTG9va2luZyBhdCB0aGUgY2hhbmdlcyBhcm91bmQgbGluZSA0OTMzLCBpdCBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IGhhcyBiZWVuIG1vZGlmaWVkIHdpdGhpbiB0aGUgYHNjeF9ncm91cF9zZXRfaWRsZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBhIGNoZWNrIGZvciBgdGctJmd0O3NjeC5zY2hlZF9pZGxlICE9IGlkbGVgIGhhcyBiZWVuIGFkZGVkLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIG9wdGltaXppbmcgYSBjaGVjaywgc28gbWF5YmUgd2UgY2FuIHJ1bGUgaXQgb3V0IGltbWVkaWF0ZWx5LCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgbW9yZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYGdpdCBncmVwYCBvciBqdXN0IHB1bGwgdXAgdGhlIGZpbGUgYW5kIHJlYWQgYXJvdW5kIHRoYXQgbGluZSwgc2VlIGhvdyB0aGlzIGBzY3guc2NoZWRfaWRsZWAgZmllbGQgaXMgYmVpbmcgdXNlZCBhbmQgbW9kaWZpZWQsIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQuIEtub3dpbmcgd2hhdCBgU0NYX0hBU19PUGAgYW5kIGBTQ1hfQ0FMTF9PUGAgYXJlIHdvdWxkIGJlIGhlbHBmdWwgdG9vLiBCYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgYXNzZXNzbWVudCBhYm91dCB3aGV0aGVyIHRoaXMgY29uZGl0aW9uYWwgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBuZXcgY29kZSBwYXRocyBvciBhbHRlciBleGlzdGluZyBiZWhhdmlvciBpbiBhIHdheSB0aGF0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIGEgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2V4dC9leHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDkyMDpcdFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF93ZWlnaHQpIFx1MDAyNlx1MDAyNlxuNDkyMTpcdFx0ICAgIHRnLVx1MDAzZXNjeC53ZWlnaHQgIT0gd2VpZ2h0KVxuNDkyMjpcdFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0LCBOVUxMLCB0Z19jZ3JwKHRnKSwgd2VpZ2h0KTtcbjQ5MjM6XHRcbjQ5MjQ6XHRcdHRnLVx1MDAzZXNjeC53ZWlnaHQgPSB3ZWlnaHQ7XG40OTI1Olx0XG40OTI2Olx0XHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG40OTI3Olx0fVxuNDkyODpcdFxuNDkyOTpcdHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxuNDkzMDpcdHtcbjQ5MzE6XHRcdHN0cnVjdCBzY3hfc2NoZWQgKnNjaDtcbjQ5MzI6XHRcbjQ5MzM6XHRcdHBlcmNwdV9kb3duX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuNDkzNDpcdFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xuNDkzNTpcdFxuNDkzNjpcdFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSBcdTAwMjZcdTAwMjZcbjQ5Mzc6XHRcdCAgICB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlKVxuNDkzODpcdFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpO1xuNDkzOTpcdFxuNDk0MDpcdFx0LyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi9cbjQ5NDE6XHRcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gaWRsZTtcbjQ5NDI6XHRcbjQ5NDM6XHRcdHBlcmNwdV91cF9yZWFkKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbjQ5NDQ6XHR9XG40OTQ1Olx0XG40OTQ2Olx0dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsXG40OTQ3Olx0XHRcdFx0ICAgICB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cylcbjQ5NDg6XHR7XG40OTQ5Olx0XHRzdHJ1Y3Qgc2N4X3NjaGVkICpzY2g7XG40OTUwOlx0XG40OTUxOlx0XHRwZXJjcHVfZG93bl9yZWFkKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbjQ5NTI6XHRcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcbjQ5NTM6XHRcbjQ5NTQ6XHRcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfYmFuZHdpZHRoKSBcdTAwMjZcdTAwMjZcbjQ5NTU6XHRcdCAgICAodGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyAhPSBwZXJpb2RfdXMgfHxcbjQ5NTY6XHRcdCAgICAgdGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzICE9IHF1b3RhX3VzIHx8XG40OTU3Olx0XHQgICAgIHRnLVx1MDAzZXNjeC5id19idXJzdF91cyAhPSBidXJzdF91cykpXG40OTU4Olx0XHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9iYW5kd2lkdGgsIE5VTEwsXG40OTU5Olx0XHRcdFx0ICAgIHRnX2NncnAodGcpLCBwZXJpb2RfdXMsIHF1b3RhX3VzLCBidXJzdF91cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYHNjeF9ncm91cF9zZXRfaWRsZWAgVXNhZ2UgYW5kIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIHN5c3RlbS4gU28sIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QgaXMgdG8gcmVhY2ggZm9yIGBncmVwYC4gSSYjMzk7bGwgcnVuIGEgcXVpY2sgc2VhcmNoIGZvciB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZSwgYHNjeF9ncm91cF9zZXRfaWRsZWAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsaXN0IG9mIGNhbGwgc2l0ZXMgdG8gd29yayBmcm9tLiBUaGVuIEkgY2FuIGFuYWx5emUgdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIGJvdGggYHNjaGVkX2V4dGAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgY2FuIHVzZSBteSBleHBlcnQga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIEkgY2FuIHVzZSB0aGUgc2VhcmNoIHJlc3VsdHMgYXMgYSBiYXNlIHRvIHN0YXJ0IGZyb20uIFdpdGggYGdyZXBgIEkgY2FuIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29kZSBmbG93LiBXaXRoIHRoZSBjYWxsIHNpdGVzLCBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFzc3VtcHRpb25zIGluIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgY2FsbCBzaXRlcyB3aXRoIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucywgbGlrZWx5IGJ5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgd2F5IEkgY2FuIGRldGVybWluZSB0aGUgcHJlY2lzZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhpcyBraW5kIG9mIHN5c3RlbWF0aWMgYW5hbHlzaXMgaXMgdGhlIGtleSB0byBxdWlja2x5IHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU5PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2NS1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDI2NjpcdFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNjctXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMz12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI4LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTI5OnZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTMwLXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgxPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTMtc3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdmVyaWZ5IGEgZmV3IGtleSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBzY2hlZHVsZXIgZXh0ZW5zaW9ucyBJJiMzOTttIHRhcmdldGluZy4gSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiBmZWF0dXJlcyByZWxhdGVkIHRvIGV4dGVuZGluZyB0aGUgc2NoZWR1bGluZyBjbGFzc2VzLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIGBDR1JPVVBfU0NIRURgIG9wdGlvbiwgYXMgSSB3aWxsIGJlIG5lZWRpbmcgdG8gZW5hYmxlIHNvbWUgbW9yZSBhZHZhbmNlZCBmdW5jdGlvbmFsaXR5IHRoZXJlIHRvby4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBhcmUgZWl0aGVyIGVuYWJsZWQgb3IgYXQgbGVhc3QgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIGlmIEkgd2FudCBteSB3b3JrIHRvIGJlIHZhbGlkLiBCZXR0ZXIgdG8gY2hlY2sgbm93IGFuZCBzYXZlIHNvbWUgaGVhZGFjaGVzIGxhdGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTU5LVxua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jOjYwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNjEtIyBpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjYwLVxua2VybmVsL3NjaGVkL2NvcmUuYzoyNjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjYyLVx0aWYgKHBhID09IE1BWF9SVF9QUklPICYjNDM7IE1BWF9OSUNFICYjNDM7IDEpXHQvKiBleHQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ1NzM9c3RhdGljIHZvaWQgX19zY2hlZF9mb3JrKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYxMC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDYxMTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEyLVx0aW5pdF9zY3hfZW50aXR5KFx1MDAyNnAtXHUwMDNlc2N4KTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ4MTM9aW50IHNjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00ODYwLVx0XHRwLVx1MDAzZXNjaGVkX2NsYXNzID0gXHUwMDI2cnRfc2NoZWRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjQ4NjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDg2Mi1cdH0gZWxzZSBpZiAodGFza19zaG91bGRfc2N4KHAtXHUwMDNlcG9saWN5KSkge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzYwOD1jb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKl9fc2V0c2NoZWR1bGVyX2NsYXNzKGludCBwb2xpY3ksIGludCBwcmlvKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzYxNS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzYxNjojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2NvcmUuYy03NjE3LVx0aWYgKHRhc2tfc2hvdWxkX3NjeChwb2xpY3kpKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODg2OD1pbnQgc2NoZWRfY3B1X2R5aW5nKHVuc2lnbmVkIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04ODgyLVx0ZGxfc2VydmVyX3N0b3AoXHUwMDI2cnEtXHUwMDNlZmFpcl9zZXJ2ZXIpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo4ODgzOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg4ODQtXHRkbF9zZXJ2ZXJfc3RvcChcdTAwMjZycS1cdTAwM2VleHRfc2VydmVyKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg5NTE9dm9pZCBfX2luaXQgc2NoZWRfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2MC1cdEJVR19PTighc2NoZWRfY2xhc3NfYWJvdmUoXHUwMDI2ZmFpcl9zY2hlZF9jbGFzcywgXHUwMDI2aWRsZV9zY2hlZF9jbGFzcykpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo4OTYxOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NjItXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MsIFx1MDAyNmV4dF9zY2hlZF9jbGFzcykpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA3OC1cdFx0ZmFpcl9zZXJ2ZXJfaW5pdChycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjkwNzk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA4MC1cdFx0ZXh0X3NlcnZlcl9pbml0KHJxKTtcbi0tXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xMDg9c3RhdGljIGlubGluZSB1OCBkbF9nZXRfdHlwZShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMTMtXHRcdHJldHVybiBETF9TRVJWRVJfRkFJUjtcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjExNDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMTE1LVx0aWYgKGRsX3NlID09IFx1MDAyNnJxLVx1MDAzZWV4dF9zZXJ2ZXIpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MTg0Mj12b2lkIHNjaGVkX2luaXRfZGxfc2VydmVycyh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTE4NjYtXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYzoxODY3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY4LVx0XHRkbF9zZSA9IFx1MDAyNnJxLVx1MDAzZWV4dF9zZXJ2ZXI7XG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ1MT1zdGF0aWMgdm9pZCBkbF9zZXJ2ZXJfYWRkX2J3KHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMzQ1OC1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NTk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTM0NjAtXHRkbF9zZSA9IFx1MDAyNmNwdV9ycShjcHUpLVx1MDAzZWV4dF9zZXJ2ZXI7XG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ2Nj1zdGF0aWMgdTY0IGRsX3NlcnZlcl9yZWFkX2J3KGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMzQ3My1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NzQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTM0NzUtXHRpZiAoY3B1X3JxKGNwdSktXHUwMDNlZXh0X3NlcnZlci5kbF9zZXJ2ZXIgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NDk0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3NjaGVkO1xua2VybmVsL3NjaGVkL2RlYnVnLmMtNDk1LVxua2VybmVsL3NjaGVkL2RlYnVnLmM6NDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvZGVidWcuYy00OTctc3RhdGljIHNzaXplX3Rcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYz01NjE9c3RhdGljIHZvaWQgZGVidWdmc19leHRfc2VydmVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy01ODAtfVxua2VybmVsL3NjaGVkL2RlYnVnLmM6NTgxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXG5rZXJuZWwvc2NoZWQvZGVidWcuYy01ODItXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NjktXHRkZWJ1Z2ZzX2ZhaXJfc2VydmVyX2luaXQoKTtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjc3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNzcxLVx0ZGVidWdmc19leHRfc2VydmVyX2luaXQoKTtcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYz0xNDA2PXZvaWQgcHJvY19zY2hlZF9zaG93X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMTUwNS1cdH1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjE1MDY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTE1MDctXHRfX1BTKFwmIzM0O2V4dC5lbmFibGVkXCYjMzQ7LCB0YXNrX29uX3NjeChwKSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz02NDE9dm9pZCBzY3hfc2V0X3Rhc2tfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgc3RhdGUpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02OTctICogc2N4X3Rhc2tzIGNhbiBiZSByZW1vdmVkIGluIGZhdm9yIG9mIGFsd2F5cyB1c2luZyBjZ3JvdXAgaXRlcmF0aW9uIGlmXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjY5ODogKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUIGRlcGVuZHMgb24gQ09ORklHX0NHUk9VUFMuXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTY5OS0gKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOC0gKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC0xMC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTM5PWJvb2wgc2N4X3ByaW9fbGVzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmEsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYixcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTQyLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo0MzojZWxzZVx0LyogQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC00NC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTU3PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NjaGVkX2V4dF9jbGFzcyh2b2lkKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC01OC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NTk6I2VuZGlmXHQvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYwLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo2MTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC02Mi12b2lkIF9fc2N4X3VwZGF0ZV9pZGxlKHN0cnVjdCBycSAqcnEsIGJvb2wgaWRsZSwgYm9vbCBkb19ub3RpZnkpO1xuLS1cbmtlcm5lbC9zY2hlZC9pZGxlLmM9NTU3PXN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyX2lkbGUoc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU2OS1cdGRsX3NlcnZlcl91cGRhdGVfaWRsZShcdTAwMjZycS1cdTAwM2VmYWlyX3NlcnZlciwgZGVsdGFfZXhlYyk7XG5rZXJuZWwvc2NoZWQvaWRsZS5jOjU3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2lkbGUuYy01NzEtXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXHUwMDI2cnEtXHUwMDNlZXh0X3NlcnZlciwgZGVsdGFfZXhlYyk7XG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTk0PXN0YXRpYyBpbmxpbmUgaW50IG5vcm1hbF9wb2xpY3koaW50IHBvbGljeSlcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5NS17XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5Ny1cdGlmIChwb2xpY3kgPT0gU0NIRURfRVhUKVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTY4MT1zdHJ1Y3QgY2ZzX3JxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC03NzktXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo3ODA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTc4MS0vKiBzY3hfcnEtXHUwMDNlZmxhZ3MsIHByb3RlY3RlZCBieSB0aGUgcnEgbG9jayAqL1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTgxMT1zdHJ1Y3Qgc2N4X3JxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC04NTAtfTtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjg1MTojZW5kaWYgLyogQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL3NjaGVkLmgtODUyLVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjEzLVx0c3RydWN0IGRsX3JxXHRcdGRsO1xua2VybmVsL3NjaGVkL3NjaGVkLmg6MTIxNDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxNS1cdHN0cnVjdCBzY3hfcnFcdFx0c2N4O1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE4ODU9ZXh0ZXJuIHN0cnVjdCBiYWxhbmNlX2NhbGxiYWNrIGJhbGFuY2VfcHVzaF9jYWxsYmFjaztcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODYtXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxODg3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xODg4LWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgZXh0X3NjaGVkX2NsYXNzO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MDQ9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxMC1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjE5MTE6I2Vsc2UgLyogIUNPTkZJR19TQ0hFRF9DTEFTU19FWFQ6ICovXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTEyLSNkZWZpbmUgc2N4X2VuYWJsZWQoKVx0XHRmYWxzZVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MTY9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTE3OiNlbmRpZiAvKiAhQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxOC1cbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0yODQxPXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpuZXh0X2FjdGl2ZV9jbGFzcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzKVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NDMtXHRjbGFzcyYjNDM7JiM0Mzs7XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODQ0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODQ1LVx0aWYgKHNjeF9zd2l0Y2hlZF9hbGwoKSBcdTAwMjZcdTAwMjYgY2xhc3MgPT0gXHUwMDI2ZmFpcl9zY2hlZF9jbGFzcylcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz00NzQ9dm9pZCBycV9hdHRhY2hfcm9vdChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkKVxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTUxMi1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjUxMzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNTE0LVx0aWYgKHJxLVx1MDAzZWV4dF9zZXJ2ZXIuZGxfc2VydmVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb246CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoIGZvciBTQ0hFRF9DTEFTU19FWFQqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgU0NIRURfQ0xBU1NfRVhUYCBjb25maWcgb3B0aW9uIGxpdmVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uIG9yIHRoZSBzY2hlZHVsZXIuIGBpbml0L0tjb25maWdgIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdlbmVyYWwgc3lzdGVtIGZlYXR1cmVzLCBidXQgZ2l2ZW4gaXQmIzM5O3Mgc2NoZWR1bGVyIHJlbGF0ZWQsIEnigJlsbCBsaWtlbHkgYmUgbW9yZSBzdWNjZXNzZnVsIGxvb2tpbmcgaW5zaWRlIGBrZXJuZWwvc2NoZWQvS2NvbmZpZ2AuIEFuZCwgZGVwZW5kaW5nLCBtYXliZSB0aGlzIGV4dGVuZHMgdG8gc29tZSBvZiB0aGUgcHJlZW1wdGlvbiBjb25maWd1cmF0aW9uIGlmIEkmIzM5O20gdGhpbmtpbmcgbW9yZSBicm9hZGx5IGFib3V0IGl0cyBpbXBsaWNhdGlvbnMuIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCYjMzk7cyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIGl0cyByZWxhdGVkIHRvIHNjaGVkdWxpbmcgY2xhc3Nlcywgb3IgcHJlZW1wdGlvbiwgYXMgdGhlIGNhc2UgbWF5IGJlLiBUaW1lIHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGF0IHN0cmluZywgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCBpdHMgZGVmaW5pdGlvbiBhbmQgY29udGV4dCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0NIRURfQ0xBU1NfRVhUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9MTU1PWNvbmZpZyBTQ0hFRF9DT1JFXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNzItXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjE3Mzpjb25maWcgU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3NC1cdGJvb2wgXCYjMzQ7RXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFByZWVtcHRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgcHJlZW1wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGtlcm5lbC9LY29uZmlnLnByZWVtcHRgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTczLiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgcHJlZW1wdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBsaWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgY2hvaWNlcyB0aGVyZSB0aGF0IGRyaXZlIHRoZSBiZWhhdmlvcjogd2hldGhlciBpdCYjMzk7cyBmdWxsIHByZWVtcHRpb24sIHZvbHVudGFyeSBwcmVlbXB0aW9uLCBvciBtYXliZSBzb21lIG1vcmUgbnVhbmNlZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBhdXRob3JzIGNvbnNpZGVyZWQgY3JpdGljYWwgaW4gbWFraW5nIHRoZWlyIGRlY2lzaW9ucy4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIGJhc2lzIHRvIHNlZSB0aGUgaW50ZXItcmVsYXRlZCBpbXBhY3RzIGluIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XHQgIHdoaWNoIGlzIHRoZSBsaWtlbHkgdXNhZ2UgYnkgTGludXggZGlzdHJpYnV0aW9ucywgdGhlcmUgc2hvdWxkXG4gMTcxOlx0XHQgIGJlIG5vIG1lYXN1cmFibGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcbiAxNzQ6XHRcdGJvb2wgXCYjMzQ7RXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXCYjMzQ7XG4gMTc1Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuIDE3NjpcdFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gMTc3Olx0XHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAxNzg6XHRcdGhlbHBcbiAxNzk6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIG5ldyBzY2hlZHVsZXIgY2xhc3Mgc2NoZWRfZXh0IChTQ1gpLCB3aGljaFxuIDE4MDpcdFx0ICBhbGxvd3Mgc2NoZWR1bGluZyBwb2xpY2llcyB0byBiZSBpbXBsZW1lbnRlZCBhcyBCUEYgcHJvZ3JhbXMgdG9cbiAxODE6XHRcdCAgYWNoaWV2ZSB0aGUgZm9sbG93aW5nOlxuIDE4MjpcdFxuIDE4MzpcdFx0ICAtIEVhc2Ugb2YgZXhwZXJpbWVudGF0aW9uIGFuZCBleHBsb3JhdGlvbjogRW5hYmxpbmcgcmFwaWRcbiAxODQ6XHRcdCAgICBpdGVyYXRpb24gb2YgbmV3IHNjaGVkdWxpbmcgcG9saWNpZXMuXG4gMTg1Olx0XHQgIC0gQ3VzdG9taXphdGlvbjogQnVpbGRpbmcgYXBwbGljYXRpb24tc3BlY2lmaWMgc2NoZWR1bGVycyB3aGljaFxuIDE4NjpcdFx0ICAgIGltcGxlbWVudCBwb2xpY2llcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byBnZW5lcmFsLXB1cnBvc2VcbiAxODc6XHRcdCAgICBzY2hlZHVsZXJzLlxuIDE4ODpcdFx0ICAtIFJhcGlkIHNjaGVkdWxlciBkZXBsb3ltZW50czogTm9uLWRpc3J1cHRpdmUgc3dhcCBvdXRzIG9mXG4gMTg5Olx0XHQgICAgc2NoZWR1bGluZyBwb2xpY2llcyBpbiBwcm9kdWN0aW9uIGVudmlyb25tZW50cy5cbiAxOTA6XHRcbiAxOTE6XHRcdCAgc2NoZWRfZXh0IGxldmVyYWdlcyBCUEYgc3RydWN0X29wcyBmZWF0dXJlIHRvIGRlZmluZSBhIHN0cnVjdHVyZVxuIDE5MjpcdFx0ICB3aGljaCBleHBvcnRzIGZ1bmN0aW9uIGNhbGxiYWNrcyBhbmQgZmxhZ3MgdG8gQlBGIHByb2dyYW1zIHRoYXRcbiAxOTM6XHRcdCAgd2lzaCB0byBpbXBsZW1lbnQgc2NoZWR1bGluZyBwb2xpY2llcy4gVGhlIHN0cnVjdF9vcHMgc3RydWN0dXJlXG4gMTk0Olx0XHQgIGV4cG9ydGVkIGJ5IHNjaGVkX2V4dCBpcyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgYW5kIGlzIGNvbmNlcHR1YWxseVxuIDE5NTpcdFx0ICBzaW1pbGFyIHRvIHN0cnVjdCBzY2hlZF9jbGFzcy5cbiAxOTY6XHRcbiAxOTc6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb246XG4gMTk4Olx0XHQgICAgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZXh0LnJzdFxuIDE5OTpcdFx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zY2hlZC1leHQvc2N4XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaWdnaW5nIGludG8gU2NoZWR1bGVyIEV4dGVuc2lvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc2NoZWR1bGVyIGV4dGVuc2lvbnMgYXJlIGludGVyYWN0aW5nLiBNeSBodW5jaCB0ZWxscyBtZSB0aGUgcGllY2VzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgZ29pbmcgdG8gYmUgbHVya2luZyBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuaGAgYW5kIGBrZXJuZWwvc2NoZWQvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgODAgaW4gdGhlIGBleHQuaGAgaGVhZGVyLCBhbmQgdGhlbiBhcm91bmQgbGluZSAxMDI1OSBpbiB0aGUgY29yZSBmaWxlLiBJJiMzOTttIGhvcGluZyB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBmbGFncyB0aGF0IGFjdHVhbGx5ICplbmFibGUqIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGFuZCBgY3B1X2lkbGVfd3JpdGVfczY0YC4gVGhvc2UgdHdvIGZ1bmN0aW9ucyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtLiBCeSB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBleGFjdCBzZXQgb2YgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBwYXJ0aWN1bGFyIGJlaGF2aW9yLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBpZGxlIHRhc2sgbWFuYWdlbWVudCBpbnRlcmFjdHMgd2l0aCBzY2hlZHVsZXIgZXh0ZW5zaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZXh0L2V4dC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSkge31cbiAgNzE6XHQjZW5kaWZcbiAgNzI6XHRcbiAgNzM6XHQjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRFxuICA3NDpcdCNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG4gIDc1Olx0dm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xuICA3NjpcdGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XG4gIDc3Olx0dm9pZCBzY3hfdGdfb2ZmbGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xuICA3ODpcdGludCBzY3hfY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KTtcbiAgNzk6XHR2b2lkIHNjeF9jZ3JvdXBfbW92ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4gIDgwOlx0dm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KTtcbiAgODE6XHR2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XG4gIDgyOlx0dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xuICA4MzpcdHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cyk7XG4gIDg0Olx0I2Vsc2VcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbiAgODU6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7fVxuICA4NjpcdHN0YXRpYyBpbmxpbmUgaW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7IHJldHVybiAwOyB9XG4gIDg3Olx0c3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19vZmZsaW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cbiAgODg6XHRzdGF0aWMgaW5saW5lIGludCBzY3hfY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7IHJldHVybiAwOyB9XG4gIDg5Olx0c3RhdGljIGlubGluZSB2b2lkIHNjeF9jZ3JvdXBfbW92ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cbiAgOTA6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cbiAgOTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KSB7fVxuICA5MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XG4gIDkzOlx0c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4gIDk0Olx0I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG4gIDk1Olx0I2VuZGlmXHQvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBFeHRlbmRlZCBHcm91cCBTY2hlZHVsaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYCBpcyBmbGFzaGluZyBhIG1lbnRhbCByZWQgZmxhZywgb3IgcGVyaGFwcyBhIGdyZWVuIGZsYWcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBrZXJuZWwgc291cmNlcywgb3IgbWF5YmUganVzdCBteSBsb2NhbCB0cmVlIGlmIEkgaGF2ZSBvbmUgc2V0IHVwIHdpdGggcmVsZXZhbnQgcGF0Y2hlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYENPTkZJR19FWFRfR1JPVVBfU0NIRURgIGlzIGFjdHVhbGx5IHVzZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQmIzM5O3MgKmRlZmluZWQqIGFuZCAqcmVmZXJlbmNlZCogd2l0aGluIHRoZSBzY2hlZHVsZXIgY29kZS4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgc2NoZWR1bGluZyBmZWF0dXJlcywgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIEkgbWlnaHQgYWxzbyBsb29rIGZvciB1c2VzIG9mIGBFWFRfR1JPVVBfU0NIRURgIGRpcmVjdGx5LCBhcyBpdCBtYXkgYmUgdXNlZCBpbiBtYWNyb3Mgb3Igb3RoZXIgZGVmaW5pdGlvbnMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBtYXAgdGhlIGxhbmRzY2FwZSBzdXJyb3VuZGluZyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uOiBpdHMgcHVycG9zZSwgc2NvcGUsIGFuZCBpbXBhY3Qgb24gdGhlIGtlcm5lbCYjMzk7cyBzY2hlZHVsaW5nIGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGlmIGl0JiMzOTtzIG5ldywgb3IgYW4gZXZvbHV0aW9uIG9mIHNvbWV0aGluZyBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCwgb3IgaWYgSSYjMzk7dmUgYmVlbiBzbGVlcGluZyBvbiBhIHNpZ25pZmljYW50IHNjaGVkdWxlciBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFRfR1JPVVBfU0NIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9leHQuaD0xODU9c3RydWN0IHNjaGVkX2V4dF9lbnRpdHkge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgtMjgxLVx0LyogY29sZCBmaWVsZHMgKi9cbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0Lmg6MjgyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oLTI4My1cdHN0cnVjdCBjZ3JvdXBcdFx0KmNncnBfbW92aW5nX2Zyb207XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaD0zMDQ9c3RydWN0IHNjeF90YXNrX2dyb3VwIHtcbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0Lmg6MzA1OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oLTMwNi1cdC8qXG4tLVxuaW5pdC9LY29uZmlnPTExOTc9Y29uZmlnIFJUX0dST1VQX1NDSEVEX0RFRkFVTFRfRElTQUJMRURcbi0tXG5pbml0L0tjb25maWctMTIwNy1cbmluaXQvS2NvbmZpZzoxMjA4OmNvbmZpZyBFWFRfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMjA5LVx0Ym9vbFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTQxPUJURl9UWVBFX1NBRkVfVFJVU1RFRChzdHJ1Y3Qgc2N4X2luaXRfdGFza19hcmdzKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTk0MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5NDMtXHRzdHJ1Y3QgY2dyb3VwICpjZ3JvdXA7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NzMtI2VuZGlmIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5NzQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3NS1cdHNjeF90Z19pbml0KFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5NzY6I2VuZGlmIC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3Ny0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVEXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0zNzkyPXN0YXRpYyB2b2lkIHRhc2tfdGlja19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBpbnQgcXVldWVkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgxMC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgxMTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODEyLXN0YXRpYyBzdHJ1Y3QgY2dyb3VwICp0Z19jZ3JwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MjYtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjM4Mjc6I2Vsc2VcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgyOC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MzAtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjM4MzE6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MzItXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NjQyPWJvb2wgc2N4X2Nhbl9zdG9wX3RpY2soc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2NzctXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ2Nzg6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY3OS1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5NDY9dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTY2LX1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk2NzojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk2OC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk2OTojaWYgZGVmaW5lZChDT05GSUdfRVhUX0dST1VQX1NDSEVEKSB8fCBkZWZpbmVkKENPTkZJR19FWFRfU1VCX1NDSEVEKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTcwLXN0YXRpYyBzdHJ1Y3QgY2dyb3VwICpyb290X2Nncm91cCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk4MD12b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk4Mi1cdGNncm91cF9sb2NrKCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5ODM6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk4NC1cdHBlcmNwdV9kb3duX3dyaXRlKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5ODg9dm9pZCBzY3hfY2dyb3VwX3VubG9jayh2b2lkKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTg5LXtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk5MDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTkxLVx0cGVyY3B1X3VwX3dyaXRlKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTQtfVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTk1OiNlbHNlXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEIHx8IENPTkZJR19FWFRfU1VCX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTYtc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyb3VwICpyb290X2Nncm91cCh2b2lkKSB7IHJldHVybiBOVUxMOyB9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX3VubG9jayh2b2lkKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTk5OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCB8fCBDT05GSUdfRVhUX1NVQl9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MDAwLVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NTExMD1zdGF0aWMgdm9pZCBkZXN0cm95X2RzcShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHU2NCBkc3FfaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTQ4LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo1MTQ5OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNTAtc3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNzU9c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgaW5pdF90YXNrKTpcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA4MzojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDg0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI0MD1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI0MTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQyLXN0YXRpYyBzMzIgc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzICphcmdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjQ5PXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfaWRsZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyNTA6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyNTEtc3RhdGljIHMzMiBzY2hlZF9leHRfb3BzX19zdWJfYXR0YWNoKHN0cnVjdCBzY3hfc3ViX2F0dGFjaF9hcmdzICphcmdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjYyPXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyBfX2JwZl9vcHNfc2NoZWRfZXh0X29wcyA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODItXHQuZGlzYWJsZVx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODM6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4NC1cdC5jZ3JvdXBfaW5pdFx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyOT1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNDctXHQuZGlzYWJsZVx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNDg6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM0OS1cdC5jcHVjdGxfaW5pdFx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA3ODY9c3RhdGljIGNvbnN0IHUzMiBzY3hfa2ZfYWxsb3dfZmxhZ3NbXSA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkyLVx0W1NDWF9PUF9JRFgoZHVtcCldXHRcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDc5MzojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5NC1cdFtTQ1hfT1BfSURYKGNncm91cF9pbml0KV1cdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA4MDAtXHRbU0NYX09QX0lEWChjZ3JvdXBfc2V0X2lkbGUpXVx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwODAxOiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDgwMi1cdFtTQ1hfT1BfSURYKHN1Yl9hdHRhY2gpXVx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDkwMT1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTYtXHRDSURfT0ZGU0VUX01BVENIKGR1bXBfY3B1LCBkdW1wX2NpZCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTU3OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTU4LVx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfaW5pdCwgY3B1Y3RsX2luaXQpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTEwNTQ9X19pbml0Y2FsbChzY3hfaW5pdCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2NC0gKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwNjU6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjYtREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDY3OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NzA9c3RhdGljIGlubGluZSB2b2lkIHNjeF91cGRhdGVfaWRsZShzdHJ1Y3QgcnEgKnJxLCBib29sIGlkbGUsIGJvb2wgZG9fbm90aWZ5KSB7fVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzMtI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NzQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzUtdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODM9dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODQ6I2Vsc2VcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODUtc3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkzPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo5NDojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTUtI2VuZGlmXHQvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTIzNT1zdHJ1Y3Qgc2N4X2luaXRfdGFza19hcmdzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMjQwLVx0Ym9vbFx0XHRcdGZvcms7XG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjQxOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMjQyLVx0LyogdGhlIGNncm91cCB0aGUgdGFzayBpcyBqb2luaW5nICovXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTMyMj1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1MS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NTI6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTMtXHQvKipcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzg2LVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjc4NzojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODgtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTEwNDY9c3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3MS1cdHZvaWQgKCpkdW1wX3Rhc2spKHN0cnVjdCBzY3hfZHVtcF9jdHggKmN0eCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDcyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3My1cdHMzMiAoKmNwdWN0bF9pbml0KShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgKmFyZ3MpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDgzLVx0dm9pZCAoKmNwdWN0bF9zZXRfaWRsZSkoc3RydWN0IGNncm91cCAqY2dycCwgYm9vbCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDg0OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwODUtXHRzMzIgKCpzdWJfYXR0YWNoKShzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncyAqYXJncyk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTIwNzk9dm9pZCBzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoyMDgwOiNpZiBkZWZpbmVkKENPTkZJR19FWFRfR1JPVVBfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX0VYVF9TVUJfU0NIRUQpXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMjA4MS12b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jPTEyOTQ9c3RhdGljIHZvaWQgc2N4X2ZhaWxfcGFyZW50KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzMjAtXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzMjE6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMyMi0vKipcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvY29uZmlnPTM9Q09ORklHX0NHUk9VUF9TQ0hFRD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvY29uZmlnOjQ6Q09ORklHX0VYVF9HUk9VUF9TQ0hFRD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvY29uZmlnLTUtQ09ORklHX0JQRj15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBzeXN0ZW0uIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgbGVhZCwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBNeSBndXQgc2F5cyBpdCYjMzk7cyBsaWtlbHkgYSBzZXR0aW5nIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcywgcHJvYmFibHkgcmVsYXRlZCB0byBhIGNvbXBvbmVudCBvciBmZWF0dXJlIGJlaW5nIGluaXRpYWxpemVkIGF0IGJvb3QuIFNvLCBJIG5lZWQgdG8gY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcGxhY2UgZm9yIHRoZXNlIHNvcnRzIG9mIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzY2FuIGFyb3VuZCBsaW5lIDEyMDguIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBzZXR0aW5nIEkgYW0gaW50ZXJlc3RlZCBpbiBpcyBkZWZpbmVkLCBvciBhdCBsZWFzdCBsaW5rZWQgdG8uIFRpbWUgdG8gZ2V0IGRvd24gdG8gZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTk1Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4xMTk2Olx0XG4xMTk3Olx0Y29uZmlnIFJUX0dST1VQX1NDSEVEX0RFRkFVTFRfRElTQUJMRURcbjExOTg6XHRcdGJvb2wgXCYjMzQ7UmVxdWlyZSBib290IHBhcmFtZXRlciB0byBlbmFibGUgZ3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfUlIvRklGT1wmIzM0O1xuMTE5OTpcdFx0ZGVwZW5kcyBvbiBSVF9HUk9VUF9TQ0hFRFxuMTIwMDpcdFx0ZGVmYXVsdCBuXG4xMjAxOlx0XHRoZWxwXG4xMjAyOlx0XHQgIFdoZW4gc2V0LCB0aGUgUlQgZ3JvdXAgc2NoZWR1bGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBUaGUgb3B0aW9uXG4xMjAzOlx0XHQgIGlzIGluIGludmVydGVkIGZvcm0gc28gdGhhdCBtZXJlIFJUX0dST1VQX1NDSEVEIGVuYWJsZXMgdGhlIGdyb3VwXG4xMjA0Olx0XHQgIHNjaGVkdWxpbmcuXG4xMjA1Olx0XG4xMjA2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEyMDc6XHRcbjEyMDg6XHRjb25maWcgRVhUX0dST1VQX1NDSEVEXG4xMjA5Olx0XHRib29sXG4xMjEwOlx0XHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcdTAwMjZcdTAwMjYgQ0dST1VQX1NDSEVEXG4xMjExOlx0XHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXG4xMjEyOlx0XHRzZWxlY3QgR1JPVVBfU0NIRURfQkFORFdJRFRIXG4xMjEzOlx0XHRkZWZhdWx0IHlcbjEyMTQ6XHRcbjEyMTU6XHRlbmRpZiAjQ0dST1VQX1NDSEVEXG4xMjE2Olx0XG4xMjE3Olx0Y29uZmlnIEVYVF9TVUJfU0NIRURcbjEyMTg6XHQgICAgICAgIGRlZl9ib29sIHlcbjEyMTk6XHQgICAgICAgIGRlcGVuZHMgb24gU0NIRURfQ0xBU1NfRVhUIFx1MDAyNlx1MDAyNiBDR1JPVVBTXG4xMjIwOlx0XG4xMjIxOlx0Y29uZmlnIFNDSEVEX01NX0NJRFxuMTIyMjpcdFx0ZGVmX2Jvb2wgeVxuMTIyMzpcdFx0ZGVwZW5kcyBvbiBTTVAgXHUwMDI2XHUwMDI2IFJTRVFcbjEyMjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHRlbmRlZCBHcm91cCBTY2hlZHVsaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBFWFRfR1JPVVBfU0NIRURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCwgYW5kIHRoYXQgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIGBTQ0hFRF9DTEFTU19FWFRgLCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxyaWdodCwgc28gdGhlIGV4dGVuZGVkIHNjaGVkdWxlciBjbGFzcyBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBCUEYgZnVuY3Rpb25hbGl0aWVzLCBhbmQgZGVidWcgaW5mby4gVGhpcyBhbGwgc2VlbXMgdG8gYmUgYnVpbGRpbmcgYSBwaWN0dXJlIG9mIGEgbW9yZSBmbGV4aWJsZSBhbmQgcHJvZ3JhbW1hYmxlIHNjaGVkdWxpbmcgZW52aXJvbm1lbnQuCgpMZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGZvciBhIG1vbWVudC4gVG8gc2VlIGhvdyB0aGVzZSBzY2hlZHVsaW5nIHByaW5jaXBsZXMgYXJlIGFwcGxpZWQsIEkgd2FudCB0byBleHBsb3JlIGhvdyBgY3B1X2lkbGVfd3JpdGVfczY0YCB3b3JrcyBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aHJvdWdoIHRoYXQgZnVuY3Rpb24gdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24mIzM5O3MgaW1wYWN0IGlzIHJlYWxpemVkLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3B1X2lkbGVfd3JpdGVfczY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9MTAyNTM9c3RhdGljIHM2NCBjcHVfaWRsZV9yZWFkX3M2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNTgtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjU5OnN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjYwLVx0XHRcdFx0c3RydWN0IGNmdHlwZSAqY2Z0LCBzNjQgaWRsZSlcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTEwMjcxPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNwdV9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjgwLVx0XHQucmVhZF9zNjQgPSBjcHVfaWRsZV9yZWFkX3M2NCxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTAyODE6XHRcdC53cml0ZV9zNjQgPSBjcHVfaWRsZV93cml0ZV9zNjQsXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjgyLVx0fSxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTEwNTQxPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNwdV9maWxlc1tdID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA1NTgtXHRcdC5yZWFkX3M2NCA9IGNwdV9pZGxlX3JlYWRfczY0LFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDU1OTpcdFx0LndyaXRlX3M2NCA9IGNwdV9pZGxlX3dyaXRlX3M2NCxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA1NjAtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgU2NoZWR1bGVyIENvcmUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIExpbnV4IHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvc2NoZWQvY29yZS5jYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gbGluZSAxMDI1OS4gSSBrbm93IHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBzcGVjaWZpYyBsb2dpYyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGdpdmVuIHRoZSBjb250ZXh0IEkmIzM5O20gd29ya2luZyB3aXRoLiBUaGlzIGZ1bmN0aW9uIGNhbGwuLi4gdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3Igd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gSXQmIzM5O3Mgb2Z0ZW4gaGVscGZ1bCB0byBwaW5wb2ludCB0aGUgY29kZSBsb2NhdGlvbiBkaXJlY3RseSBpbnN0ZWFkIG9mIHNlYXJjaGluZyB0aHJvdWdoIHRoZSBlbnRpcmUgY29kZSBvciBsb29raW5nIGluIHRoZSBkb2N1bWVudGF0aW9uLiBIb3BlZnVsbHksIHRoaXMgc3RhcnRpbmcgcG9pbnQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIG9mIHRhc2sgc2NoZWR1bGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAyNTA6XHQjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovXG4xMDI1MTpcdFxuMTAyNTI6XHQjaWZkZWYgQ09ORklHX0dST1VQX1NDSEVEX1dFSUdIVFxuMTAyNTM6XHRzdGF0aWMgczY0IGNwdV9pZGxlX3JlYWRfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4xMDI1NDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnQpXG4xMDI1NTpcdHtcbjEwMjU2Olx0XHRyZXR1cm4gY3NzX3RnKGNzcyktXHUwMDNlaWRsZTtcbjEwMjU3Olx0fVxuMTAyNTg6XHRcbjEwMjU5Olx0c3RhdGljIGludCBjcHVfaWRsZV93cml0ZV9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbjEwMjYwOlx0XHRcdFx0XHRzdHJ1Y3QgY2Z0eXBlICpjZnQsIHM2NCBpZGxlKVxuMTAyNjE6XHR7XG4xMDI2MjpcdFx0aW50IHJldDtcbjEwMjYzOlx0XG4xMDI2NDpcdFx0cmV0ID0gc2NoZWRfZ3JvdXBfc2V0X2lkbGUoY3NzX3RnKGNzcyksIGlkbGUpO1xuMTAyNjU6XHRcdGlmICghcmV0KVxuMTAyNjY6XHRcdFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcbjEwMjY3Olx0XHRyZXR1cm4gcmV0O1xuMTAyNjg6XHR9XG4xMDI2OTpcdCNlbmRpZiAvKiBDT05GSUdfR1JPVVBfU0NIRURfV0VJR0hUICovXG4xMDI3MDpcdFxuMTAyNzE6XHRzdGF0aWMgc3RydWN0IGNmdHlwZSBjcHVfbGVnYWN5X2ZpbGVzW10gPSB7XG4xMDI3MjpcdCNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRURfV0VJR0hUXG4xMDI3MzpcdFx0e1xuMTAyNzQ6XHRcdFx0Lm5hbWUgPSBcJiMzNDtzaGFyZXNcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBTY2hlZHVsZXIgRXh0IENncm91cCBJZGxlIFN0YXRlIEhhbmRsaW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGRlYWw6IEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgc2N4X2dyb3VwX3NldF9pZGxlYCwgcGFydCBvZiB0aGUgc2NoZWR1bGVyJiMzOTtzIGV4dGVuc2libGUgY2xhc3MgKGBzY2hlZF9leHRgKS4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBpZGxlIHN0YXRlIHdpdGhpbiBjZ3JvdXBzLiAgSXQgc2VlbXMgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIGNhbGxpbmcgdGhlIEJQRiBvcGVyYXRpb24gYGNncm91cF9zZXRfaWRsZWAgdW5jb25kaXRpb25hbGx5LiBUaGlzIGlzIGEgcHJvYmxlbSwgYmVjYXVzZSBpdCYjMzk7cyBpbmVmZmljaWVudCBhbmQgcG90ZW50aWFsbHkgYnVnZ3kuCgpUaGUgZml4PyAgQSBzaW1wbGUsIGJ1dCBjcnVjaWFsLCBjaGVjazogYHRnLSZndDtzY3guc2NoZWRfaWRsZSAhPSBpZGxlYC4gVGhpcyBwcmV2ZW50cyByZWR1bmRhbnQgY2FsbHMgdG8gYGNncm91cF9zZXRfaWRsZWAgd2hlbiB0aGUgaWRsZSBzdGF0ZSBoYXNuJiMzOTt0IGFjdHVhbGx5IGNoYW5nZWQuICBFc3NlbnRpYWxseSwgbWFraW5nIHRoaXMgbW9kaWZpY2F0aW9uIGlzIHNpbWlsYXIgdG8gd2hhdCYjMzk7cyBkb25lIGZvciB0aGUgYHdlaWdodGAgYW5kIGBiYW5kd2lkdGhgIGNncm91cCBvcGVyYXRpb25zIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dvcnRoIGZ1enppbmc/JiMzNDsgQmFzZWQgb24gbXkgY3JpdGVyaWEsIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBzY2hlZHVsZXIgbG9naWMgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgLiBUaGUgY29kZSBpcyAqcmVhY2hhYmxlKiBmcm9tIHVzZXJzcGFjZSB2aWEgd3JpdGluZyB0byB0aGUgYGNwdS5pZGxlYCBjZ3JvdXAgY29udHJvbCBmaWxlLCB3aGljaCBjYWxscyB0aGUgYGNwdV9pZGxlX3dyaXRlX3M2NGAgZnVuY3Rpb24uIFRoaXMgcGF0Y2ggZGVmaW5pdGVseSBtb2RpZmllcyBhIGNvcmUgY29tcG9uZW50LgoKVG8gdmVyaWZ5IG15IGZ1enppbmcgaHlwb3RoZXNpcywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGNvbmZpZ3MgYW5kIHN5bWJvbHMgbmVlZCB0byBiZSBzZXQuICBPYnZpb3VzbHksIEkgbmVlZCBgU0NIRURfQ0xBU1NfRVhUYCwgYENHUk9VUF9TQ0hFRGAsIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBERUJVR19JTkZPX0JURmAuIFRoZXNlIGVuYWJsZSB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGFuZCBhcmUgY3JpdGljYWwgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBzY2hlZF9leHRgLiAgRW5hYmxpbmcgdGhlc2UgYWxzbyBpbXBsaWVzIHRoZSBlbmFibGVtZW50IG9mIGBFWFRfR1JPVVBfU0NIRURgLgoKSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGF0IHRoZSBmdW5jdGlvbnMgYHNjeF9ncm91cF9zZXRfaWRsZWAgYW5kIGBjcHVfaWRsZV93cml0ZV9zNjRgIGFyZSBpbXBvcnRhbnQgdG8gbm90ZS4KClNvLCBpbiBjb25jbHVzaW9uLCB0aGUgYW5zd2VyIGlzICpXb3J0aEZ1enppbmc9dHJ1ZSouICBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpbmVmZmljaWVuY3kgaW4gYSBjb3JlIHNjaGVkdWxpbmcgcGF0aCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyB0byB1bmNvdmVyIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvciByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcmVkdW5kYW50IGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1NDSEVEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMTQ4PWNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4tLVxuaW5pdC9LY29uZmlnLTExNTItXG5pbml0L0tjb25maWc6MTE1MzptZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnLTExNTQtXHRib29sIFwmIzM0O0NQVSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiBzdHVmZi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gYmUsIGFuZCBJIHJlbWVtYmVyIHNvbWV0aGluZyBiZWluZyBpbiB0aGF0IGFyZWEgcmVnYXJkaW5nIGl0cyBzdHJ1Y3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMTE1MyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eSBncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUxOlx0XHRkZWZhdWx0IHlcbjExNTI6XHRcbjExNTM6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1NDpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NTpcdFx0ZGVmYXVsdCBuXG4xMTU2Olx0XHRoZWxwXG4xMTU3Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1ODpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTk6XHRcdCAgdGFza3MuXG4xMTYwOlx0XG4xMTYxOlx0aWYgQ0dST1VQX1NDSEVEXG4xMTYyOlx0Y29uZmlnIEdST1VQX1NDSEVEX1dFSUdIVFxuMTE2MzpcdFx0ZGVmX2Jvb2wgblxuMTE2NDpcdFxuMTE2NTpcdGNvbmZpZyBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcbjExNjY6XHRcdGRlZl9ib29sIG5cbjExNjc6XHRcbjExNjg6XHRjb25maWcgRkFJUl9HUk9VUF9TQ0hFRFxuMTE2OTpcdFx0Ym9vbCBcJiMzNDtHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9PVEhFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA4MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlnIGZvciBDR1JPVVBfU0NIRUQqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgQ0dST1VQX1NDSEVEYCDigJMgd2hhdGV2ZXIgaXQgaXMg4oCTIGlzICpkZXBlbmRlbnQqIG9uIGBDR1JPVVBTYC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZywgcmVhbGx5OyBpdCYjMzk7cyBwcmFjdGljYWxseSBhIGdpdmVuIHdpdGggdGhpcyBraW5kIG9mIG1vZHVsYXJpdHkuIElmIEkgd2FudCB0byBlbmFibGUgYWR2YW5jZWQgc2NoZWR1bGluZyB3aXRoaW4gY2dyb3VwcywgSSYjMzk7bGwgbmVlZCB0aGUgY2dyb3VwIGluZnJhc3RydWN0dXJlIGl0c2VsZiBmaXJzdC4gU28sIHRoZSBwYXJlbnQgbWVudSBvciBjb25maWcgb3B0aW9uIGlzIGNsZWFybHkgYENHUk9VUFNgLgoKQWxyaWdodCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0IGV4cGxpY2l0bHkuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IGBDR1JPVVBfU0NIRURgICppcyogaW4gdGhhdCBjb250ZXh0LiBXaGF0IGZlYXR1cmVzIGRvZXMgaXQgZW5hYmxlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBleGFtaW5pbmcgYGluaXQvS2NvbmZpZ2Agd2lsbCBwcm92aWRlIHRoZSBmdWxsIHBpY3R1cmUuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIENHUk9VUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDU0PWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA1Ni1cbmluaXQvS2NvbmZpZzoxMDU3Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNTgtXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ2NAoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWxpemluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgT3B0aW1pemVkIEtlcm5lbCBGdXp6aW5nKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gY29uZmlndXJpbmcgYW5kIHdoeS4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7dmUgZ290IG15IGxpc3Q6IGBTQ0hFRF9DTEFTU19FWFRgLCBgQ0dST1VQU2AsIGBDR1JPVVBfU0NIRURgLCBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgLCBhbmQgYEJQRl9KSVRgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlcyBhbmQgaW5zdHJ1bWVudGF0aW9uIEkgbmVlZCBmb3IgZWZmZWN0aXZlIGZ1enppbmcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJlYXMgcmVsYXRlZCB0byBzY2hlZHVsaW5nLCBjZ3JvdXBzLCBhbmQgQlBGLiBFbmFibGluZyB0aGUgQlRGIGRhdGEgd2lsbCBnaXZlIGJldHRlciBjb3ZlcmFnZSBpbiB0cmFjaW5nIGFuZCBhbmFseXNpcy4gQlBGIGlzIGNlbnRyYWwsIG9mIGNvdXJzZSwgdG8gaG9va2luZyBpbnRvIHRoZSBrZXJuZWwgYW5kIG9ic2VydmluZyBpdHMgYmVoYXZpb3VyLgoKTm93LCByZWdhcmRpbmcgc3BlY2lmaWMgdGFyZ2V0cywgSSYjMzk7bSBmb2N1c2luZyBvbiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB3ZSBzZWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNjaGVkdWxlciBhbmQgY2dyb3VwJiMzOTtzIENQVSBpZGxlIHN0YXRlLiBUaGUgY2hhbmdlIGhlcmUgaXMgY2hlY2tpbmcgd2hldGhlciB0aGUgYHNjaGVkX2lkbGVgIGhhcyBjaGFuZ2VkIGJlZm9yZSBpbnZva2luZyB0aGUgQlBGIGNhbGxiYWNrLiBUaGlzIGlzIG91ciBhcmVhIG9mIGludGVyZXN0LCB0aGUgcG90ZW50aWFsIGZvciBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBUaGUgY2dyb3VwIGNwdS5pZGxlIGtub2IgcHJvdmlkZXMgYWNjZXNzIHRvIHRoaXMgZnVuY3Rpb24gc28gd2UgaGF2ZSBhIHRhcmdldGFibGUga25vYiBmb3IgdGhpcy4KClNvLCBpbiBzdW1tYXJ5OgoKKiAgIEkmIzM5O20gY29uZmlkZW50IHRoaXMgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBiZSBmdXp6aW5nIChXb3J0aEZ1enppbmc6IGB0cnVlYCkuCiogICBNeSBtYWluIHRhcmdldCBpcyB0aGUgYHNjeF9ncm91cF9zZXRfaWRsZWAgZnVuY3Rpb24gKEZvY3VzU3ltYm9sczogYFsmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7XWApLgoqICAgVG8gZW5hYmxlIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eSBhbmQgb2JzZXJ2YWJpbGl0eSwgdGhlIGZvbGxvd2luZyBjb25maWdzIGFyZSBzZXQgKEVuYWJsZUNvbmZpZ3M6IGBbJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OywgJiMzNDtDR1JPVVBTJiMzNDssICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywgJiMzNDtCUEZfSklUJiMzNDssICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0O11gKS4KKiAgIE15IHJlYXNvbmluZyBpcyBjb25jaXNlOiBXZSB3YW50IHRvIHRyaWdnZXIgYSBCUEYgY2FsbGJhY2sgcmVsYXRlZCB0byB0aGUgY2dyb3VwIGNwdS5pZGxlIGtub2Igd2hpY2ggd2UgY2FuIHJlYWNoIGJ5IGNoYW5naW5nIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLgoKQWxyaWdodCwgSSYjMzk7bSBoYXBweSB3aXRoIHRoaXMgYXNzZXNzbWVudC4gTGV0JiMzOTtzIGV4ZWN1dGUgYHNldC1yZXN1bHRzYCBhbmQgZ2V0IHRoaXMgcm9sbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjeF9ncm91cF9zZXRfaWRsZSgpIGluIHRoZSBleHRlbnNpYmxlIHNjaGVkdWxlciBjbGFzcyAoc2NoZWRfZXh0KSB0byBhdm9pZCBpbnZva2luZyB0aGUgY2dyb3VwX3NldF9pZGxlIEJQRiBjYWxsYmFjayBpZiB0aGUgdGFzayBncm91cCYjMzk7cyBpZGxlIHN0YXRlIGhhc24mIzM5O3QgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBjZ3JvdXAgQ1BVIGNvbnRyb2xsZXIgaW50ZXJmYWNlIChlLmcuIGNwdS5pZGxlIGtub2IpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDssCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzY3hfZ3JvdXBfc2V0X2lkbGUoKSBpbiB0aGUgZXh0ZW5zaWJsZSBzY2hlZHVsZXIgY2xhc3MgKHNjaGVkX2V4dCkgdG8gYXZvaWQgaW52b2tpbmcgdGhlIGNncm91cF9zZXRfaWRsZSBCUEYgY2FsbGJhY2sgaWYgdGhlIHRhc2sgZ3JvdXAmIzM5O3MgaWRsZSBzdGF0ZSBoYXNuJiMzOTt0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDE6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzY3hfZ3JvdXBfc2V0X2lkbGUoKWAgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHRvIGNoZWNrIGB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlYCBiZWZvcmUgaW52b2tpbmcgdGhlIGBjZ3JvdXBfc2V0X2lkbGVgIHNjaGVkdWxlciBvcGVyYXRpb24gY2FsbGJhY2ssIGF2b2lkaW5nIHJlZHVuZGFudCBjYWxsYmFja3Mgd2hlbiB0aGUgaWRsZSBzdGF0ZSBkb2VzIG5vdCBjaGFuZ2UuXG5cbmB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZWAgaXMgYSBib29sZWFuIG1lbWJlciBvZiBgc3RydWN0IHRhc2tfZ3JvdXBgIHRoYXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBzY3hfdGdfaW5pdCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaGVhcCBvciBzdGFjayBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzdhM2EwZDQwNDI2NWM4NmRiNjMxZjdiMGRjNzgxMTNkNjUwYzUyNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDE6NTU6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuYwppbmRleCA4MDQxYzg3YTM1NjJlLi44YjM2MjUxMDdiNzI0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKQEAgLTQ5MzMsNyAmIzQzOzQ5MzMsOCBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkKIAlwZXJjcHVfZG93bl9yZWFkKCZhbXA7c2N4X2Nncm91cF9vcHNfcndzZW0pOwogCXNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTsKIAotCWlmIChzY3hfY2dyb3VwX2VuYWJsZWQgJmFtcDsmYW1wOyBzY2ggJmFtcDsmYW1wOyBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSkKJiM0MzsJaWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCAmYW1wOyZhbXA7IHNjaCAmYW1wOyZhbXA7IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpICZhbXA7JmFtcDsKJiM0MzsJICAgIHRnLSZndDtzY3guc2NoZWRfaWRsZSAhPSBpZGxlKQogCQlTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpOwogCiAJLyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDAxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBQYXRjaCBBbmFseXNpcyAmYW1wOyBDb250ZXh0KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSwgd2hpY2ggSSYjMzk7bSBwcmV0dHkgc3VyZSB3aWxsIGJlIGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ5MzMuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgc2NoZWR1bGVyJiMzOTtzIGV4dGVuc2lvbnMuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgaW5zcGVjdCB0aGUgY29udGV4dCBhcm91bmQgdGhhdCBsaW5lLiBNeSBwcmVmZXJyZWQgdG9vbHMgZm9yIHRoaXMga2luZCBvZiBxdWljayBpbnZlc3RpZ2F0aW9uIGFyZSBlaXRoZXIgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLiBJJiMzOTtsbCByZWFjaCBmb3Igd2hpY2hldmVyIG9uZSBpcyBmYXN0ZXN0IHRvIGdldCBtZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIHRoZSBzaXR1YXRpb24uIEl0JiMzOTtzIGFib3V0IGVzdGFibGlzaGluZyBhIHNvbGlkIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZ28gYW55IGRlZXBlci4gSSBleHBlY3QgdGhlIGNvbnRleHQgd2lsbCByZXZlYWwgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucywgdmFyaWFibGVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGJ1aWxkIGEgbW9yZSBjb21wcmVoZW5zaXZlIG1lbnRhbCBtb2RlbCBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9leHQvZXh0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5MjA6XHRcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0KSBcdTAwMjZcdTAwMjZcbjQ5MjE6XHRcdCAgICB0Zy1cdTAwM2VzY3gud2VpZ2h0ICE9IHdlaWdodClcbjQ5MjI6XHRcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCwgTlVMTCwgdGdfY2dycCh0ZyksIHdlaWdodCk7XG40OTIzOlx0XG40OTI0Olx0XHR0Zy1cdTAwM2VzY3gud2VpZ2h0ID0gd2VpZ2h0O1xuNDkyNTpcdFxuNDkyNjpcdFx0cGVyY3B1X3VwX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuNDkyNzpcdH1cbjQ5Mjg6XHRcbjQ5Mjk6XHR2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcbjQ5MzA6XHR7XG40OTMxOlx0XHRzdHJ1Y3Qgc2N4X3NjaGVkICpzY2g7XG40OTMyOlx0XG40OTMzOlx0XHRwZXJjcHVfZG93bl9yZWFkKFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcbjQ5MzQ6XHRcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcbjQ5MzU6XHRcbjQ5MzY6XHRcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXHUwMDI2XHUwMDI2XG40OTM3Olx0XHQgICAgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcbjQ5Mzg6XHRcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcbjQ5Mzk6XHRcbjQ5NDA6XHRcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCYjMzk7cyBpZGxlIHN0YXRlICovXG40OTQxOlx0XHR0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XG40OTQyOlx0XG40OTQzOlx0XHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG40OTQ0Olx0fVxuNDk0NTpcdFxuNDk0NjpcdHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLFxuNDk0NzpcdFx0XHRcdCAgICAgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpXG40OTQ4Olx0e1xuNDk0OTpcdFx0c3RydWN0IHNjeF9zY2hlZCAqc2NoO1xuNDk1MDpcdFxuNDk1MTpcdFx0cGVyY3B1X2Rvd25fcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG40OTUyOlx0XHRzY2ggPSBzY3hfdGdfa25vYl9zY2hlZCh0Zyk7XG40OTUzOlx0XG40OTU0Olx0XHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBzY2ggXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCkgXHUwMDI2XHUwMDI2XG40OTU1Olx0XHQgICAgKHRnLVx1MDAzZXNjeC5id19wZXJpb2RfdXMgIT0gcGVyaW9kX3VzIHx8XG40OTU2Olx0XHQgICAgIHRnLVx1MDAzZXNjeC5id19xdW90YV91cyAhPSBxdW90YV91cyB8fFxuNDk1NzpcdFx0ICAgICB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMgIT0gYnVyc3RfdXMpKVxuNDk1ODpcdFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfYmFuZHdpZHRoLCBOVUxMLFxuNDk1OTpcdFx0XHRcdCAgICB0Z19jZ3JwKHRnKSwgcGVyaW9kX3VzLCBxdW90YV91cywgYnVyc3RfdXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0Zy0mZ3Q7c2N4IGFuZCBJZGxlIEdyb3VwIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgdGctJmd0O3NjeGAsIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgYW5kIHRoZSByb2xlIG9mIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGB0Zy0mZ3Q7c2N4YCBhbmQgZm9sbG93IHRoZSB1c2FnZSBvZiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdvb2Qgb2xkLWZhc2hpb25lZCBjb2RlIHNlYXJjaC4gSSYjMzk7bGwgbG9vayBmb3IgaW5zdGFuY2VzIG9mIGBzY2hlZF9pZGxlYCBiZWNhdXNlIHRoYXQmIzM5O3Mgb2Z0ZW4gdGllZCB0byBpZGxlIGdyb3VwIG1hbmFnZW1lbnQuIEFsdGVybmF0aXZlbHksIEkmIzM5O2xsIHNlYXJjaCBmb3IgYHNjeF9ncm91cF9zZXRfaWRsZWAgZGlyZWN0bHksIGFzIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBtb3JlIHRhcmdldGVkIHZpZXcgb2YgaXRzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGlkbGUgZ3JvdXBzIGFyZSBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3hfZ3JvdXBfc2V0X2lkbGV8c2NoZWRfaWRsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3BzdG9yZS1ibGsucnN0PTEyND1yZWxhdGVkIGhhbmdzLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdXNhZ2U6OlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3QtMTM1LSBDUFU6MCB0czo1OTE0NjgwIGMwMzllOWEwICBjMDM5ZWNmMCAgY3B1aWRsZV9lbnRlcl9mcmVlemUgXHUwMDNjLSBjcHVpZGxlX2VudGVyX3N0YXRlJiM0MzsweDMwNC8weDMxNFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJzdDoxMzY6IENQVTowIHRzOjU5MTQ2ODEgYzAwNjM4NzAgIGMwMzllYTMwICBzY2hlZF9pZGxlX3NldF9zdGF0ZSBcdTAwM2MtIGNwdWlkbGVfZW50ZXJfc3RhdGUmIzQzOzB4NDQvMHgzMTRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3QtMTM3LSBDUFU6MSB0czo1OTE2NzIwIGMwMTYwZjU5ICBjMDE1ZWUwNCAga2VybmZzX3VubWFwX2Jpbl9maWxlIFx1MDAzYy0gX19rZXJuZnNfcmVtb3ZlJiM0MzsweDE0MC8weDIwNFxuLS1cbk5leHQvbWVyZ2UubG9nPTQwNDg9TWVyZ2UgbWFkZSBieSB0aGUgJiMzOTtvcnQmIzM5OyBzdHJhdGVneS5cbi0tXG5OZXh0L21lcmdlLmxvZy00MDUwLSAxIGZpbGUgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygmIzQzOyksIDg1IGRlbGV0aW9ucygtKVxuTmV4dC9tZXJnZS5sb2c6NDA1MTpNZXJnaW5nIHNjaGVkLWV4dC9mb3ItbmV4dCAoMTRlYmE2ZDk4Y2FiZSBzY2hlZF9leHQ6IFJlbmFtZSB0Zy1cdTAwM2VzY3guaWRsZSB0byB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSlcbk5leHQvbWVyZ2UubG9nLTQwNTItJCBnaXQgbWVyZ2UgLW0gTWVyZ2UgYnJhbmNoICYjMzk7Zm9yLW5leHQmIzM5OyBvZiBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90ai9zY2hlZF9leHQuZ2l0IHNjaGVkLWV4dC9mb3ItbmV4dFxuLS1cbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmM9MjE3PW5vaW5zdHIgaW50IGNwdWlkbGVfZW50ZXJfc3RhdGUoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYy0yNDUtXHQvKiBUYWtlIG5vdGUgb2YgdGhlIHBsYW5uZWQgaWRsZSBzdGF0ZS4gKi9cbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmM6MjQ2Olx0c2NoZWRfaWRsZV9zZXRfc3RhdGUodGFyZ2V0X3N0YXRlKTtcbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMtMjQ3LVxuLS1cbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMtMjg1LVx0LyogVGhlIGNwdSBpcyBubyBsb25nZXIgaWRsZSBvciBhYm91dCB0byBlbnRlciBpZGxlLiAqL1xuZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYzoyODY6XHRzY2hlZF9pZGxlX3NldF9zdGF0ZShOVUxMKTtcbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMtMjg3LVxuLS1cbmluY2x1ZGUvbGludXgvY3B1aWRsZS5oPTI2NT1zdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRsZV91c2VfZGVlcGVzdF9zdGF0ZSh1NjQgbGF0ZW5jeV9saW1pdF9ucylcbi0tXG5pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaC0yNzAtLyoga2VybmVsL3NjaGVkL2lkbGUuYyAqL1xuaW5jbHVkZS9saW51eC9jcHVpZGxlLmg6MjcxOmV4dGVybiB2b2lkIHNjaGVkX2lkbGVfc2V0X3N0YXRlKHN0cnVjdCBjcHVpZGxlX3N0YXRlICppZGxlX3N0YXRlKTtcbmluY2x1ZGUvbGludXgvY3B1aWRsZS5oLTI3Mi1leHRlcm4gdm9pZCBkZWZhdWx0X2lkbGVfY2FsbCh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oPTMwND1zdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgtMzI1LVx0dTY0XHRcdFx0YndfYnVyc3RfdXM7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oOjMyNjpcdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaC0zMjctI2VuZGlmXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz02NzY2PXN0YXRpYyBpbmxpbmUgdm9pZCBwcm94eV9zZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjc4MC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njc4MTpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJveHlfcmVzY2hlZF9pZGxlKHN0cnVjdCBycSAqcnEpXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY3ODIte1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9Njc5MD1zdGF0aWMgdm9pZCBwcm94eV9kZWFjdGl2YXRlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqZG9ub3IpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02Nzk3LVx0ICogQmVjYXVzZSB3ZSBnb3QgZG9ub3IgZnJvbSBwaWNrX25leHRfdGFzaygpLCBpdCBpcyAqY3J1Y2lhbCpcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njc5ODpcdCAqIHRoYXQgd2UgY2FsbCBwcm94eV9yZXNjaGVkX2lkbGUoKSBiZWZvcmUgd2UgZGVhY3RpdmF0ZSBpdC5cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjc5OS1cdCAqIEFzIG9uY2Ugd2UgZGVhY3RpdmF0ZSBkb25vciwgZG9ub3ItXHUwMDNlb25fcnEgaXMgc2V0IHRvIHplcm8sXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02ODA0LVx0ICovXG5rZXJuZWwvc2NoZWQvY29yZS5jOjY4MDU6XHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02ODA2LVx0YmxvY2tfdGFzayhycSwgZG9ub3IsIHN0YXRlKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTY4NDk9c3RhdGljIHZvaWQgcHJveHlfbWlncmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy02ODY0LVx0ICpcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njg2NTpcdCAqIFNvIGNhbGwgcHJveHlfcmVzY2hlZF9pZGxlKCkgdG8gZHJvcCB0aGUgcnEtXHUwMDNlZG9ub3IgcmVmZXJlbmNlc1xua2VybmVsL3NjaGVkL2NvcmUuYy02ODY2LVx0ICogYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGxvY2suXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NjctXHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njg2ODpcdHByb3h5X3Jlc2NoZWRfaWRsZShycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NjktXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz02OTA3PWZpbmRfcHJveHlfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRvbm9yLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk2Ny1cdFx0XHRpZiAoY3Vycl9pbl9jaGFpbilcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njk2ODpcdFx0XHRcdHJldHVybiBwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02OTY5LVx0XHRcdF9fY2xlYXJfdGFza19ibG9ja2VkX29uKHAsIE5VTEwpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk3OS1cdFx0XHRpZiAoY3Vycl9pbl9jaGFpbilcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njk4MDpcdFx0XHRcdHJldHVybiBwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYy02OTgxLVx0XHRcdGdvdG8gbWlncmF0ZV90YXNrO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk5Mi1cdFx0XHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njk5MzpcdFx0XHRyZXR1cm4gcHJveHlfcmVzY2hlZF9pZGxlKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk5NC1cdFx0fVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzAyOS1cdFx0XHQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzAzMDpcdFx0XHRyZXR1cm4gcHJveHlfcmVzY2hlZF9pZGxlKHJxKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzAzMS1cdFx0fVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTAyNTk9c3RhdGljIGludCBjcHVfaWRsZV93cml0ZV9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY1LVx0aWYgKCFyZXQpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjY2Olx0XHRzY3hfZ3JvdXBfc2V0X2lkbGUoY3NzX3RnKGNzcyksIGlkbGUpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2Ny1cdHJldHVybiByZXQ7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NjgyPXZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY4Ni1cdHRnLVx1MDAzZXNjeC5id19xdW90YV91cyA9IFJVTlRJTUVfSU5GO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0Njg3Olx0dGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgPSBmYWxzZTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY4OC19XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NzQ0PWludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NjktXHRcdFx0XHQgIC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc3MDpcdFx0XHRcdCAgLnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSB9O1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzcxLVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMz12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI4LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTI5OnZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTMwLXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MzYtXHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBzY2ggXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpIFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTM3Olx0ICAgIHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGUpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MzgtXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTQwLVx0LyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk0MTpcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gaWRsZTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk0Mi1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUxNzE9c3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE5MS1cdFx0XHRcdC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5MjpcdFx0XHRcdC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxOTMtXHRcdFx0fTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgxPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTMtc3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTI1ND1zdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNjMtXHQvKiB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgY29uZmlndXJlZCBTQ0hFRF9JRExFIHZpYSBjcHUuaWRsZSAqL1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjI2NDpcdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI2NS19O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTM0OT1zdGF0aWMgczMyIHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzYzLVx0XHRcdC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTM2NDpcdFx0XHQuc2NoZWRfaWRsZSA9IHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlLFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzY1LVx0XHR9O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTQzOD1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjctXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxNDY4Olx0XHRcdC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUsXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjktXHRcdH07XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz03ODczPXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja191cGRhdGVfb3ZlcnV0aWxpemVkX3N0YXR1cyhzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg4NC0vKiBSdW5xdWV1ZSBvbmx5IGhhcyBTQ0hFRF9JRExFIHRhc2tzIGVucXVldWVkICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjc4ODU6c3RhdGljIGludCBzY2hlZF9pZGxlX3JxKHN0cnVjdCBycSAqcnEpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4ODYte1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg5MC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5MTpzdGF0aWMgaW50IGNob29zZV9zY2hlZF9pZGxlX3JxKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg5Mi17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjc4OTM6XHRyZXR1cm4gc2NoZWRfaWRsZV9ycShycSkgXHUwMDI2XHUwMDI2ICF0YXNrX2hhc19pZGxlX3BvbGljeShwKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg5NC19XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz03ODk2PXN0YXRpYyBpbnQgY2hvb3NlX2lkbGVfY3B1KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4OTgtXHRyZXR1cm4gYXZhaWxhYmxlX2lkbGVfY3B1KGNwdSkgfHxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5OTpcdCAgICAgICBjaG9vc2Vfc2NoZWRfaWRsZV9ycShjcHVfcnEoY3B1KSwgcCk7XG5rZXJuZWwvc2NoZWQvZmFpci5jLTc5MDAtfVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODExND1zdGF0aWMgYm9vbCBfX2RlcXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxMTctXHRzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSBcdTAwMjZycS1cdTAwM2VjZnM7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjgxMTg6XHRib29sIHdhc19zY2hlZF9pZGxlID0gc2NoZWRfaWRsZV9ycShycSk7XG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxMTktXHRib29sIHRhc2tfc2xlZXAgPSBmbGFncyBcdTAwMjYgREVRVUVVRV9TTEVFUDtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxNTktXHQvKiBiYWxhbmNlIGVhcmx5IHRvIHB1bGwgaGlnaCBwcmlvcml0eSB0YXNrcyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzo4MTYwOlx0aWYgKHVubGlrZWx5KCF3YXNfc2NoZWRfaWRsZSBcdTAwMjZcdTAwMjYgc2NoZWRfaWRsZV9ycShycSkpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy04MTYxLVx0XHRycS1cdTAwM2VuZXh0X2JhbGFuY2UgPSBqaWZmaWVzO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODQ1MD1zY2hlZF9iYWxhbmNlX2ZpbmRfZHN0X2dyb3VwX2NwdShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB0aGlzX2NwdSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTg0NjktXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg0NzA6XHRcdGlmIChjaG9vc2Vfc2NoZWRfaWRsZV9ycShycSwgcCkpXG5rZXJuZWwvc2NoZWQvZmFpci5jLTg0NzEtXHRcdFx0cmV0dXJuIGk7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz04NjI1PXN0YXRpYyBpbnQgc2VsZWN0X2lkbGVfY29yZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjb3JlLCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICppZGxlX2NwdSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTg2MzMtXHRcdFx0aWYgKCppZGxlX2NwdSA9PSAtMSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzo4NjM0Olx0XHRcdFx0aWYgKGNob29zZV9zY2hlZF9pZGxlX3JxKGNwdV9ycShjcHUpLCBwKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODYzNS1cdFx0XHRcdCAgICBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1cykpIHtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEzOTI2PXN0YXRpYyB2b2lkIHNjaGVkX2JhbGFuY2VfZG9tYWlucyhzdHJ1Y3QgcnEgKnJxLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEzOTI5LVx0aW50IGNwdSA9IHJxLVx1MDAzZWNwdTtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTM5MzA6XHRpbnQgYnVzeSA9IGlkbGUgIT0gQ1BVX0lETEUgXHUwMDI2XHUwMDI2ICFzY2hlZF9pZGxlX3JxKHJxKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5MzEtXHR1bnNpZ25lZCBsb25nIGludGVydmFsO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NjctXHRcdFx0XHRpZGxlID0gaWRsZV9jcHUoY3B1KTtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTM5Njg6XHRcdFx0XHRidXN5ID0gIWlkbGUgXHUwMDI2XHUwMDI2ICFzY2hlZF9pZGxlX3JxKHJxKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NjktXHRcdFx0fVxuLS1cbmtlcm5lbC9zY2hlZC9pZGxlLmM9MTY9ZXh0ZXJuIGNoYXIgX19jcHVpZGxlX3RleHRfc3RhcnRbXSwgX19jcHVpZGxlX3RleHRfZW5kW107XG4tLVxua2VybmVsL3NjaGVkL2lkbGUuYy0xOC0vKipcbmtlcm5lbC9zY2hlZC9pZGxlLmM6MTk6ICogc2NoZWRfaWRsZV9zZXRfc3RhdGUgLSBSZWNvcmQgaWRsZSBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgQ1BVLlxua2VybmVsL3NjaGVkL2lkbGUuYy0yMC0gKiBAaWRsZV9zdGF0ZTogU3RhdGUgdG8gcmVjb3JkLlxua2VybmVsL3NjaGVkL2lkbGUuYy0yMS0gKi9cbmtlcm5lbC9zY2hlZC9pZGxlLmM6MjI6dm9pZCBzY2hlZF9pZGxlX3NldF9zdGF0ZShzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqaWRsZV9zdGF0ZSlcbmtlcm5lbC9zY2hlZC9pZGxlLmMtMjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjMyCgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDgxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTY2hlZHVsZXIgRXh0ZW5zaW9uIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYHNjeF9ncm91cF9zZXRfaWRsZWAuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFuIG9wdGltaXphdGlvbi4gQ3VycmVudGx5LCB0aGUgY29kZSwgd2l0aGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCwgY2FsbHMgdGhlIGBjZ3JvdXBfc2V0X2lkbGVgIG9wZXJhdGlvbiwgYnV0IG5vdywgaXQgaGFzIGFkZGVkIGFuIGFkZGl0aW9uYWwgY2hlY2ssIGVuc3VyaW5nIHRoZSBjYWxsYmFjayBpc24mIzM5O3QgY2FsbGVkIGlmIHRoZSBpZGxlIHN0YXRlIGhhc24mIzM5O3QgYWN0dWFsbHkgY2hhbmdlZC4gU3BlY2lmaWNhbGx5LCBiZWZvcmUgdGhlIGNoYW5nZSwgaXQgZGlkIHRoaXM6CgpgYGBjCglpZiAoc2N4X2Nncm91cF9lbmFibGVkICZhbXA7JmFtcDsgc2NoICZhbXA7JmFtcDsgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkpCgkJU0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTsKYGBgCgphbmQgYWZ0ZXIgdGhlIGNoYW5nZSwgdGhlIGFkZGl0aW9uIG9mIHRoZSBjaGVjayBub3cgaXM6CgpgYGBjCglpZiAoc2N4X2Nncm91cF9lbmFibGVkICZhbXA7JmFtcDsgc2NoICZhbXA7JmFtcDsgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgJmFtcDsmYW1wOwoJICAgIHRnLSZndDtzY3guc2NoZWRfaWRsZSAhPSBpZGxlKQoJCVNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7CmBgYAoKVGhpcyBwcmV2ZW50cyB0aGUgY2FsbGJhY2sgZnJvbSBiZWluZyBjYWxsZWQgaWYgdGhlIGlkbGUgc3RhdGUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIGB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGVgLiBJIGNhbiBzZWUgdGhlIGludGVudDogcmVkdWNlIHVubmVjZXNzYXJ5IG92ZXJoZWFkLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UsIGF2b2lkaW5nIHJlZHVuZGFudCB3b3JrLCBhbmQgaW1wcm92aW5nIHBlcmZvcm1hbmNlIHNsaWdodGx5LgoKTm93LCBhIGtleSBjb25jZXJuIGluIHRoZXNlIHR5cGVzIG9mIGNoYW5nZXMgaXMgbWVtb3J5IHNhZmV0eSBhbmQgcG9zc2libGUgaW5mb3JtYXRpb24gbGVha3MuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIENoZWNraW5nIGluIGBzY3hfdGdfaW5pdGAsIGB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYDoKCmBgYGMKdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpCnsKLi4uCgl0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7Cgl0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgPSBmYWxzZTsKfQpgYGAKClRoYXQmIzM5O3MgZ29vZC4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgb24gdGFzayBncm91cCBpbml0aWFsaXphdGlvbi4KClNvLCBsZXQmIzM5O3MgYW5hbHl6ZSB0aGUgcG90ZW50aWFsIHJpc2tzOgoKKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/KiogTm8uIGB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCiogICAqKk5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBkYXRhIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZT8qKiBOb3BlLiBUaGUgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGRhdGEgZXhwb3NlZCB0byB1c2VyIHNwYWNlLgoqICAgKipVbmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgcGFkZGluZyBzZW50IGFjcm9zcyB0aGUgdXNlci9rZXJuZWwgYm91bmRhcnk/KiogTm90IGF0IGFsbC4gTm8gc3VjaCB0aGluZyBpcyBoYXBwZW5pbmcuCiogICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogTm8sIGJlY2F1c2UgYHRnLSZndDtzY3guc2NoZWRfaWRsZWAgaXMgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIHRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBvcHRpbWl6YXRpb24sIG1pbmltaXppbmcgdGhlIG5lZWQgdG8gaW52b2tlIHRoZSBjYWxsYmFjayB3aGVuIGl0IGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgY2FsbGVkLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIGxldCYjMzk7cyB0cmlwbGUtY2hlY2sgYWdhaW5zdCBteSBjcml0ZXJpYSBmb3IgYEtNU0FOYDoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U/KiogTm8uCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBObywgYHRnLSZndDtzY3guc2NoZWRfaWRsZWAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHNjeF90Z19pbml0KClgLgozLiAgKipBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyoqIE5vLgo0LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNhbiBsZWFkIHRvIGFjY2VzcyBvZiB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLgoKQWxyaWdodC4gTm8gS01TQU4gbmVlZGVkIGhlcmUuIFRoaXMgYm9pbHMgZG93biB0byBhIGxvZ2ljIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLiBJJiMzOTtkIGFzc2VzcyB0aGF0IHN0YW5kYXJkIHNhbml0aXplcnMsIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAsIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudC4gS01TQU4gaXMgb3ZlcmtpbGwgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UuCk5vdywgcmVhZHkgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2N4X2dyb3VwX3NldF9pZGxlKClgIGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCB0byBjaGVjayBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAgYmVmb3JlIGludm9raW5nIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBzY2hlZHVsZXIgb3BlcmF0aW9uIGNhbGxiYWNrLCBhdm9pZGluZyByZWR1bmRhbnQgY2FsbGJhY2tzIHdoZW4gdGhlIGlkbGUgc3RhdGUgZG9lcyBub3QgY2hhbmdlLlxuXG5gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGEgYm9vbGVhbiBtZW1iZXIgb2YgYHN0cnVjdCB0YXNrX2dyb3VwYCB0aGF0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgc2N4X3RnX2luaXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGhlYXAgb3Igc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2N4X2dyb3VwX3NldF9pZGxlKClgIGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCB0byBjaGVjayBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAgYmVmb3JlIGludm9raW5nIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBzY2hlZHVsZXIgb3BlcmF0aW9uIGNhbGxiYWNrLCBhdm9pZGluZyByZWR1bmRhbnQgY2FsbGJhY2tzIHdoZW4gdGhlIGlkbGUgc3RhdGUgZG9lcyBub3QgY2hhbmdlLlxuXG5gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGEgYm9vbGVhbiBtZW1iZXIgb2YgYHN0cnVjdCB0YXNrX2dyb3VwYCB0aGF0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgc2N4X3RnX2luaXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGhlYXAgb3Igc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU1OjQ0LjIzMzYyODY3M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTQwMjc3NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICAgIFwiQ0dST1VQX1NDSEVEXCIsXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzY3hfZ3JvdXBfc2V0X2lkbGUoKWAgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHRvIGNoZWNrIGB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAgYmVmb3JlIGludm9raW5nIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBzY2hlZHVsZXIgb3BlcmF0aW9uIGNhbGxiYWNrLCBhdm9pZGluZyByZWR1bmRhbnQgY2FsbGJhY2tzIHdoZW4gdGhlIGlkbGUgc3RhdGUgZG9lcyBub3QgY2hhbmdlLlxcblxcbmB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGEgYm9vbGVhbiBtZW1iZXIgb2YgYHN0cnVjdCB0YXNrX2dyb3VwYCB0aGF0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgc2N4X3RnX2luaXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGhlYXAgb3Igc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2N4X2dyb3VwX3NldF9pZGxlKCkgaW4gdGhlIGV4dGVuc2libGUgc2NoZWR1bGVyIGNsYXNzIChzY2hlZF9leHQpIHRvIGF2b2lkIGludm9raW5nIHRoZSBjZ3JvdXBfc2V0X2lkbGUgQlBGIGNhbGxiYWNrIGlmIHRoZSB0YXNrIGdyb3VwJ3MgaWRsZSBzdGF0ZSBoYXNuJ3QgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBjZ3JvdXAgQ1BVIGNvbnRyb2xsZXIgaW50ZXJmYWNlIChlLmcuIGNwdS5pZGxlIGtub2IpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NTo0NC4yMzM2MzM0NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDQ1OTYwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3N2EzYTBkNDA0MjY1Yzg2ZGI2MzFmN2IwZGM3ODExM2Q2NTBjNTI1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDE6NTU6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcXG5pbmRleCA4MDQxYzg3YTM1NjJlLi44YjM2MjUxMDdiNzI0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXFxuQEAgLTQ5MzMsNyArNDkzMyw4IEBAIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxcbiBcXHRwZXJjcHVfZG93bl9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuIFxcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcXG4gXFxuLVxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpKVxcbitcXHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IHNjaCBcXHUwMDI2XFx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGUpXFxuIFxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XFxuIFxcbiBcXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU1OjQ1LjY3ODk3NTI0OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTc1NjI3MjUxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNjeF9ncm91cF9zZXRfaWRsZSgpIGluIHRoZSBleHRlbnNpYmxlIHNjaGVkdWxlciBjbGFzcyAoc2NoZWRfZXh0KSB0byBhdm9pZCBpbnZva2luZyB0aGUgY2dyb3VwX3NldF9pZGxlIEJQRiBjYWxsYmFjayBpZiB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzdhM2EwZDQwNDI2NWM4NmRiNjMxZjdiMGRjNzgxMTNkNjUwYzUyNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDE6NTU6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuaW5kZXggODA0MWM4N2EzNTYyZS4uOGIzNjI1MTA3YjcyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbkBAIC00OTMzLDcgKzQ5MzMsOCBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcbiBcdHBlcmNwdV9kb3duX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuIFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xuIFxuLVx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSlcbitcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcbiBcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU1OjQ1LjY3ODk3NjUyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMjEzMTgwNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gTGV0J3MgZGlnIGluLiBJIHNlZSBhIGNvbW1pdCB3aXRoIGEgYGRpZmZgIHByZXNlbnRlZCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIFRoaXMgaXMgaW4gdGhlIHNjaGVkdWxlciBleHRlbnNpb24gY29kZSwgd2hpY2ggY291bGQgZGVmaW5pdGVseSBiZSBpbnRlcmVzdGluZy5cblxuVGhlIGRpZmYgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMgYXJvdW5kIGxpbmUgNDkzMywgaXQgbG9va3MgbGlrZSBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBoYXMgYmVlbiBtb2RpZmllZCB3aXRoaW4gdGhlIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYSBjaGVjayBmb3IgYHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGVgIGhhcyBiZWVuIGFkZGVkLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIG9wdGltaXppbmcgYSBjaGVjaywgc28gbWF5YmUgd2UgY2FuIHJ1bGUgaXQgb3V0IGltbWVkaWF0ZWx5LCBidXQgaXQncyBpbXBvcnRhbnQgdG8gbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSwgSSdtIGdvaW5nIHRvIG5lZWQgbW9yZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdXNlIGVpdGhlciBgZ2l0IGdyZXBgIG9yIGp1c3QgcHVsbCB1cCB0aGUgZmlsZSBhbmQgcmVhZCBhcm91bmQgdGhhdCBsaW5lLCBzZWUgaG93IHRoaXMgYHNjeC5zY2hlZF9pZGxlYCBmaWVsZCBpcyBiZWluZyB1c2VkIGFuZCBtb2RpZmllZCwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZC4gS25vd2luZyB3aGF0IGBTQ1hfSEFTX09QYCBhbmQgYFNDWF9DQUxMX09QYCBhcmUgd291bGQgYmUgaGVscGZ1bCB0b28uIEJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJIGNhbiBtYWtlIGEgbW9yZSBpbmZvcm1lZCBhc3Nlc3NtZW50IGFib3V0IHdoZXRoZXIgdGhpcyBjb25kaXRpb25hbCBjaGFuZ2UgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIG5ldyBjb2RlIHBhdGhzIG9yIGFsdGVyIGV4aXN0aW5nIGJlaGF2aW9yIGluIGEgd2F5IHRoYXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gYSBmdXp6ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NTo1OC44OTIxNTk4MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3NjaGVkL2V4dC9leHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0OTIwOlxcdFxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCkgXFx1MDAyNlxcdTAwMjZcXG40OTIxOlxcdFxcdCAgICB0Zy1cXHUwMDNlc2N4LndlaWdodCAhPSB3ZWlnaHQpXFxuNDkyMjpcXHRcXHRcXHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0LCBOVUxMLCB0Z19jZ3JwKHRnKSwgd2VpZ2h0KTtcXG40OTIzOlxcdFxcbjQ5MjQ6XFx0XFx0dGctXFx1MDAzZXNjeC53ZWlnaHQgPSB3ZWlnaHQ7XFxuNDkyNTpcXHRcXG40OTI2OlxcdFxcdHBlcmNwdV91cF9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuNDkyNzpcXHR9XFxuNDkyODpcXHRcXG40OTI5OlxcdHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxcbjQ5MzA6XFx0e1xcbjQ5MzE6XFx0XFx0c3RydWN0IHNjeF9zY2hlZCAqc2NoO1xcbjQ5MzI6XFx0XFxuNDkzMzpcXHRcXHRwZXJjcHVfZG93bl9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuNDkzNDpcXHRcXHRzY2ggPSBzY3hfdGdfa25vYl9zY2hlZCh0Zyk7XFxuNDkzNTpcXHRcXG40OTM2OlxcdFxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpIFxcdTAwMjZcXHUwMDI2XFxuNDkzNzpcXHRcXHQgICAgdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGUpXFxuNDkzODpcXHRcXHRcXHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpO1xcbjQ5Mzk6XFx0XFxuNDk0MDpcXHRcXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXFxuNDk0MTpcXHRcXHR0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgPSBpZGxlO1xcbjQ5NDI6XFx0XFxuNDk0MzpcXHRcXHRwZXJjcHVfdXBfcmVhZChcXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xcbjQ5NDQ6XFx0fVxcbjQ5NDU6XFx0XFxuNDk0NjpcXHR2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZyxcXG40OTQ3OlxcdFxcdFxcdFxcdCAgICAgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpXFxuNDk0ODpcXHR7XFxuNDk0OTpcXHRcXHRzdHJ1Y3Qgc2N4X3NjaGVkICpzY2g7XFxuNDk1MDpcXHRcXG40OTUxOlxcdFxcdHBlcmNwdV9kb3duX3JlYWQoXFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcXG40OTUyOlxcdFxcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcXG40OTUzOlxcdFxcbjQ5NTQ6XFx0XFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBzY2ggXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfYmFuZHdpZHRoKSBcXHUwMDI2XFx1MDAyNlxcbjQ5NTU6XFx0XFx0ICAgICh0Zy1cXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyAhPSBwZXJpb2RfdXMgfHxcXG40OTU2OlxcdFxcdCAgICAgdGctXFx1MDAzZXNjeC5id19xdW90YV91cyAhPSBxdW90YV91cyB8fFxcbjQ5NTc6XFx0XFx0ICAgICB0Zy1cXHUwMDNlc2N4LmJ3X2J1cnN0X3VzICE9IGJ1cnN0X3VzKSlcXG40OTU4OlxcdFxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9iYW5kd2lkdGgsIE5VTEwsXFxuNDk1OTpcXHRcXHRcXHRcXHQgICAgdGdfY2dycCh0ZyksIHBlcmlvZF91cywgcXVvdGFfdXMsIGJ1cnN0X3VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTU6NTguODkyNTg5NjM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE3MTA1NzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgc2N4X2dyb3VwX3NldF9pZGxlYCBVc2FnZSBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIHN5c3RlbS4gU28sIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QgaXMgdG8gcmVhY2ggZm9yIGBncmVwYC4gSSdsbCBydW4gYSBxdWljayBzZWFyY2ggZm9yIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lLCBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxpc3Qgb2YgY2FsbCBzaXRlcyB0byB3b3JrIGZyb20uIFRoZW4gSSBjYW4gYW5hbHl6ZSB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBlbmFibGUgYm90aCBgc2NoZWRfZXh0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAuIFRoYXQncyB3aGVyZSBJIGNhbiB1c2UgbXkgZXhwZXJ0IGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBJIGNhbiB1c2UgdGhlIHNlYXJjaCByZXN1bHRzIGFzIGEgYmFzZSB0byBzdGFydCBmcm9tLiBXaXRoIGBncmVwYCBJIGNhbiBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvZGUgZmxvdy4gV2l0aCB0aGUgY2FsbCBzaXRlcywgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhc3N1bXB0aW9ucyBpbiB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgY2FsbCBzaXRlcyB3aXRoIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucywgbGlrZWx5IGJ5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgd2F5IEkgY2FuIGRldGVybWluZSB0aGUgcHJlY2lzZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhpcyBraW5kIG9mIHN5c3RlbWF0aWMgYW5hbHlzaXMgaXMgdGhlIGtleSB0byBxdWlja2x5IHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjowMi4wNjM2NTA5OTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NTU2Nzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuYz0xMDI1OT1zdGF0aWMgaW50IGNwdV9pZGxlX3dyaXRlX3M2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2NS1cXHRpZiAoIXJldClcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjY2OlxcdFxcdHNjeF9ncm91cF9zZXRfaWRsZShjc3NfdGcoY3NzKSwgaWRsZSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2Ny1cXHRyZXR1cm4gcmV0O1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTEzPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkyOC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5Mjk6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTMwLXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODE9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODMtdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjkyOnN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05My1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cykge31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MDMuNjU5MjI2ODg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2MTk0NTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBRdWVyeSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdmVyaWZ5IGEgZmV3IGtleSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIEtjb25maWcgZmlsZXMgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBzY2hlZHVsZXIgZXh0ZW5zaW9ucyBJJ20gdGFyZ2V0aW5nLiBJJ20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gZmVhdHVyZXMgcmVsYXRlZCB0byBleHRlbmRpbmcgdGhlIHNjaGVkdWxpbmcgY2xhc3Nlcywgc28gSSdsbCBiZSBsb29raW5nIGZvciBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgcmVsYXRlZCBkZXBlbmRlbmNpZXMuIFRoZW4gdGhlcmUncyB0aGUgYENHUk9VUF9TQ0hFRGAgb3B0aW9uLCBhcyBJIHdpbGwgYmUgbmVlZGluZyB0byBlbmFibGUgc29tZSBtb3JlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHkgdGhlcmUgdG9vLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBlaXRoZXIgZW5hYmxlZCBvciBhdCBsZWFzdCBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQgaWYgSSB3YW50IG15IHdvcmsgdG8gYmUgdmFsaWQuIEJldHRlciB0byBjaGVjayBub3cgYW5kIHNhdmUgc29tZSBoZWFkYWNoZXMgbGF0ZXIuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDkyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MDUuODIxMTc1NDg0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTY4NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTU5LVxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo2MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy02MS0jIGluY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yNjAtXFxua2VybmVsL3NjaGVkL2NvcmUuYzoyNjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI2Mi1cXHRpZiAocGEgPT0gTUFYX1JUX1BSSU8gKyBNQVhfTklDRSArIDEpXFx0LyogZXh0ICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ1NzM9c3RhdGljIHZvaWQgX19zY2hlZF9mb3JrKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEwLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDYxMTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYxMi1cXHRpbml0X3NjeF9lbnRpdHkoXFx1MDAyNnAtXFx1MDAzZXNjeCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ4MTM9aW50IHNjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ4NjAtXFx0XFx0cC1cXHUwMDNlc2NoZWRfY2xhc3MgPSBcXHUwMDI2cnRfc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo0ODYxOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2NvcmUuYy00ODYyLVxcdH0gZWxzZSBpZiAodGFza19zaG91bGRfc2N4KHAtXFx1MDAzZXBvbGljeSkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzYwOD1jb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKl9fc2V0c2NoZWR1bGVyX2NsYXNzKGludCBwb2xpY3ksIGludCBwcmlvKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03NjE1LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzYxNjojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzYxNy1cXHRpZiAodGFza19zaG91bGRfc2N4KHBvbGljeSkpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg4Njg9aW50IHNjaGVkX2NwdV9keWluZyh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04ODgyLVxcdGRsX3NlcnZlcl9zdG9wKFxcdTAwMjZycS1cXHUwMDNlZmFpcl9zZXJ2ZXIpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODg4MzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODg4NC1cXHRkbF9zZXJ2ZXJfc3RvcChcXHUwMDI2cnEtXFx1MDAzZWV4dF9zZXJ2ZXIpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2MC1cXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzLCBcXHUwMDI2aWRsZV9zY2hlZF9jbGFzcykpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk2MTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2Mi1cXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzLCBcXHUwMDI2ZXh0X3NjaGVkX2NsYXNzKSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwNzgtXFx0XFx0ZmFpcl9zZXJ2ZXJfaW5pdChycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MDc5OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MDgwLVxcdFxcdGV4dF9zZXJ2ZXJfaW5pdChycSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xMDg9c3RhdGljIGlubGluZSB1OCBkbF9nZXRfdHlwZShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTExMy1cXHRcXHRyZXR1cm4gRExfU0VSVkVSX0ZBSVI7XFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM6MTE0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMTE1LVxcdGlmIChkbF9zZSA9PSBcXHUwMDI2cnEtXFx1MDAzZWV4dF9zZXJ2ZXIpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xODQyPXZvaWQgc2NoZWRfaW5pdF9kbF9zZXJ2ZXJzKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY2LVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjE4Njc6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY4LVxcdFxcdGRsX3NlID0gXFx1MDAyNnJxLVxcdTAwM2VleHRfc2VydmVyO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ1MT1zdGF0aWMgdm9pZCBkbF9zZXJ2ZXJfYWRkX2J3KHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDU4LVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NTk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDYwLVxcdGRsX3NlID0gXFx1MDAyNmNwdV9ycShjcHUpLVxcdTAwM2VleHRfc2VydmVyO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ2Nj1zdGF0aWMgdTY0IGRsX3NlcnZlcl9yZWFkX2J3KGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDczLVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NzQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDc1LVxcdGlmIChjcHVfcnEoY3B1KS1cXHUwMDNlZXh0X3NlcnZlci5kbF9zZXJ2ZXIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTQ5ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZGVidWdmc19zY2hlZDtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy00OTUtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6NDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNDk3LXN0YXRpYyBzc2l6ZV90XFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYz01NjE9c3RhdGljIHZvaWQgZGVidWdmc19leHRfc2VydmVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTU4MC19XFxua2VybmVsL3NjaGVkL2RlYnVnLmM6NTgxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNTgyLVxcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTc2OS1cXHRkZWJ1Z2ZzX2ZhaXJfc2VydmVyX2luaXQoKTtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NzEtXFx0ZGVidWdmc19leHRfc2VydmVyX2luaXQoKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTE0MDY9dm9pZCBwcm9jX3NjaGVkX3Nob3dfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTE1MDUtXFx0fVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjE1MDY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0xNTA3LVxcdF9fUFMoXFxcImV4dC5lbmFibGVkXFxcIiwgdGFza19vbl9zY3gocCkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz02NDE9dm9pZCBzY3hfc2V0X3Rhc2tfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgc3RhdGUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTY5Ny0gKiBzY3hfdGFza3MgY2FuIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YgYWx3YXlzIHVzaW5nIGNncm91cCBpdGVyYXRpb24gaWZcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjY5ODogKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUIGRlcGVuZHMgb24gQ09ORklHX0NHUk9VUFMuXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02OTktICpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOC0gKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTEwLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD0zOT1ib29sIHNjeF9wcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmIsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTQyLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NDM6I2Vsc2VcXHQvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC00NC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NTc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2NoZWRfZXh0X2NsYXNzKHZvaWQpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC01OC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjU5OiNlbmRpZlxcdC8qIENPTkZJR19TQ0hFRF9DTEFTU19FWFQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYwLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYyLXZvaWQgX19zY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvaWRsZS5jPTU1Nz1zdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9pZGxlKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU2OS1cXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXFx1MDAyNnJxLVxcdTAwM2VmYWlyX3NlcnZlciwgZGVsdGFfZXhlYyk7XFxua2VybmVsL3NjaGVkL2lkbGUuYzo1NzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU3MS1cXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXFx1MDAyNnJxLVxcdTAwM2VleHRfc2VydmVyLCBkZWx0YV9leGVjKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5ND1zdGF0aWMgaW5saW5lIGludCBub3JtYWxfcG9saWN5KGludCBwb2xpY3kpXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTk1LXtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTctXFx0aWYgKHBvbGljeSA9PSBTQ0hFRF9FWFQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD02ODE9c3RydWN0IGNmc19ycSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC03NzktXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6NzgwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtNzgxLS8qIHNjeF9ycS1cXHUwMDNlZmxhZ3MsIHByb3RlY3RlZCBieSB0aGUgcnEgbG9jayAqL1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9ODExPXN0cnVjdCBzY3hfcnEge1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtODUwLX07XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6ODUxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtODUyLVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTE1OT1zdHJ1Y3QgcnEge1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxMy1cXHRzdHJ1Y3QgZGxfcnFcXHRcXHRkbDtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMjE0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxNS1cXHRzdHJ1Y3Qgc2N4X3JxXFx0XFx0c2N4O1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTg4NT1leHRlcm4gc3RydWN0IGJhbGFuY2VfY2FsbGJhY2sgYmFsYW5jZV9wdXNoX2NhbGxiYWNrO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODYtXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTg4NzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODgtZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBleHRfc2NoZWRfY2xhc3M7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xOTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfcnFfY2xvY2tfaW52YWxpZGF0ZShzdHJ1Y3QgcnEgKnJxKVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxMC1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTExOiNlbHNlIC8qICFDT05GSUdfU0NIRURfQ0xBU1NfRVhUOiAqL1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5MTItI2RlZmluZSBzY3hfZW5hYmxlZCgpXFx0XFx0ZmFsc2VcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MTY9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTkxNzojZW5kaWYgLyogIUNPTkZJR19TQ0hFRF9DTEFTU19FWFQgKi9cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTE4LVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9Mjg0MT1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqbmV4dF9hY3RpdmVfY2xhc3MoY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzcylcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NDMtXFx0Y2xhc3MrKztcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODQ0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg0NS1cXHRpZiAoc2N4X3N3aXRjaGVkX2FsbCgpIFxcdTAwMjZcXHUwMDI2IGNsYXNzID09IFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzKVxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM9NDc0PXZvaWQgcnFfYXR0YWNoX3Jvb3Qoc3RydWN0IHJxICpycSwgc3RydWN0IHJvb3RfZG9tYWluICpyZClcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTUxMi1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo1MTM6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy01MTQtXFx0aWYgKHJxLVxcdTAwM2VleHRfc2VydmVyLmRsX3NlcnZlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MDUuODY4NzQ4MjMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzMDc2NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCBmb3IgU0NIRURfQ0xBU1NfRVhUKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBTQ0hFRF9DTEFTU19FWFRgIGNvbmZpZyBvcHRpb24gbGl2ZXMuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24gb3IgdGhlIHNjaGVkdWxlci4gYGluaXQvS2NvbmZpZ2AgaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ2VuZXJhbCBzeXN0ZW0gZmVhdHVyZXMsIGJ1dCBnaXZlbiBpdCdzIHNjaGVkdWxlciByZWxhdGVkLCBJ4oCZbGwgbGlrZWx5IGJlIG1vcmUgc3VjY2Vzc2Z1bCBsb29raW5nIGluc2lkZSBga2VybmVsL3NjaGVkL0tjb25maWdgLiBBbmQsIGRlcGVuZGluZywgbWF5YmUgdGhpcyBleHRlbmRzIHRvIHNvbWUgb2YgdGhlIHByZWVtcHRpb24gY29uZmlndXJhdGlvbiBpZiBJJ20gdGhpbmtpbmcgbW9yZSBicm9hZGx5IGFib3V0IGl0cyBpbXBsaWNhdGlvbnMuIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCdzIHByb2JhYmx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gaXRzIHJlbGF0ZWQgdG8gc2NoZWR1bGluZyBjbGFzc2VzLCBvciBwcmVlbXB0aW9uLCBhcyB0aGUgY2FzZSBtYXkgYmUuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLiBJJ2xsIHNlYXJjaCBmb3IgdGhhdCBzdHJpbmcsIGFuZCBob3BlZnVsbHksIEknbGwgZmluZCBpdHMgZGVmaW5pdGlvbiBhbmQgY29udGV4dCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MDguMjk5NTE2MjYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY5NDgxMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdD0xNTU9Y29uZmlnIFNDSEVEX0NPUkVcXG4tLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcyLVxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQ6MTczOmNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3NC1cXHRib29sIFxcXCJFeHRlbnNpYmxlIFNjaGVkdWxpbmcgQ2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjA5Ljk2OTAwMzMzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI5NjE2NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFByZWVtcHRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCBwcmVlbXB0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzdGFydCB3aXRoIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3My4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgdGhlIGNvcmUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIHByZWVtcHRpb24gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGxpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGNob2ljZXMgdGhlcmUgdGhhdCBkcml2ZSB0aGUgYmVoYXZpb3I6IHdoZXRoZXIgaXQncyBmdWxsIHByZWVtcHRpb24sIHZvbHVudGFyeSBwcmVlbXB0aW9uLCBvciBtYXliZSBzb21lIG1vcmUgbnVhbmNlZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBhdXRob3JzIGNvbnNpZGVyZWQgY3JpdGljYWwgaW4gbWFraW5nIHRoZWlyIGRlY2lzaW9ucy4gSXQncyBwcm9iYWJseSB0aGUgYmFzaXMgdG8gc2VlIHRoZSBpbnRlci1yZWxhdGVkIGltcGFjdHMgaW4gb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjEyLjA5ODYyMjE5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0XCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHQgIHdoaWNoIGlzIHRoZSBsaWtlbHkgdXNhZ2UgYnkgTGludXggZGlzdHJpYnV0aW9ucywgdGhlcmUgc2hvdWxkXFxuIDE3MTpcXHRcXHQgIGJlIG5vIG1lYXN1cmFibGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLlxcbiAxNzI6XFx0XFxuIDE3MzpcXHRjb25maWcgU0NIRURfQ0xBU1NfRVhUXFxuIDE3NDpcXHRcXHRib29sIFxcXCJFeHRlbnNpYmxlIFNjaGVkdWxpbmcgQ2xhc3NcXFwiXFxuIDE3NTpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgREVCVUdfSU5GT19CVEZcXG4gMTc2OlxcdFxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbiAxNzc6XFx0XFx0c2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDE3ODpcXHRcXHRoZWxwXFxuIDE3OTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBuZXcgc2NoZWR1bGVyIGNsYXNzIHNjaGVkX2V4dCAoU0NYKSwgd2hpY2hcXG4gMTgwOlxcdFxcdCAgYWxsb3dzIHNjaGVkdWxpbmcgcG9saWNpZXMgdG8gYmUgaW1wbGVtZW50ZWQgYXMgQlBGIHByb2dyYW1zIHRvXFxuIDE4MTpcXHRcXHQgIGFjaGlldmUgdGhlIGZvbGxvd2luZzpcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0ICAtIEVhc2Ugb2YgZXhwZXJpbWVudGF0aW9uIGFuZCBleHBsb3JhdGlvbjogRW5hYmxpbmcgcmFwaWRcXG4gMTg0OlxcdFxcdCAgICBpdGVyYXRpb24gb2YgbmV3IHNjaGVkdWxpbmcgcG9saWNpZXMuXFxuIDE4NTpcXHRcXHQgIC0gQ3VzdG9taXphdGlvbjogQnVpbGRpbmcgYXBwbGljYXRpb24tc3BlY2lmaWMgc2NoZWR1bGVycyB3aGljaFxcbiAxODY6XFx0XFx0ICAgIGltcGxlbWVudCBwb2xpY2llcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byBnZW5lcmFsLXB1cnBvc2VcXG4gMTg3OlxcdFxcdCAgICBzY2hlZHVsZXJzLlxcbiAxODg6XFx0XFx0ICAtIFJhcGlkIHNjaGVkdWxlciBkZXBsb3ltZW50czogTm9uLWRpc3J1cHRpdmUgc3dhcCBvdXRzIG9mXFxuIDE4OTpcXHRcXHQgICAgc2NoZWR1bGluZyBwb2xpY2llcyBpbiBwcm9kdWN0aW9uIGVudmlyb25tZW50cy5cXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0ICBzY2hlZF9leHQgbGV2ZXJhZ2VzIEJQRiBzdHJ1Y3Rfb3BzIGZlYXR1cmUgdG8gZGVmaW5lIGEgc3RydWN0dXJlXFxuIDE5MjpcXHRcXHQgIHdoaWNoIGV4cG9ydHMgZnVuY3Rpb24gY2FsbGJhY2tzIGFuZCBmbGFncyB0byBCUEYgcHJvZ3JhbXMgdGhhdFxcbiAxOTM6XFx0XFx0ICB3aXNoIHRvIGltcGxlbWVudCBzY2hlZHVsaW5nIHBvbGljaWVzLiBUaGUgc3RydWN0X29wcyBzdHJ1Y3R1cmVcXG4gMTk0OlxcdFxcdCAgZXhwb3J0ZWQgYnkgc2NoZWRfZXh0IGlzIHN0cnVjdCBzY2hlZF9leHRfb3BzLCBhbmQgaXMgY29uY2VwdHVhbGx5XFxuIDE5NTpcXHRcXHQgIHNpbWlsYXIgdG8gc3RydWN0IHNjaGVkX2NsYXNzLlxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uOlxcbiAxOTg6XFx0XFx0ICAgIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWV4dC5yc3RcXG4gMTk5OlxcdFxcdCAgICBodHRwczovL2dpdGh1Yi5jb20vc2NoZWQtZXh0L3NjeFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjoxMi4wOTg3MDAxNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNTYxNjQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaWdnaW5nIGludG8gU2NoZWR1bGVyIEV4dGVuc2lvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHNjaGVkdWxlciBleHRlbnNpb25zIGFyZSBpbnRlcmFjdGluZy4gTXkgaHVuY2ggdGVsbHMgbWUgdGhlIHBpZWNlcyBJJ20gaW50ZXJlc3RlZCBpbiBhcmUgZ29pbmcgdG8gYmUgbHVya2luZyBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuaGAgYW5kIGBrZXJuZWwvc2NoZWQvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSA4MCBpbiB0aGUgYGV4dC5oYCBoZWFkZXIsIGFuZCB0aGVuIGFyb3VuZCBsaW5lIDEwMjU5IGluIHRoZSBjb3JlIGZpbGUuIEknbSBob3BpbmcgdG8gcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBhY3R1YWxseSAqZW5hYmxlKiBgc2N4X2dyb3VwX3NldF9pZGxlYCBhbmQgYGNwdV9pZGxlX3dyaXRlX3M2NGAuIFRob3NlIHR3byBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gQnkgdHJhY2luZyBiYWNrIHRocm91Z2ggdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlZHVjZSB0aGUgZXhhY3Qgc2V0IG9mIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgcGFydGljdWxhciBiZWhhdmlvci4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgaWRsZSB0YXNrIG1hbmFnZW1lbnQgaW50ZXJhY3RzIHdpdGggc2NoZWR1bGVyIGV4dGVuc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjE0LjEwNDMxOTMyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc2NoZWQvZXh0L2V4dC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSkge31cXG4gIDcxOlxcdCNlbmRpZlxcbiAgNzI6XFx0XFxuICA3MzpcXHQjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRFxcbiAgNzQ6XFx0I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG4gIDc1OlxcdHZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTtcXG4gIDc2OlxcdGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XFxuICA3NzpcXHR2b2lkIHNjeF90Z19vZmZsaW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XFxuICA3ODpcXHRpbnQgc2N4X2Nncm91cF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCk7XFxuICA3OTpcXHR2b2lkIHNjeF9jZ3JvdXBfbW92ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuICA4MDpcXHR2b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpO1xcbiAgODE6XFx0dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbiAgODI6XFx0dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbiAgODM6XFx0dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG4gIDg0OlxcdCNlbHNlXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbiAgODU6XFx0c3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cXG4gIDg2OlxcdHN0YXRpYyBpbmxpbmUgaW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7IHJldHVybiAwOyB9XFxuICA4NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X3RnX29mZmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7fVxcbiAgODg6XFx0c3RhdGljIGlubGluZSBpbnQgc2N4X2Nncm91cF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkgeyByZXR1cm4gMDsgfVxcbiAgODk6XFx0c3RhdGljIGlubGluZSB2b2lkIHNjeF9jZ3JvdXBfbW92ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cXG4gIDkwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxcbiAgOTE6XFx0c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG4gIDkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cykge31cXG4gIDk0OlxcdCNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4gIDk1OlxcdCNlbmRpZlxcdC8qIENPTkZJR19DR1JPVVBfU0NIRUQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MTQuMTA0MzgzNjI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzAwMDUxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEV4dGVuZGVkIEdyb3VwIFNjaGVkdWxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYCBpcyBmbGFzaGluZyBhIG1lbnRhbCByZWQgZmxhZywgb3IgcGVyaGFwcyBhIGdyZWVuIGZsYWcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2VzLCBvciBtYXliZSBqdXN0IG15IGxvY2FsIHRyZWUgaWYgSSBoYXZlIG9uZSBzZXQgdXAgd2l0aCByZWxldmFudCBwYXRjaGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRGAgaXMgYWN0dWFsbHkgdXNlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCdzICpkZWZpbmVkKiBhbmQgKnJlZmVyZW5jZWQqIHdpdGhpbiB0aGUgc2NoZWR1bGVyIGNvZGUuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHNjaGVkdWxpbmcgZmVhdHVyZXMsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBJIG1pZ2h0IGFsc28gbG9vayBmb3IgdXNlcyBvZiBgRVhUX0dST1VQX1NDSEVEYCBkaXJlY3RseSwgYXMgaXQgbWF5IGJlIHVzZWQgaW4gbWFjcm9zIG9yIG90aGVyIGRlZmluaXRpb25zLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIHRoZSBsYW5kc2NhcGUgc3Vycm91bmRpbmcgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbjogaXRzIHB1cnBvc2UsIHNjb3BlLCBhbmQgaW1wYWN0IG9uIHRoZSBrZXJuZWwncyBzY2hlZHVsaW5nIGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGlmIGl0J3MgbmV3LCBvciBhbiBldm9sdXRpb24gb2Ygc29tZXRoaW5nIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGgsIG9yIGlmIEkndmUgYmVlbiBzbGVlcGluZyBvbiBhIHNpZ25pZmljYW50IHNjaGVkdWxlciBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjoxOC43NzQzOTE0MzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDI0MzkyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhUX0dST1VQX1NDSEVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvZXh0Lmg9MTg1PXN0cnVjdCBzY2hlZF9leHRfZW50aXR5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgtMjgxLVxcdC8qIGNvbGQgZmllbGRzICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaDoyODI6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oLTI4My1cXHRzdHJ1Y3QgY2dyb3VwXFx0XFx0KmNncnBfbW92aW5nX2Zyb207XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oPTMwND1zdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXAge1xcbmluY2x1ZGUvbGludXgvc2NoZWQvZXh0Lmg6MzA1OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaC0zMDYtXFx0LypcXG4tLVxcbmluaXQvS2NvbmZpZz0xMTk3PWNvbmZpZyBSVF9HUk9VUF9TQ0hFRF9ERUZBVUxUX0RJU0FCTEVEXFxuLS1cXG5pbml0L0tjb25maWctMTIwNy1cXG5pbml0L0tjb25maWc6MTIwODpjb25maWcgRVhUX0dST1VQX1NDSEVEXFxuaW5pdC9LY29uZmlnLTEyMDktXFx0Ym9vbFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU5NDE9QlRGX1RZUEVfU0FGRV9UUlVTVEVEKHN0cnVjdCBzY3hfaW5pdF90YXNrX2FyZ3MpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTk0MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTQzLVxcdHN0cnVjdCBjZ3JvdXAgKmNncm91cDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk1MT12b2lkIF9faW5pdCBzY2hlZF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NzMtI2VuZGlmIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzo4OTc0OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2NvcmUuYy04OTc1LVxcdHNjeF90Z19pbml0KFxcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk3NjojZW5kaWYgLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3Ny0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVEXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTM3OTI9c3RhdGljIHZvaWQgdGFza190aWNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBxdWV1ZWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MTAtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozODExOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODEyLXN0YXRpYyBzdHJ1Y3QgY2dyb3VwICp0Z19jZ3JwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgyNi1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjM4Mjc6I2Vsc2VcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODI4LVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODMwLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgzMTojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODMyLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NjQyPWJvb2wgc2N4X2Nhbl9zdG9wX3RpY2soc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY3Ny1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ2Nzg6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2NzktXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5NDY9dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5NjYtfVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk2NzojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTY4LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk2OTojaWYgZGVmaW5lZChDT05GSUdfRVhUX0dST1VQX1NDSEVEKSB8fCBkZWZpbmVkKENPTkZJR19FWFRfU1VCX1NDSEVEKVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk3MC1zdGF0aWMgc3RydWN0IGNncm91cCAqcm9vdF9jZ3JvdXAodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk4MD12b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTgyLVxcdGNncm91cF9sb2NrKCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTgzOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTg0LVxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5ODg9dm9pZCBzY3hfY2dyb3VwX3VubG9jayh2b2lkKVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk4OS17XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTkwOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTkxLVxcdHBlcmNwdV91cF93cml0ZShcXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTk0LX1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5OTU6I2Vsc2VcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEIHx8IENPTkZJR19FWFRfU1VCX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTk2LXN0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cCAqcm9vdF9jZ3JvdXAodm9pZCkgeyByZXR1cm4gTlVMTDsgfVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX3VubG9jayh2b2lkKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk5OTojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEIHx8IENPTkZJR19FWFRfU1VCX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MDAwLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01MTEwPXN0YXRpYyB2b2lkIGRlc3Ryb3lfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgdTY0IGRzcV9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE0OC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNDk6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNTAtc3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODA3NT1zdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0X3Rhc2spOlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA4MzojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4NC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDA9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MjQxOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQyLXN0YXRpYyBzMzIgc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzICphcmdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDk9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlKHN0cnVjdCBjZ3JvdXAgKmNncnAsIGJvb2wgaWRsZSkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyNTA6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI1MS1zdGF0aWMgczMyIHNjaGVkX2V4dF9vcHNfX3N1Yl9hdHRhY2goc3RydWN0IHNjeF9zdWJfYXR0YWNoX2FyZ3MgKmFyZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI2Mj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHMgX19icGZfb3BzX3NjaGVkX2V4dF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODItXFx0LmRpc2FibGVcXHRcXHQ9IHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MjgzOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mjg0LVxcdC5jZ3JvdXBfaW5pdFxcdFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgzMjk9c3RhdGljIHN0cnVjdCBzY2hlZF9leHRfb3BzX2NpZCBfX2JwZl9vcHNfc2NoZWRfZXh0X29wc19jaWQgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNDctXFx0LmRpc2FibGVcXHRcXHQ9IHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzQ4OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzQ5LVxcdC5jcHVjdGxfaW5pdFxcdFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzg2PXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkyLVxcdFtTQ1hfT1BfSURYKGR1bXApXVxcdFxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTM6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzk0LVxcdFtTQ1hfT1BfSURYKGNncm91cF9pbml0KV1cXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA4MDAtXFx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9pZGxlKV1cXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwODAxOiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwODAyLVxcdFtTQ1hfT1BfSURYKHN1Yl9hdHRhY2gpXVxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDkwMT1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cXHRDSURfT0ZGU0VUX01BVENIKGR1bXBfY3B1LCBkdW1wX2NpZCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk1NzojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTgtXFx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfaW5pdCwgY3B1Y3RsX2luaXQpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMTA1ND1fX2luaXRjYWxsKHNjeF9pbml0KTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjQtICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA2NTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjYtREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA2NzojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTcwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSkge31cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzMtI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjc0OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC03NS12b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgzPXZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cyk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4NDojZWxzZVxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTg1LXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpIHt9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkzPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTQ6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTUtI2VuZGlmXFx0LyogQ09ORklHX0NHUk9VUF9TQ0hFRCAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTIzNT1zdHJ1Y3Qgc2N4X2luaXRfdGFza19hcmdzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNDAtXFx0Ym9vbFxcdFxcdFxcdGZvcms7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjI0MTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNDItXFx0LyogdGhlIGNncm91cCB0aGUgdGFzayBpcyBqb2luaW5nICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzIyPXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTEtXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY1MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTMtXFx0LyoqXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzg2LVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3ODc6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODgtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTA0Nj1zdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwNzEtXFx0dm9pZCAoKmR1bXBfdGFzaykoc3RydWN0IHNjeF9kdW1wX2N0eCAqY3R4LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDcyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwNzMtXFx0czMyICgqY3B1Y3RsX2luaXQpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA4My1cXHR2b2lkICgqY3B1Y3RsX3NldF9pZGxlKShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDg0OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA4NS1cXHRzMzIgKCpzdWJfYXR0YWNoKShzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncyAqYXJncyk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjA3OT12b2lkIHNjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoyMDgwOiNpZiBkZWZpbmVkKENPTkZJR19FWFRfR1JPVVBfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX0VYVF9TVUJfU0NIRUQpXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTIwODEtdm9pZCBzY3hfY2dyb3VwX2xvY2sodm9pZCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jPTEyOTQ9c3RhdGljIHZvaWQgc2N4X2ZhaWxfcGFyZW50KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMyMC1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzMjE6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzMjItLyoqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvY29uZmlnPTM9Q09ORklHX0NHUk9VUF9TQ0hFRD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L2NvbmZpZzo0OkNPTkZJR19FWFRfR1JPVVBfU0NIRUQ9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9jb25maWctNS1DT05GSUdfQlBGPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MjAuMjc2ODM0NDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3MTc4ODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiB0aGlzIHN5c3RlbS4gSSB0aGluayBJJ3ZlIGdvdCBhIGxlYWQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybS4gTXkgZ3V0IHNheXMgaXQncyBsaWtlbHkgYSBzZXR0aW5nIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgY29tcG9uZW50IG9yIGZlYXR1cmUgYmVpbmcgaW5pdGlhbGl6ZWQgYXQgYm9vdC4gU28sIEkgbmVlZCB0byBjaGVjayBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSB0eXBpY2FsIHBsYWNlIGZvciB0aGVzZSBzb3J0cyBvZiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzY2FuIGFyb3VuZCBsaW5lIDEyMDguIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIHNldHRpbmcgSSBhbSBpbnRlcmVzdGVkIGluIGlzIGRlZmluZWQsIG9yIGF0IGxlYXN0IGxpbmtlZCB0by4gVGltZSB0byBnZXQgZG93biB0byBkZXRhaWxzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MjIuMTQ4NjI1NDE5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE5NTpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuMTE5NjpcXHRcXG4xMTk3OlxcdGNvbmZpZyBSVF9HUk9VUF9TQ0hFRF9ERUZBVUxUX0RJU0FCTEVEXFxuMTE5ODpcXHRcXHRib29sIFxcXCJSZXF1aXJlIGJvb3QgcGFyYW1ldGVyIHRvIGVuYWJsZSBncm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPXFxcIlxcbjExOTk6XFx0XFx0ZGVwZW5kcyBvbiBSVF9HUk9VUF9TQ0hFRFxcbjEyMDA6XFx0XFx0ZGVmYXVsdCBuXFxuMTIwMTpcXHRcXHRoZWxwXFxuMTIwMjpcXHRcXHQgIFdoZW4gc2V0LCB0aGUgUlQgZ3JvdXAgc2NoZWR1bGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBUaGUgb3B0aW9uXFxuMTIwMzpcXHRcXHQgIGlzIGluIGludmVydGVkIGZvcm0gc28gdGhhdCBtZXJlIFJUX0dST1VQX1NDSEVEIGVuYWJsZXMgdGhlIGdyb3VwXFxuMTIwNDpcXHRcXHQgIHNjaGVkdWxpbmcuXFxuMTIwNTpcXHRcXG4xMjA2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEyMDc6XFx0XFxuMTIwODpcXHRjb25maWcgRVhUX0dST1VQX1NDSEVEXFxuMTIwOTpcXHRcXHRib29sXFxuMTIxMDpcXHRcXHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcXHUwMDI2XFx1MDAyNiBDR1JPVVBfU0NIRURcXG4xMjExOlxcdFxcdHNlbGVjdCBHUk9VUF9TQ0hFRF9XRUlHSFRcXG4xMjEyOlxcdFxcdHNlbGVjdCBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcXG4xMjEzOlxcdFxcdGRlZmF1bHQgeVxcbjEyMTQ6XFx0XFxuMTIxNTpcXHRlbmRpZiAjQ0dST1VQX1NDSEVEXFxuMTIxNjpcXHRcXG4xMjE3OlxcdGNvbmZpZyBFWFRfU1VCX1NDSEVEXFxuMTIxODpcXHQgICAgICAgIGRlZl9ib29sIHlcXG4xMjE5OlxcdCAgICAgICAgZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXFx1MDAyNlxcdTAwMjYgQ0dST1VQU1xcbjEyMjA6XFx0XFxuMTIyMTpcXHRjb25maWcgU0NIRURfTU1fQ0lEXFxuMTIyMjpcXHRcXHRkZWZfYm9vbCB5XFxuMTIyMzpcXHRcXHRkZXBlbmRzIG9uIFNNUCBcXHUwMDI2XFx1MDAyNiBSU0VRXFxuMTIyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MjIuMTQ4ODAxOTk5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDE5NDIwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHRlbmRlZCBHcm91cCBTY2hlZHVsaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgRVhUX0dST1VQX1NDSEVEYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgaXQncyBkZXBlbmRlbnQgb24gYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgLCBhbmQgdGhhdCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIGBTQ0hFRF9DTEFTU19FWFRgLCBJIG5lZWQgdG8gbG9vayBhdCBpdHMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gQWxyaWdodCwgc28gdGhlIGV4dGVuZGVkIHNjaGVkdWxlciBjbGFzcyBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBCUEYgZnVuY3Rpb25hbGl0aWVzLCBhbmQgZGVidWcgaW5mby4gVGhpcyBhbGwgc2VlbXMgdG8gYmUgYnVpbGRpbmcgYSBwaWN0dXJlIG9mIGEgbW9yZSBmbGV4aWJsZSBhbmQgcHJvZ3JhbW1hYmxlIHNjaGVkdWxpbmcgZW52aXJvbm1lbnQuXG5cbkxldCdzIHN3aXRjaCBnZWFycyBmb3IgYSBtb21lbnQuIFRvIHNlZSBob3cgdGhlc2Ugc2NoZWR1bGluZyBwcmluY2lwbGVzIGFyZSBhcHBsaWVkLCBJIHdhbnQgdG8gZXhwbG9yZSBob3cgYGNwdV9pZGxlX3dyaXRlX3M2NGAgd29ya3MgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgLiBJJ2xsIG5lZWQgdG8gcmVhZCB0aHJvdWdoIHRoYXQgZnVuY3Rpb24gdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24ncyBpbXBhY3QgaXMgcmVhbGl6ZWQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjI0Ljc1MDc0NjI5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMjI5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3B1X2lkbGVfd3JpdGVfczY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjUzPXN0YXRpYyBzNjQgY3B1X2lkbGVfcmVhZF9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNTgtXFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDI1OTpzdGF0aWMgaW50IGNwdV9pZGxlX3dyaXRlX3M2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNjAtXFx0XFx0XFx0XFx0c3RydWN0IGNmdHlwZSAqY2Z0LCBzNjQgaWRsZSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTAyNzE9c3RhdGljIHN0cnVjdCBjZnR5cGUgY3B1X2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI4MC1cXHRcXHQucmVhZF9zNjQgPSBjcHVfaWRsZV9yZWFkX3M2NCxcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjgxOlxcdFxcdC53cml0ZV9zNjQgPSBjcHVfaWRsZV93cml0ZV9zNjQsXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI4Mi1cXHR9LFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0xMDU0MT1zdGF0aWMgc3RydWN0IGNmdHlwZSBjcHVfZmlsZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA1NTgtXFx0XFx0LnJlYWRfczY0ID0gY3B1X2lkbGVfcmVhZF9zNjQsXFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDU1OTpcXHRcXHQud3JpdGVfczY0ID0gY3B1X2lkbGVfd3JpdGVfczY0LFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA1NjAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MjQuNzk3ODcyODc2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTA3OTk1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgU2NoZWR1bGVyIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgTGludXggc2NoZWR1bGVyLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLiBMZXQncyB6ZXJvIGluIG9uIGxpbmUgMTAyNTkuIEkga25vdyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgc3BlY2lmaWMgbG9naWMgSSdtIGludGVyZXN0ZWQgaW4sIGdpdmVuIHRoZSBjb250ZXh0IEknbSB3b3JraW5nIHdpdGguIFRoaXMgZnVuY3Rpb24gY2FsbC4uLiB0aGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBwaW5wb2ludCB0aGUgY29kZSBsb2NhdGlvbiBkaXJlY3RseSBpbnN0ZWFkIG9mIHNlYXJjaGluZyB0aHJvdWdoIHRoZSBlbnRpcmUgY29kZSBvciBsb29raW5nIGluIHRoZSBkb2N1bWVudGF0aW9uLiBIb3BlZnVsbHksIHRoaXMgc3RhcnRpbmcgcG9pbnQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIG9mIHRhc2sgc2NoZWR1bGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjoyNi44MDg2NzQ3MzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjUwOlxcdCNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi9cXG4xMDI1MTpcXHRcXG4xMDI1MjpcXHQjaWZkZWYgQ09ORklHX0dST1VQX1NDSEVEX1dFSUdIVFxcbjEwMjUzOlxcdHN0YXRpYyBzNjQgY3B1X2lkbGVfcmVhZF9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4xMDI1NDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNmdHlwZSAqY2Z0KVxcbjEwMjU1OlxcdHtcXG4xMDI1NjpcXHRcXHRyZXR1cm4gY3NzX3RnKGNzcyktXFx1MDAzZWlkbGU7XFxuMTAyNTc6XFx0fVxcbjEwMjU4OlxcdFxcbjEwMjU5OlxcdHN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuMTAyNjA6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGNmdHlwZSAqY2Z0LCBzNjQgaWRsZSlcXG4xMDI2MTpcXHR7XFxuMTAyNjI6XFx0XFx0aW50IHJldDtcXG4xMDI2MzpcXHRcXG4xMDI2NDpcXHRcXHRyZXQgPSBzY2hlZF9ncm91cF9zZXRfaWRsZShjc3NfdGcoY3NzKSwgaWRsZSk7XFxuMTAyNjU6XFx0XFx0aWYgKCFyZXQpXFxuMTAyNjY6XFx0XFx0XFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcXG4xMDI2NzpcXHRcXHRyZXR1cm4gcmV0O1xcbjEwMjY4OlxcdH1cXG4xMDI2OTpcXHQjZW5kaWYgLyogQ09ORklHX0dST1VQX1NDSEVEX1dFSUdIVCAqL1xcbjEwMjcwOlxcdFxcbjEwMjcxOlxcdHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNwdV9sZWdhY3lfZmlsZXNbXSA9IHtcXG4xMDI3MjpcXHQjaWZkZWYgQ09ORklHX0dST1VQX1NDSEVEX1dFSUdIVFxcbjEwMjczOlxcdFxcdHtcXG4xMDI3NDpcXHRcXHRcXHQubmFtZSA9IFxcXCJzaGFyZXNcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjoyNi44MDkyNzcxMTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk5NzAwMjU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBTY2hlZHVsZXIgRXh0IENncm91cCBJZGxlIFN0YXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsOiBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgc2N4X2dyb3VwX3NldF9pZGxlYCwgcGFydCBvZiB0aGUgc2NoZWR1bGVyJ3MgZXh0ZW5zaWJsZSBjbGFzcyAoYHNjaGVkX2V4dGApLiBJJ20gbG9va2luZyBhdCBob3cgaXQgaGFuZGxlcyB0aGUgaWRsZSBzdGF0ZSB3aXRoaW4gY2dyb3Vwcy4gIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBjYWxsaW5nIHRoZSBCUEYgb3BlcmF0aW9uIGBjZ3JvdXBfc2V0X2lkbGVgIHVuY29uZGl0aW9uYWxseS4gVGhpcyBpcyBhIHByb2JsZW0sIGJlY2F1c2UgaXQncyBpbmVmZmljaWVudCBhbmQgcG90ZW50aWFsbHkgYnVnZ3kuXG5cblRoZSBmaXg/ICBBIHNpbXBsZSwgYnV0IGNydWNpYWwsIGNoZWNrOiBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAuIFRoaXMgcHJldmVudHMgcmVkdW5kYW50IGNhbGxzIHRvIGBjZ3JvdXBfc2V0X2lkbGVgIHdoZW4gdGhlIGlkbGUgc3RhdGUgaGFzbid0IGFjdHVhbGx5IGNoYW5nZWQuICBFc3NlbnRpYWxseSwgbWFraW5nIHRoaXMgbW9kaWZpY2F0aW9uIGlzIHNpbWlsYXIgdG8gd2hhdCdzIGRvbmUgZm9yIHRoZSBgd2VpZ2h0YCBhbmQgYGJhbmR3aWR0aGAgY2dyb3VwIG9wZXJhdGlvbnMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXb3J0aCBmdXp6aW5nP1wiIEJhc2VkIG9uIG15IGNyaXRlcmlhLCB0aGlzIGxvb2tzIHByb21pc2luZy4gSXQncyB0b3VjaGluZyBjb3JlIGtlcm5lbCBzY2hlZHVsZXIgbG9naWMgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgLiBUaGUgY29kZSBpcyAqcmVhY2hhYmxlKiBmcm9tIHVzZXJzcGFjZSB2aWEgd3JpdGluZyB0byB0aGUgYGNwdS5pZGxlYCBjZ3JvdXAgY29udHJvbCBmaWxlLCB3aGljaCBjYWxscyB0aGUgYGNwdV9pZGxlX3dyaXRlX3M2NGAgZnVuY3Rpb24uIFRoaXMgcGF0Y2ggZGVmaW5pdGVseSBtb2RpZmllcyBhIGNvcmUgY29tcG9uZW50LlxuXG5UbyB2ZXJpZnkgbXkgZnV6emluZyBoeXBvdGhlc2lzLCBsZXQncyBuYWlsIGRvd24gd2hhdCBjb25maWdzIGFuZCBzeW1ib2xzIG5lZWQgdG8gYmUgc2V0LiAgT2J2aW91c2x5LCBJIG5lZWQgYFNDSEVEX0NMQVNTX0VYVGAsIGBDR1JPVVBfU0NIRURgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBUaGVzZSBlbmFibGUgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSBhbmQgYXJlIGNyaXRpY2FsIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgc2NoZWRfZXh0YC4gIEVuYWJsaW5nIHRoZXNlIGFsc28gaW1wbGllcyB0aGUgZW5hYmxlbWVudCBvZiBgRVhUX0dST1VQX1NDSEVEYC5cblxuSSd2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBgc2N4X2dyb3VwX3NldF9pZGxlYCBhbmQgYGNwdV9pZGxlX3dyaXRlX3M2NGAgYXJlIGltcG9ydGFudCB0byBub3RlLlxuXG5TbywgaW4gY29uY2x1c2lvbiwgdGhlIGFuc3dlciBpcyAqV29ydGhGdXp6aW5nPXRydWUqLiAgVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaW5lZmZpY2llbmN5IGluIGEgY29yZSBzY2hlZHVsaW5nIHBhdGggYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyB0byB1bmNvdmVyIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvciByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcmVkdW5kYW50IGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjozMi44MDYyODEzODdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTM3NjM4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9TQ0hFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTE0OD1jb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbi0tXFxuaW5pdC9LY29uZmlnLTExNTItXFxuaW5pdC9LY29uZmlnOjExNTM6bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTE1NC1cXHRib29sIFxcXCJDUFUgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MzQuMzIwMDUxODQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTcyMzQ1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBjb25maWd1cmF0aW9uIHN0dWZmLiBMZXQncyBzZWUuLi4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIGJlLCBhbmQgSSByZW1lbWJlciBzb21ldGhpbmcgYmVpbmcgaW4gdGhhdCBhcmVhIHJlZ2FyZGluZyBpdHMgc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMTE1MyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eSBncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MzYuNDM3Mjg5MDc4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1MDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHIFxcdTAwMjZcXHUwMDI2IEJMS19DR1JPVVBcXG4xMTUxOlxcdFxcdGRlZmF1bHQgeVxcbjExNTI6XFx0XFxuMTE1MzpcXHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxcbjExNTQ6XFx0XFx0Ym9vbCBcXFwiQ1BVIGNvbnRyb2xsZXJcXFwiXFxuMTE1NTpcXHRcXHRkZWZhdWx0IG5cXG4xMTU2OlxcdFxcdGhlbHBcXG4xMTU3OlxcdFxcdCAgVGhpcyBmZWF0dXJlIGxldHMgQ1BVIHNjaGVkdWxlciByZWNvZ25pemUgdGFzayBncm91cHMgYW5kIGNvbnRyb2wgQ1BVXFxuMTE1ODpcXHRcXHQgIGJhbmR3aWR0aCBhbGxvY2F0aW9uIHRvIHN1Y2ggdGFzayBncm91cHMuIEl0IHVzZXMgY2dyb3VwcyB0byBncm91cFxcbjExNTk6XFx0XFx0ICB0YXNrcy5cXG4xMTYwOlxcdFxcbjExNjE6XFx0aWYgQ0dST1VQX1NDSEVEXFxuMTE2MjpcXHRjb25maWcgR1JPVVBfU0NIRURfV0VJR0hUXFxuMTE2MzpcXHRcXHRkZWZfYm9vbCBuXFxuMTE2NDpcXHRcXG4xMTY1OlxcdGNvbmZpZyBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcXG4xMTY2OlxcdFxcdGRlZl9ib29sIG5cXG4xMTY3OlxcdFxcbjExNjg6XFx0Y29uZmlnIEZBSVJfR1JPVVBfU0NIRURcXG4xMTY5OlxcdFxcdGJvb2wgXFxcIkdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX09USEVSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1NjozNi40Mzc0MTczMThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwMjY5OTI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWcgZm9yIENHUk9VUF9TQ0hFRCoqXG5cblJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgQ0dST1VQX1NDSEVEYCDigJMgd2hhdGV2ZXIgaXQgaXMg4oCTIGlzICpkZXBlbmRlbnQqIG9uIGBDR1JPVVBTYC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLCByZWFsbHk7IGl0J3MgcHJhY3RpY2FsbHkgYSBnaXZlbiB3aXRoIHRoaXMga2luZCBvZiBtb2R1bGFyaXR5LiBJZiBJIHdhbnQgdG8gZW5hYmxlIGFkdmFuY2VkIHNjaGVkdWxpbmcgd2l0aGluIGNncm91cHMsIEknbGwgbmVlZCB0aGUgY2dyb3VwIGluZnJhc3RydWN0dXJlIGl0c2VsZiBmaXJzdC4gU28sIHRoZSBwYXJlbnQgbWVudSBvciBjb25maWcgb3B0aW9uIGlzIGNsZWFybHkgYENHUk9VUFNgLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBpbml0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBsYWlkIG91dCBleHBsaWNpdGx5LiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCBgQ0dST1VQX1NDSEVEYCAqaXMqIGluIHRoYXQgY29udGV4dC4gV2hhdCBmZWF0dXJlcyBkb2VzIGl0IGVuYWJsZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQ/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBleGFtaW5pbmcgYGluaXQvS2NvbmZpZ2Agd2lsbCBwcm92aWRlIHRoZSBmdWxsIHBpY3R1cmUuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA4MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6MzguODQwMTE5MTg5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDgyODk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENHUk9VUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA1ND1jb25maWcgU0xBQl9PQkpfRVhUXFxuLS1cXG5pbml0L0tjb25maWctMTA1Ni1cXG5pbml0L0tjb25maWc6MTA1NzptZW51Y29uZmlnIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA1OC1cXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjM4Ljg4NDk1MTE3OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjgxNjI1MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmFsaXppbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIE9wdGltaXplZCBLZXJuZWwgRnV6emluZyoqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGNvbmZpZ3VyaW5nIGFuZCB3aHkuIEZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSd2ZSBnb3QgbXkgbGlzdDogYFNDSEVEX0NMQVNTX0VYVGAsIGBDR1JPVVBTYCwgYENHUk9VUF9TQ0hFRGAsIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0pJVGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgdGhlIGZlYXR1cmVzIGFuZCBpbnN0cnVtZW50YXRpb24gSSBuZWVkIGZvciBlZmZlY3RpdmUgZnV6emluZywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhcmVhcyByZWxhdGVkIHRvIHNjaGVkdWxpbmcsIGNncm91cHMsIGFuZCBCUEYuIEVuYWJsaW5nIHRoZSBCVEYgZGF0YSB3aWxsIGdpdmUgYmV0dGVyIGNvdmVyYWdlIGluIHRyYWNpbmcgYW5kIGFuYWx5c2lzLiBCUEYgaXMgY2VudHJhbCwgb2YgY291cnNlLCB0byBob29raW5nIGludG8gdGhlIGtlcm5lbCBhbmQgb2JzZXJ2aW5nIGl0cyBiZWhhdmlvdXIuXG5cbk5vdywgcmVnYXJkaW5nIHNwZWNpZmljIHRhcmdldHMsIEknbSBmb2N1c2luZyBvbiBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgdGhlIHBvaW50IHdoZXJlIHdlIHNlZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2NoZWR1bGVyIGFuZCBjZ3JvdXAncyBDUFUgaWRsZSBzdGF0ZS4gVGhlIGNoYW5nZSBoZXJlIGlzIGNoZWNraW5nIHdoZXRoZXIgdGhlIGBzY2hlZF9pZGxlYCBoYXMgY2hhbmdlZCBiZWZvcmUgaW52b2tpbmcgdGhlIEJQRiBjYWxsYmFjay4gVGhpcyBpcyBvdXIgYXJlYSBvZiBpbnRlcmVzdCwgdGhlIHBvdGVudGlhbCBmb3IgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ci4gVGhlIGNncm91cCBjcHUuaWRsZSBrbm9iIHByb3ZpZGVzIGFjY2VzcyB0byB0aGlzIGZ1bmN0aW9uIHNvIHdlIGhhdmUgYSB0YXJnZXRhYmxlIGtub2IgZm9yIHRoaXMuXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgSSdtIGNvbmZpZGVudCB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYmUgZnV6emluZyAoV29ydGhGdXp6aW5nOiBgdHJ1ZWApLlxuKiAgIE15IG1haW4gdGFyZ2V0IGlzIHRoZSBgc2N4X2dyb3VwX3NldF9pZGxlYCBmdW5jdGlvbiAoRm9jdXNTeW1ib2xzOiBgW1wic2N4X2dyb3VwX3NldF9pZGxlXCJdYCkuXG4qICAgVG8gZW5hYmxlIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eSBhbmQgb2JzZXJ2YWJpbGl0eSwgdGhlIGZvbGxvd2luZyBjb25maWdzIGFyZSBzZXQgKEVuYWJsZUNvbmZpZ3M6IGBbXCJTQ0hFRF9DTEFTU19FWFRcIiwgXCJDR1JPVVBfU0NIRURcIiwgXCJDR1JPVVBTXCIsIFwiQlBGX1NZU0NBTExcIiwgXCJCUEZfSklUXCIsIFwiREVCVUdfSU5GT19CVEZcIl1gKS5cbiogICBNeSByZWFzb25pbmcgaXMgY29uY2lzZTogV2Ugd2FudCB0byB0cmlnZ2VyIGEgQlBGIGNhbGxiYWNrIHJlbGF0ZWQgdG8gdGhlIGNncm91cCBjcHUuaWRsZSBrbm9iIHdoaWNoIHdlIGNhbiByZWFjaCBieSBjaGFuZ2luZyBgc2N4X2dyb3VwX3NldF9pZGxlYC5cblxuQWxyaWdodCwgSSdtIGhhcHB5IHdpdGggdGhpcyBhc3Nlc3NtZW50LiBMZXQncyBleGVjdXRlIGBzZXQtcmVzdWx0c2AgYW5kIGdldCB0aGlzIHJvbGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDY0LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo0My4xNjY1NzgzNTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTExOTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIixcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNjeF9ncm91cF9zZXRfaWRsZSgpIGluIHRoZSBleHRlbnNpYmxlIHNjaGVkdWxlciBjbGFzcyAoc2NoZWRfZXh0KSB0byBhdm9pZCBpbnZva2luZyB0aGUgY2dyb3VwX3NldF9pZGxlIEJQRiBjYWxsYmFjayBpZiB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgaGFzbid0IGNoYW5nZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwIENQVSBjb250cm9sbGVyIGludGVyZmFjZSAoZS5nLiBjcHUuaWRsZSBrbm9iKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DTEFTU19FWFRcIixcbiAgICBcIkNHUk9VUF9TQ0hFRFwiLFxuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N4X2dyb3VwX3NldF9pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2N4X2dyb3VwX3NldF9pZGxlKCkgaW4gdGhlIGV4dGVuc2libGUgc2NoZWR1bGVyIGNsYXNzIChzY2hlZF9leHQpIHRvIGF2b2lkIGludm9raW5nIHRoZSBjZ3JvdXBfc2V0X2lkbGUgQlBGIGNhbGxiYWNrIGlmIHRoZSB0YXNrIGdyb3VwJ3MgaWRsZSBzdGF0ZSBoYXNuJ3QgY2hhbmdlZC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBjZ3JvdXAgQ1BVIGNvbnRyb2xsZXIgaW50ZXJmYWNlIChlLmcuIGNwdS5pZGxlIGtub2IpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo0My4yNDE3MDQyNzhaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTMyMTkyNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6NDMuMjQyMjIwMTk4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE1MzE2NzMwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzY3hfZ3JvdXBfc2V0X2lkbGUoKWAgaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHRvIGNoZWNrIGB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZWAgYmVmb3JlIGludm9raW5nIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBzY2hlZHVsZXIgb3BlcmF0aW9uIGNhbGxiYWNrLCBhdm9pZGluZyByZWR1bmRhbnQgY2FsbGJhY2tzIHdoZW4gdGhlIGlkbGUgc3RhdGUgZG9lcyBub3QgY2hhbmdlLlxcblxcbmB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGEgYm9vbGVhbiBtZW1iZXIgb2YgYHN0cnVjdCB0YXNrX2dyb3VwYCB0aGF0IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgc2N4X3RnX2luaXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGhlYXAgb3Igc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzdhM2EwZDQwNDI2NWM4NmRiNjMxZjdiMGRjNzgxMTNkNjUwYzUyNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDE6NTU6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuaW5kZXggODA0MWM4N2EzNTYyZS4uOGIzNjI1MTA3YjcyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbkBAIC00OTMzLDcgKzQ5MzMsOCBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcbiBcdHBlcmNwdV9kb3duX3JlYWQoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuIFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xuIFxuLVx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSlcbitcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcbiBcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU2OjQzLjI0MjIyMTY4OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjI2OTkwNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBQYXRjaCBBbmFseXNpcyBcdTAwMjYgQ29udGV4dCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHRob3JvdWdobHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCB3aGljaCBJJ20gcHJldHR5IHN1cmUgd2lsbCBiZSBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0OTMzLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlIHNjaGVkdWxlcidzIGV4dGVuc2lvbnMuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGluc3BlY3QgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbGluZS4gTXkgcHJlZmVycmVkIHRvb2xzIGZvciB0aGlzIGtpbmQgb2YgcXVpY2sgaW52ZXN0aWdhdGlvbiBhcmUgZWl0aGVyIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbi4gSSdsbCByZWFjaCBmb3Igd2hpY2hldmVyIG9uZSBpcyBmYXN0ZXN0IHRvIGdldCBtZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZ2l2ZSBtZSBhIGZlZWwgZm9yIHRoZSBzaXR1YXRpb24uIEl0J3MgYWJvdXQgZXN0YWJsaXNoaW5nIGEgc29saWQgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBnbyBhbnkgZGVlcGVyLiBJIGV4cGVjdCB0aGUgY29udGV4dCB3aWxsIHJldmVhbCB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBidWlsZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDE6NTY6NDcuODY5MjE0NTczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc2NoZWQvZXh0L2V4dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5MjA6XFx0XFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBzY2ggXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0KSBcXHUwMDI2XFx1MDAyNlxcbjQ5MjE6XFx0XFx0ICAgIHRnLVxcdTAwM2VzY3gud2VpZ2h0ICE9IHdlaWdodClcXG40OTIyOlxcdFxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF93ZWlnaHQsIE5VTEwsIHRnX2NncnAodGcpLCB3ZWlnaHQpO1xcbjQ5MjM6XFx0XFxuNDkyNDpcXHRcXHR0Zy1cXHUwMDNlc2N4LndlaWdodCA9IHdlaWdodDtcXG40OTI1OlxcdFxcbjQ5MjY6XFx0XFx0cGVyY3B1X3VwX3JlYWQoXFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcXG40OTI3OlxcdH1cXG40OTI4OlxcdFxcbjQ5Mjk6XFx0dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXFxuNDkzMDpcXHR7XFxuNDkzMTpcXHRcXHRzdHJ1Y3Qgc2N4X3NjaGVkICpzY2g7XFxuNDkzMjpcXHRcXG40OTMzOlxcdFxcdHBlcmNwdV9kb3duX3JlYWQoXFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcXG40OTM0OlxcdFxcdHNjaCA9IHNjeF90Z19rbm9iX3NjaGVkKHRnKTtcXG40OTM1OlxcdFxcbjQ5MzY6XFx0XFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBzY2ggXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXFx1MDAyNlxcdTAwMjZcXG40OTM3OlxcdFxcdCAgICB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcXG40OTM4OlxcdFxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XFxuNDkzOTpcXHRcXG40OTQwOlxcdFxcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgKi9cXG40OTQxOlxcdFxcdHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XFxuNDk0MjpcXHRcXG40OTQzOlxcdFxcdHBlcmNwdV91cF9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuNDk0NDpcXHR9XFxuNDk0NTpcXHRcXG40OTQ2OlxcdHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLFxcbjQ5NDc6XFx0XFx0XFx0XFx0ICAgICB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cylcXG40OTQ4OlxcdHtcXG40OTQ5OlxcdFxcdHN0cnVjdCBzY3hfc2NoZWQgKnNjaDtcXG40OTUwOlxcdFxcbjQ5NTE6XFx0XFx0cGVyY3B1X2Rvd25fcmVhZChcXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xcbjQ5NTI6XFx0XFx0c2NoID0gc2N4X3RnX2tub2Jfc2NoZWQodGcpO1xcbjQ5NTM6XFx0XFxuNDk1NDpcXHRcXHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IHNjaCBcXHUwMDI2XFx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9iYW5kd2lkdGgpIFxcdTAwMjZcXHUwMDI2XFxuNDk1NTpcXHRcXHQgICAgKHRnLVxcdTAwM2VzY3guYndfcGVyaW9kX3VzICE9IHBlcmlvZF91cyB8fFxcbjQ5NTY6XFx0XFx0ICAgICB0Zy1cXHUwMDNlc2N4LmJ3X3F1b3RhX3VzICE9IHF1b3RhX3VzIHx8XFxuNDk1NzpcXHRcXHQgICAgIHRnLVxcdTAwM2VzY3guYndfYnVyc3RfdXMgIT0gYnVyc3RfdXMpKVxcbjQ5NTg6XFx0XFx0XFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCwgTlVMTCxcXG40OTU5OlxcdFxcdFxcdFxcdCAgICB0Z19jZ3JwKHRnKSwgcGVyaW9kX3VzLCBxdW90YV91cywgYnVyc3RfdXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo0Ny44Njk3NjUwNDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQyNzQxMDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0Zy1cdTAwM2VzY3ggYW5kIElkbGUgR3JvdXAgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYHRnLVx1MDAzZXNjeGAsIHNwZWNpZmljYWxseSBob3cgaXQncyBpbml0aWFsaXplZCBhbmQgdGhlIHJvbGUgb2YgYHNjeF9ncm91cF9zZXRfaWRsZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHRnLVx1MDAzZXNjeGAgYW5kIGZvbGxvdyB0aGUgdXNhZ2Ugb2YgYHNjeF9ncm91cF9zZXRfaWRsZWAuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdvb2Qgb2xkLWZhc2hpb25lZCBjb2RlIHNlYXJjaC4gSSdsbCBsb29rIGZvciBpbnN0YW5jZXMgb2YgYHNjaGVkX2lkbGVgIGJlY2F1c2UgdGhhdCdzIG9mdGVuIHRpZWQgdG8gaWRsZSBncm91cCBtYW5hZ2VtZW50LiBBbHRlcm5hdGl2ZWx5LCBJJ2xsIHNlYXJjaCBmb3IgYHNjeF9ncm91cF9zZXRfaWRsZWAgZGlyZWN0bHksIGFzIHRoYXQgc2hvdWxkIGdpdmUgbWUgYSBtb3JlIHRhcmdldGVkIHZpZXcgb2YgaXRzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGNvZGViYXNlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGlkbGUgZ3JvdXBzIGFyZSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo1Mi4yOTcxNzY5NDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODczMDgxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N4X2dyb3VwX3NldF9pZGxlfHNjaGVkX2lkbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJzdD0xMjQ9cmVsYXRlZCBoYW5ncy4gSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzYWdlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3QtMTM1LSBDUFU6MCB0czo1OTE0NjgwIGMwMzllOWEwICBjMDM5ZWNmMCAgY3B1aWRsZV9lbnRlcl9mcmVlemUgXFx1MDAzYy0gY3B1aWRsZV9lbnRlcl9zdGF0ZSsweDMwNC8weDMxNFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvcHN0b3JlLWJsay5yc3Q6MTM2OiBDUFU6MCB0czo1OTE0NjgxIGMwMDYzODcwICBjMDM5ZWEzMCAgc2NoZWRfaWRsZV9zZXRfc3RhdGUgXFx1MDAzYy0gY3B1aWRsZV9lbnRlcl9zdGF0ZSsweDQ0LzB4MzE0XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wc3RvcmUtYmxrLnJzdC0xMzctIENQVToxIHRzOjU5MTY3MjAgYzAxNjBmNTkgIGMwMTVlZTA0ICBrZXJuZnNfdW5tYXBfYmluX2ZpbGUgXFx1MDAzYy0gX19rZXJuZnNfcmVtb3ZlKzB4MTQwLzB4MjA0XFxuLS1cXG5OZXh0L21lcmdlLmxvZz00MDQ4PU1lcmdlIG1hZGUgYnkgdGhlICdvcnQnIHN0cmF0ZWd5Llxcbi0tXFxuTmV4dC9tZXJnZS5sb2ctNDA1MC0gMSBmaWxlIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDg1IGRlbGV0aW9ucygtKVxcbk5leHQvbWVyZ2UubG9nOjQwNTE6TWVyZ2luZyBzY2hlZC1leHQvZm9yLW5leHQgKDE0ZWJhNmQ5OGNhYmUgc2NoZWRfZXh0OiBSZW5hbWUgdGctXFx1MDAzZXNjeC5pZGxlIHRvIHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSlcXG5OZXh0L21lcmdlLmxvZy00MDUyLSQgZ2l0IG1lcmdlIC1tIE1lcmdlIGJyYW5jaCAnZm9yLW5leHQnIG9mIGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RqL3NjaGVkX2V4dC5naXQgc2NoZWQtZXh0L2Zvci1uZXh0XFxuLS1cXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jPTIxNz1ub2luc3RyIGludCBjcHVpZGxlX2VudGVyX3N0YXRlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYy0yNDUtXFx0LyogVGFrZSBub3RlIG9mIHRoZSBwbGFubmVkIGlkbGUgc3RhdGUuICovXFxuZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYzoyNDY6XFx0c2NoZWRfaWRsZV9zZXRfc3RhdGUodGFyZ2V0X3N0YXRlKTtcXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jLTI0Ny1cXG4tLVxcbmRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMtMjg1LVxcdC8qIFRoZSBjcHUgaXMgbm8gbG9uZ2VyIGlkbGUgb3IgYWJvdXQgdG8gZW50ZXIgaWRsZS4gKi9cXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jOjI4NjpcXHRzY2hlZF9pZGxlX3NldF9zdGF0ZShOVUxMKTtcXG5kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jLTI4Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1aWRsZS5oPTI2NT1zdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRsZV91c2VfZGVlcGVzdF9zdGF0ZSh1NjQgbGF0ZW5jeV9saW1pdF9ucylcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1aWRsZS5oLTI3MC0vKiBrZXJuZWwvc2NoZWQvaWRsZS5jICovXFxuaW5jbHVkZS9saW51eC9jcHVpZGxlLmg6MjcxOmV4dGVybiB2b2lkIHNjaGVkX2lkbGVfc2V0X3N0YXRlKHN0cnVjdCBjcHVpZGxlX3N0YXRlICppZGxlX3N0YXRlKTtcXG5pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaC0yNzItZXh0ZXJuIHZvaWQgZGVmYXVsdF9pZGxlX2NhbGwodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oPTMwND1zdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaC0zMjUtXFx0dTY0XFx0XFx0XFx0YndfYnVyc3RfdXM7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaDozMjY6XFx0Ym9vbFxcdFxcdFxcdHNjaGVkX2lkbGU7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaC0zMjctI2VuZGlmXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTY3NjY9c3RhdGljIGlubGluZSB2b2lkIHByb3h5X3NldF90YXNrX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY3ODAtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo2NzgxOnN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpwcm94eV9yZXNjaGVkX2lkbGUoc3RydWN0IHJxICpycSlcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY3ODIte1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz02NzkwPXN0YXRpYyB2b2lkIHByb3h5X2RlYWN0aXZhdGUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vcilcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjc5Ny1cXHQgKiBCZWNhdXNlIHdlIGdvdCBkb25vciBmcm9tIHBpY2tfbmV4dF90YXNrKCksIGl0IGlzICpjcnVjaWFsKlxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njc5ODpcXHQgKiB0aGF0IHdlIGNhbGwgcHJveHlfcmVzY2hlZF9pZGxlKCkgYmVmb3JlIHdlIGRlYWN0aXZhdGUgaXQuXFxua2VybmVsL3NjaGVkL2NvcmUuYy02Nzk5LVxcdCAqIEFzIG9uY2Ugd2UgZGVhY3RpdmF0ZSBkb25vciwgZG9ub3ItXFx1MDAzZW9uX3JxIGlzIHNldCB0byB6ZXJvLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02ODA0LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NjgwNTpcXHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjgwNi1cXHRibG9ja190YXNrKHJxLCBkb25vciwgc3RhdGUpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz02ODQ5PXN0YXRpYyB2b2lkIHByb3h5X21pZ3JhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02ODY0LVxcdCAqXFxua2VybmVsL3NjaGVkL2NvcmUuYzo2ODY1OlxcdCAqIFNvIGNhbGwgcHJveHlfcmVzY2hlZF9pZGxlKCkgdG8gZHJvcCB0aGUgcnEtXFx1MDAzZWRvbm9yIHJlZmVyZW5jZXNcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY4NjYtXFx0ICogYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGxvY2suXFxua2VybmVsL3NjaGVkL2NvcmUuYy02ODY3LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njg2ODpcXHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjg2OS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NjkwNz1maW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZilcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk2Ny1cXHRcXHRcXHRpZiAoY3Vycl9pbl9jaGFpbilcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjY5Njg6XFx0XFx0XFx0XFx0cmV0dXJuIHByb3h5X3Jlc2NoZWRfaWRsZShycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy02OTY5LVxcdFxcdFxcdF9fY2xlYXJfdGFza19ibG9ja2VkX29uKHAsIE5VTEwpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy02OTc5LVxcdFxcdFxcdGlmIChjdXJyX2luX2NoYWluKVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njk4MDpcXHRcXHRcXHRcXHRyZXR1cm4gcHJveHlfcmVzY2hlZF9pZGxlKHJxKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY5ODEtXFx0XFx0XFx0Z290byBtaWdyYXRlX3Rhc2s7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY5OTItXFx0XFx0XFx0ICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzo2OTkzOlxcdFxcdFxcdHJldHVybiBwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjk5NC1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTcwMjktXFx0XFx0XFx0ICovXFxua2VybmVsL3NjaGVkL2NvcmUuYzo3MDMwOlxcdFxcdFxcdHJldHVybiBwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzAzMS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU5PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY1LVxcdGlmICghcmV0KVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTAyNjY6XFx0XFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ2ODI9dm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2ODYtXFx0dGctXFx1MDAzZXNjeC5id19xdW90YV91cyA9IFJVTlRJTUVfSU5GO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDY4NzpcXHR0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgPSBmYWxzZTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2ODgtfVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NzQ0PWludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc2OS1cXHRcXHRcXHRcXHQgIC5id19idXJzdF91cyA9IHRnLVxcdTAwM2VzY3guYndfYnVyc3RfdXMsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NzcwOlxcdFxcdFxcdFxcdCAgLnNjaGVkX2lkbGUgPSB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzEtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5MTM9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgd2VpZ2h0KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI4LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkyOTp2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MzAte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTM2LVxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTM3OlxcdCAgICB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgIT0gaWRsZSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MzgtXFx0XFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk0MC1cXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTQxOlxcdHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTQyLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01MTcxPXN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE5MS1cXHRcXHRcXHRcXHQuYndfYnVyc3RfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5MjpcXHRcXHRcXHRcXHQuc2NoZWRfaWRsZSA9IHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxOTMtXFx0XFx0XFx0fTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODE9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODMtdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjkyOnN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05My1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cykge31cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0yNTQ9c3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNjMtXFx0Lyogd2hldGhlciB0aGUgY2dyb3VwIGlzIGNvbmZpZ3VyZWQgU0NIRURfSURMRSB2aWEgY3B1LmlkbGUgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjY0OlxcdGJvb2xcXHRcXHRcXHRzY2hlZF9pZGxlO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNjUtfTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTM0OT1zdGF0aWMgczMyIHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNjMtXFx0XFx0XFx0LmJ3X2J1cnN0X3VzID0gdGctXFx1MDAzZXNjeC5id19idXJzdF91cyxcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzNjQ6XFx0XFx0XFx0LnNjaGVkX2lkbGUgPSB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUsXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzY1LVxcdFxcdH07XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jPTE0Mzg9c3RhdGljIHZvaWQgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjctXFx0XFx0XFx0LmJ3X2J1cnN0X3VzID0gdGctXFx1MDAzZXNjeC5id19idXJzdF91cyxcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjE0Njg6XFx0XFx0XFx0LnNjaGVkX2lkbGUgPSB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUsXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDY5LVxcdFxcdH07XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTc4NzM9c3RhdGljIGlubGluZSB2b2lkIGNoZWNrX3VwZGF0ZV9vdmVydXRpbGl6ZWRfc3RhdHVzKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4ODQtLyogUnVucXVldWUgb25seSBoYXMgU0NIRURfSURMRSB0YXNrcyBlbnF1ZXVlZCAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg4NTpzdGF0aWMgaW50IHNjaGVkX2lkbGVfcnEoc3RydWN0IHJxICpycSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4ODYte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy03ODkwLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5MTpzdGF0aWMgaW50IGNob29zZV9zY2hlZF9pZGxlX3JxKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTc4OTIte1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5MzpcXHRyZXR1cm4gc2NoZWRfaWRsZV9ycShycSkgXFx1MDAyNlxcdTAwMjYgIXRhc2tfaGFzX2lkbGVfcG9saWN5KHApO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzg5NC19XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTc4OTY9c3RhdGljIGludCBjaG9vc2VfaWRsZV9jcHUoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy03ODk4LVxcdHJldHVybiBhdmFpbGFibGVfaWRsZV9jcHUoY3B1KSB8fFxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Nzg5OTpcXHQgICAgICAgY2hvb3NlX3NjaGVkX2lkbGVfcnEoY3B1X3JxKGNwdSksIHApO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzkwMC19XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTgxMTQ9c3RhdGljIGJvb2wgX19kZXF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxMTctXFx0c3RydWN0IGNmc19ycSAqY2ZzX3JxID0gXFx1MDAyNnJxLVxcdTAwM2VjZnM7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzo4MTE4OlxcdGJvb2wgd2FzX3NjaGVkX2lkbGUgPSBzY2hlZF9pZGxlX3JxKHJxKTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTgxMTktXFx0Ym9vbCB0YXNrX3NsZWVwID0gZmxhZ3MgXFx1MDAyNiBERVFVRVVFX1NMRUVQO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04MTU5LVxcdC8qIGJhbGFuY2UgZWFybHkgdG8gcHVsbCBoaWdoIHByaW9yaXR5IHRhc2tzICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo4MTYwOlxcdGlmICh1bmxpa2VseSghd2FzX3NjaGVkX2lkbGUgXFx1MDAyNlxcdTAwMjYgc2NoZWRfaWRsZV9ycShycSkpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODE2MS1cXHRcXHRycS1cXHUwMDNlbmV4dF9iYWxhbmNlID0gamlmZmllcztcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9ODQ1MD1zY2hlZF9iYWxhbmNlX2ZpbmRfZHN0X2dyb3VwX2NwdShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB0aGlzX2NwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODQ2OS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg0NzA6XFx0XFx0aWYgKGNob29zZV9zY2hlZF9pZGxlX3JxKHJxLCBwKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTg0NzEtXFx0XFx0XFx0cmV0dXJuIGk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTg2MjU9c3RhdGljIGludCBzZWxlY3RfaWRsZV9jb3JlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmUsIHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmlkbGVfY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy04NjMzLVxcdFxcdFxcdGlmICgqaWRsZV9jcHUgPT0gLTEpIHtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjg2MzQ6XFx0XFx0XFx0XFx0aWYgKGNob29zZV9zY2hlZF9pZGxlX3JxKGNwdV9ycShjcHUpLCBwKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtODYzNS1cXHRcXHRcXHRcXHQgICAgY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdXMpKSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEzOTI2PXN0YXRpYyB2b2lkIHNjaGVkX2JhbGFuY2VfZG9tYWlucyhzdHJ1Y3QgcnEgKnJxLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5MjktXFx0aW50IGNwdSA9IHJxLVxcdTAwM2VjcHU7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMzkzMDpcXHRpbnQgYnVzeSA9IGlkbGUgIT0gQ1BVX0lETEUgXFx1MDAyNlxcdTAwMjYgIXNjaGVkX2lkbGVfcnEocnEpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5MzEtXFx0dW5zaWduZWQgbG9uZyBpbnRlcnZhbDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NjctXFx0XFx0XFx0XFx0aWRsZSA9IGlkbGVfY3B1KGNwdSk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMzk2ODpcXHRcXHRcXHRcXHRidXN5ID0gIWlkbGUgXFx1MDAyNlxcdTAwMjYgIXNjaGVkX2lkbGVfcnEocnEpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTM5NjktXFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL3NjaGVkL2lkbGUuYz0xNj1leHRlcm4gY2hhciBfX2NwdWlkbGVfdGV4dF9zdGFydFtdLCBfX2NwdWlkbGVfdGV4dF9lbmRbXTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9pZGxlLmMtMTgtLyoqXFxua2VybmVsL3NjaGVkL2lkbGUuYzoxOTogKiBzY2hlZF9pZGxlX3NldF9zdGF0ZSAtIFJlY29yZCBpZGxlIHN0YXRlIGZvciB0aGUgY3VycmVudCBDUFUuXFxua2VybmVsL3NjaGVkL2lkbGUuYy0yMC0gKiBAaWRsZV9zdGF0ZTogU3RhdGUgdG8gcmVjb3JkLlxcbmtlcm5lbC9zY2hlZC9pZGxlLmMtMjEtICovXFxua2VybmVsL3NjaGVkL2lkbGUuYzoyMjp2b2lkIHNjaGVkX2lkbGVfc2V0X3N0YXRlKHN0cnVjdCBjcHVpZGxlX3N0YXRlICppZGxlX3N0YXRlKVxcbmtlcm5lbC9zY2hlZC9pZGxlLmMtMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwMTo1Njo1NC41ODQ0OTA0MzRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxODkzNzkyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2NoZWR1bGVyIEV4dGVuc2lvbiBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhbiBvcHRpbWl6YXRpb24uIEN1cnJlbnRseSwgdGhlIGNvZGUsIHdpdGhpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AsIGNhbGxzIHRoZSBgY2dyb3VwX3NldF9pZGxlYCBvcGVyYXRpb24sIGJ1dCBub3csIGl0IGhhcyBhZGRlZCBhbiBhZGRpdGlvbmFsIGNoZWNrLCBlbnN1cmluZyB0aGUgY2FsbGJhY2sgaXNuJ3QgY2FsbGVkIGlmIHRoZSBpZGxlIHN0YXRlIGhhc24ndCBhY3R1YWxseSBjaGFuZ2VkLiBTcGVjaWZpY2FsbHksIGJlZm9yZSB0aGUgY2hhbmdlLCBpdCBkaWQgdGhpczpcblxuYGBgY1xuXHRpZiAoc2N4X2Nncm91cF9lbmFibGVkIFx1MDAyNlx1MDAyNiBzY2ggXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUpKVxuXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG5gYGBcblxuYW5kIGFmdGVyIHRoZSBjaGFuZ2UsIHRoZSBhZGRpdGlvbiBvZiB0aGUgY2hlY2sgbm93IGlzOlxuXG5gYGBjXG5cdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkgXHUwMDI2XHUwMDI2XG5cdCAgICB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlKVxuXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG5gYGBcblxuVGhpcyBwcmV2ZW50cyB0aGUgY2FsbGJhY2sgZnJvbSBiZWluZyBjYWxsZWQgaWYgdGhlIGlkbGUgc3RhdGUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIGB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZWAuIEkgY2FuIHNlZSB0aGUgaW50ZW50OiByZWR1Y2UgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIEl0J3MgYSBnb29kIHByYWN0aWNlLCBhdm9pZGluZyByZWR1bmRhbnQgd29yaywgYW5kIGltcHJvdmluZyBwZXJmb3JtYW5jZSBzbGlnaHRseS5cblxuTm93LCBhIGtleSBjb25jZXJuIGluIHRoZXNlIHR5cGVzIG9mIGNoYW5nZXMgaXMgbWVtb3J5IHNhZmV0eSBhbmQgcG9zc2libGUgaW5mb3JtYXRpb24gbGVha3MuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbmV3IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBDaGVja2luZyBpbiBgc2N4X3RnX2luaXRgLCBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYDpcblxuYGBgY1xudm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG57XG4uLi5cblx0dGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7XG5cdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gZmFsc2U7XG59XG5gYGBcblxuVGhhdCdzIGdvb2QuIEl0J3MgaW5pdGlhbGl6ZWQgb24gdGFzayBncm91cCBpbml0aWFsaXphdGlvbi5cblxuU28sIGxldCdzIGFuYWx5emUgdGhlIHBvdGVudGlhbCByaXNrczpcblxuKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/KiogTm8uIGB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC5cbiogICAqKk5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBkYXRhIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZT8qKiBOb3BlLiBUaGUgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG4qICAgKipVbmluaXRpYWxpemVkIGJ1ZmZlcnMgb3IgcGFkZGluZyBzZW50IGFjcm9zcyB0aGUgdXNlci9rZXJuZWwgYm91bmRhcnk/KiogTm90IGF0IGFsbC4gTm8gc3VjaCB0aGluZyBpcyBoYXBwZW5pbmcuXG4qICAgKipVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLCBiZWNhdXNlIGB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZWAgaXMgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIG9wdGltaXphdGlvbiwgbWluaW1pemluZyB0aGUgbmVlZCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdoZW4gaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNhbGxlZC5cblxuR2l2ZW4gYWxsIG9mIHRoYXQsIGxldCdzIHRyaXBsZS1jaGVjayBhZ2FpbnN0IG15IGNyaXRlcmlhIGZvciBgS01TQU5gOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlPyoqIE5vLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBgdGctXHUwMDNlc2N4LnNjaGVkX2lkbGVgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBzY3hfdGdfaW5pdCgpYC5cbjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/KiogTm8uXG40LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNhbiBsZWFkIHRvIGFjY2VzcyBvZiB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLlxuXG5BbHJpZ2h0LiBObyBLTVNBTiBuZWVkZWQgaGVyZS4gVGhpcyBib2lscyBkb3duIHRvIGEgbG9naWMgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUga2VybmVsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEknZCBhc3Nlc3MgdGhhdCBzdGFuZGFyZCBzYW5pdGl6ZXJzLCBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLCBhcmUgbW9yZSB0aGFuIHN1ZmZpY2llbnQuIEtNU0FOIGlzIG92ZXJraWxsIGZvciB0aGlzIGtpbmQgb2YgY2hhbmdlLlxuTm93LCByZWFkeSB0byBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzIsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDAxOjU3OjA0Ljc3Mzg3MTg1OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNjeF9ncm91cF9zZXRfaWRsZSgpYCBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgdG8gY2hlY2sgYHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSAhPSBpZGxlYCBiZWZvcmUgaW52b2tpbmcgdGhlIGBjZ3JvdXBfc2V0X2lkbGVgIHNjaGVkdWxlciBvcGVyYXRpb24gY2FsbGJhY2ssIGF2b2lkaW5nIHJlZHVuZGFudCBjYWxsYmFja3Mgd2hlbiB0aGUgaWRsZSBzdGF0ZSBkb2VzIG5vdCBjaGFuZ2UuXFxuXFxuYHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZWAgaXMgYSBib29sZWFuIG1lbWJlciBvZiBgc3RydWN0IHRhc2tfZ3JvdXBgIHRoYXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGBzY3hfdGdfaW5pdCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgaGVhcCBvciBzdGFjayBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBhbnkga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2N4X2dyb3VwX3NldF9pZGxlKClgIGluIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCB0byBjaGVjayBgdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlICE9IGlkbGVgIGJlZm9yZSBpbnZva2luZyB0aGUgYGNncm91cF9zZXRfaWRsZWAgc2NoZWR1bGVyIG9wZXJhdGlvbiBjYWxsYmFjaywgYXZvaWRpbmcgcmVkdW5kYW50IGNhbGxiYWNrcyB3aGVuIHRoZSBpZGxlIHN0YXRlIGRvZXMgbm90IGNoYW5nZS5cXG5cXG5gdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlYCBpcyBhIGJvb2xlYW4gbWVtYmVyIG9mIGBzdHJ1Y3QgdGFza19ncm91cGAgdGhhdCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHNjeF90Z19pbml0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBoZWFwIG9yIHN0YWNrIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[1] Phase: Succeeded StartedAt: 2026-09-02 01:57:16 +0000 UTC FinishedAt: 2026-09-02 01:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 01:57:16 +0000 UTC FinishedAt: 2026-09-02 01:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2] Phase: Succeeded StartedAt: 2026-09-02 01:57:16 +0000 UTC FinishedAt: 2026-09-02 05:36:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 01:57:16 +0000 UTC FinishedAt: 2026-09-02 05:36:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 01:57:16 +0000 UTC FinishedAt: 2026-09-02 01:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 01:57:16 +0000 UTC FinishedAt: 2026-09-02 01:57:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-convert-artifact-955244853/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 01:57:26 +0000 UTC FinishedAt: 2026-09-02 02:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 01:57:26 +0000 UTC FinishedAt: 2026-09-02 02:13:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*413ca465-4ddd-4c46-a388-98fe21581832,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-convert-artifact-955244853/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f67e902e-6e6b-4814-af25-893dd46bc532", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-2388499739/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 01:57:26 +0000 UTC FinishedAt: 2026-09-02 02:13:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*413ca465-4ddd-4c46-a388-98fe21581832,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-convert-artifact-955244853/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f67e902e-6e6b-4814-af25-893dd46bc532", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-2388499739/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 02:13:58 +0000 UTC FinishedAt: 2026-09-02 02:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 02:13:58 +0000 UTC FinishedAt: 2026-09-02 02:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 02:13:58 +0000 UTC FinishedAt: 2026-09-02 02:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 02:13:58 +0000 UTC FinishedAt: 2026-09-02 02:14:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-convert-artifact-2718388368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 02:14:08 +0000 UTC FinishedAt: 2026-09-02 02:16:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 02:14:08 +0000 UTC FinishedAt: 2026-09-02 02:15:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f67e902e-6e6b-4814-af25-893dd46bc532,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-2388499739/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 02:16:01 +0000 UTC FinishedAt: 2026-09-02 02:16:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 02:16:01 +0000 UTC FinishedAt: 2026-09-02 02:16:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 02:16:01 +0000 UTC FinishedAt: 2026-09-02 02:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 02:16:01 +0000 UTC FinishedAt: 2026-09-02 02:33:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*413ca465-4ddd-4c46-a388-98fe21581832,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-convert-artifact-2718388368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "23663216-052c-475c-8638-749329f070c6", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-3029159180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 02:16:01 +0000 UTC FinishedAt: 2026-09-02 02:33:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*413ca465-4ddd-4c46-a388-98fe21581832,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-convert-artifact-2718388368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "23663216-052c-475c-8638-749329f070c6", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-3029159180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 02:33:35 +0000 UTC FinishedAt: 2026-09-02 02:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 02:33:35 +0000 UTC FinishedAt: 2026-09-02 02:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 02:33:35 +0000 UTC FinishedAt: 2026-09-02 02:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 02:33:35 +0000 UTC FinishedAt: 2026-09-02 02:35:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23663216-052c-475c-8638-749329f070c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-3029159180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 02:35:29 +0000 UTC FinishedAt: 2026-09-02 05:36:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 02:35:29 +0000 UTC FinishedAt: 2026-09-02 02:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 02:35:29 +0000 UTC FinishedAt: 2026-09-02 02:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 02:35:30 +0000 UTC FinishedAt: 2026-09-02 05:36:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f67e902e-6e6b-4814-af25-893dd46bc532,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23663216-052c-475c-8638-749329f070c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-2388499739/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-3029159180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 02:35:30 +0000 UTC FinishedAt: 2026-09-02 02:35:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 02:35:30 +0000 UTC FinishedAt: 2026-09-02 02:35:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-convert-artifact-1085771401/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 02:35:30 +0000 UTC FinishedAt: 2026-09-02 02:35:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 02:35:41 +0000 UTC FinishedAt: 2026-09-02 05:36:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8cqbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8b72f6626dc39b9e7e82b2721d4f7c3b86286012","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED","CGROUPS","BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"a0010484-bcc7-4824-b30f-8828a34fd62b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 02:35:41 +0000 UTC FinishedAt: 2026-09-02 05:36:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f67e902e-6e6b-4814-af25-893dd46bc532,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23663216-052c-475c-8638-749329f070c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-2388499739/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-build-action-3029159180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8cqbf/series-workflow8cqbf-convert-artifact-1085771401/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}