Name: series-workflownqnsq Phase: Succeeded StartedAt: 2026-08-14 17:12:51 +0000 UTC FinishedAt: 2026-08-14 21:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[0] Phase: Succeeded StartedAt: 2026-08-14 17:12:51 +0000 UTC FinishedAt: 2026-08-14 17:44:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 17:12:51 +0000 UTC FinishedAt: 2026-08-14 17:44:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "409a9bda0429c63f326576cbe6c1f6c4430a8d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "409a9bda0429c63f326576cbe6c1f6c4430a8d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "SMP" ], "series_id": "32e12668-13c6-4f28-8b4f-0afa5fd834fb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_do_misc_fixups" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBXaGVuIGVtaXR0aW5nIHRoZSBgYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gIGluc3RydWN0aW9uIGZvciBwZXItQ1BVIGFkZHJlc3MgcmVzb2x1dGlvbiwgdGhlIEpJVCBpbmNvcnJlY3RseSB1c2VkIGBhZGRfMW1vZGAsIHdoaWNoIHNldHMgdGhlIFJFWC5CIGJpdCBpbnN0ZWFkIG9mIHRoZSBSRVguUiBiaXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKGUuZy4sIFI4LVIxNSkuIFRoaXMgZW5jb2RpbmcgZXJyb3IgY2F1c2VzIHRoZSBDUFUgdG8gaW50ZXJwcmV0IHRoZSBpbnN0cnVjdGlvbiBhcyBgYWRkIHJheCwgZ3M6W3IxMyAmIzQzOyBcdTAwM2NvZmZcdTAwM2VdYCBpbnN0ZWFkIG9mIGBhZGQgcjgsIGdzOltcdTAwM2NvZmZcdTAwM2VdYC5cblxuRXhlY3V0aW5nIHRoaXMgbWFsZm9ybWVkIGluc3RydWN0aW9uIGxlYWRzIHRvIHJlYWRpbmcgbWVtb3J5IGZyb20gYSBzZW1pLWFyYml0cmFyeSBwZXItQ1BVIG9mZnNldCAoY29udHJvbGxlZCBieSBgcjEzYCwgd2hpY2ggbWFwcyB0byBgQlBGX1JFR183YCkgYW5kIGNvcnJ1cHRpbmcgdGhlIGByYXhgIChgQlBGX1JFR18wYCkgcmVnaXN0ZXIuIFRoaXMgcmVzdWx0cyBpbiBlaXRoZXIgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCAoY2F1c2luZyBhIHBhZ2UgZmF1bHQgb3IgdHJpZ2dlcmluZyBLQVNBTikgb3IgYW4gaW5mby1sZWFrIG9mIGFyYml0cmFyeSBwZXItQ1BVIG1lbW9yeS4gXG5cblRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24sIHVzYWdlLCBvciBsZWFraW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gSXQgaXMgYSBwdXJlIEpJVCBtaXNjb21waWxhdGlvbiB0aGF0IGxlYWRzIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCByZWdpc3RlciBjb3JydXB0aW9uLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggS0FTQU4gaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZXN1bHRpbmcgcGFnZSBmYXVsdHMgYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbi4gVGhpcyB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHJlZ2lzdGVyIHVzYWdlIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyB3aGVuIGV4ZWN1dGluZyBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjBiOWQxNjg4ZTU5YjZjMGI3NDBhZjhlNzMxNjgxYTlmYmNkMzUyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDE3OjM5OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTkzNSw3ICYjNDM7MTkzNSw3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0XHRFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbi1cdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtcbiYjNDM7XHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4gXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4gXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgd2hlcmUgdGhlIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9uIChlbWl0dGVkIGZvciBwZXItQ1BVIG1hcCB2YWx1ZSBsb2FkcykgaW5jb3JyZWN0bHkgZW5jb2RlZCB0aGUgUkVYIHByZWZpeCB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciB3YXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIEl0IHVzZWQgYGFkZF8xbW9kYCB3aGljaCBzZXRzIHRoZSBCIGJpdCBpbnN0ZWFkIG9mIGBhZGRfMm1vZGAgd2hpY2ggY29ycmVjdGx5IHNldHMgdGhlIFIgYml0IGZvciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAgaW5zdHJ1Y3Rpb24uIFRoaXMgd291bGQgcmVzdWx0IGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBmYXVsdHMgd2hlbiBleGVjdXRpbmcgSklULWNvbXBpbGVkIEJQRiBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIwYjlkMTY4OGU1OWI2YzBiNzQwYWY4ZTczMTY4MWE5ZmJjZDM1MjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxNzozOTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkOTIwNzcyYWY3ZDVmLi4xYTlmYjUzMGFkYzNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xOTM1LDcgJiM0MzsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICoKIAkJCQlFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCQkJLyogYWRkICZsdDtkc3QmZ3Q7LCBnczpbJmx0O29mZiZndDtdICovCi0JCQkJRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpOwomIzQzOwkJCQlFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7CiAJCQkJRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpOwogCQkJCUVNSVQoKHUzMikodW5zaWduZWQgbG9uZykmYW1wO3RoaXNfY3B1X29mZiwgNCk7CiAjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzcGVjaWZpYyBjaGFuZ2UgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIGFkanVzdG1lbnQgd2l0aGluIHRoZSBgZG9faml0YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBzd2FwcGluZyBvdXQgYEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtgIGZvciBgRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO2AuIFRoaXMgcG9pbnRzIGRpcmVjdGx5IHRvIGFuIHg4NiBCUEYgSklUIGNvbXBpbGVyIOKAkyBhIGRldGFpbCBJIGltbWVkaWF0ZWx5IHBpY2sgdXAsIGNvbnNpZGVyaW5nIG15IGJhY2tncm91bmQuCgpNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIGFib3V0IG1lbW9yeSBhZGRyZXNzaW5nIG9yIHJlZ2lzdGVyIHVzYWdlIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCwgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSB6ZXJvIGJ5dGUgd2l0aGluIGBhZGRfMm1vZGAsIGlzIHRoZSBrZXkuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2UgbWFjcm9zIGFuZCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LiBUaGF0IGAwYCBpbiB0aGUgbmV3IGZ1bmN0aW9uIGNhbGwgbGlrZWx5IHJlcHJlc2VudHMgYW4gaW1tZWRpYXRlIHZhbHVlIOKAkyBwZXJoYXBzIGFuIG9mZnNldCBmb3Igc29tZSBraW5kIG9mIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdoYXQmIzM5O3MgdGhpcyByZWxhdGVkIHRvPyBNYXliZSBhbiB1cGRhdGVkIG1lbW9yeSBhY2Nlc3MgcGF0dGVybj8gVGhlIGV4YWN0IG5hdHVyZSBvZiB0aGlzIGNoYW5nZSBpcyBjcnVjaWFsLCBhbmQgaXQmIzM5O3MgaW1wZXJhdGl2ZSB0aGF0IEkgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkb19qaXRgIHRvIGFzY2VydGFpbiB0aGUgZXhhY3QgY29udGV4dCBhbmQgd2hhdCB0aGlzIHN1YnRsZSBhbHRlcmF0aW9uIGFjaGlldmVzLiBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyBhbmQgbWFjcm8gZXhwYW5zaW9ucyBmcm9tIGhlcmUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2ppdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTY5MT1zdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzI4LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE3Mjk6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MzAtXHRcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5NjI9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAzOS1cdFx0XHRwYWRkaW5nID0gdHJ1ZTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDQwOlx0XHRwcm9nbGVuID0gZG9faml0KGVudiwgcHJvZywgYWRkcnMsIGltYWdlLCByd19pbWFnZSwgb2xkcHJvZ2xlbixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDQxLVx0XHRcdFx0IFx1MDAyNmN0eCwgcGFkZGluZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSklUIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRoZSBjcnV4IG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIHRoZSBgZG9faml0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5LiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSAqaG93KiBgZG9faml0YCBpcyBiZWluZyBjYWxsZWQsIHdoYXQgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IHRoZSBzdWJzZXF1ZW50IGZsb3cgb2YgZXhlY3V0aW9uIGxvb2tzIGxpa2UuIEdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBiZWZvcmUtYW5kLWFmdGVyIHBpY3R1cmUgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaXNzdWVzLCBiZW5lZml0cywgYW5kIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBhY3QuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5hcmd1bWVudCAmIzM0O0ZpcnN0TGluZSYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAmIzM0OzE5MjAmIzM0OywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAmIzM0OzUwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7YXJndW1lbnQgXCYjMzQ7Rmlyc3RMaW5lXCYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTg4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gYSBzZWFzb25lZCBwcm9ncmFtbWVyL2VuZ2luZWVyOgoKKipJbml0aWFsIERhdGEgVHlwZSBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIHRoZSB2ZXJ5IGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQsIHdpdGhvdXQgYSBkb3VidCwgaXMgdGhlIGRhdGEgdHlwZSBmb3IgdGhlIHZhcmlhYmxlcyBgRmlyc3RMaW5lYCBhbmQgYExpbmVDb3VudGAuIFRoZXkmIzM5O3JlIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gbmVlZCB0byBiZSBpbnRlZ2Vycy4gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBsaW5lICpudW1iZXJzKiBhbmQgYSBjb3VudCBvZiBsaW5lcywgd2hpY2ggYnkgdGhlaXIgbmF0dXJlIGFyZSB3aG9sZSBudW1iZXJzLiBZb3Ugd291bGRuJiMzOTt0IHVzZSBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBmb3IgdGhlc2UsIHVubGVzcyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgKnZlcnkqIHVudXN1YWwgZ29pbmcgb24gdGhhdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gVGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvdXIgb3IgaW5jb3JyZWN0IG91dHB1dCBmcm9tIGFueSBvdGhlciB0eXBlIHdvdWxkIGJlIHRvbyBncmVhdCB0byBjb25zaWRlciBvdGhlcndpc2UuIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIHRoaXMgd2l0aCB0aGUgY29udGV4dCwgYnV0IHRoYXQmIzM5O3MgbXkgd29ya2luZyBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTIwOlx0XG4xOTIxOlx0XHRcdFx0XHQvKiB4b3IgcjExLCByMTEgKi9cbjE5MjI6XHRcdFx0XHRcdEVNSVQzKDB4NEQsIDB4MzEsIDB4REIpO1xuMTkyMzpcdFxuMTkyNDpcdFx0XHRcdFx0LyogdGVzdCBkc3RfcmVnMzIsIGRzdF9yZWczMjsgY2hlY2sgaWYgbG93ZXIgMzItYml0IGFyZSB6ZXJvICovXG4xOTI1Olx0XHRcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCBkc3RfcmVnLCBkc3RfcmVnLCBmYWxzZSk7XG4xOTI2Olx0XHRcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG4xOTI3Olx0XG4xOTI4Olx0XHRcdFx0XHQvKiBjbW92ZSByMTEsIGRzdF9yZWc7IGlmIHNvLCBzZXQgZHN0X3JlZyB0byB6ZXJvICovXG4xOTI5Olx0XHRcdFx0XHQvKiBXQVJOSU5HOiBJbnRlbCBzd2FwcGVkIHNyYy9kc3QgcmVnaXN0ZXIgZW5jb2RpbmcgaW4gQ01PVmNjICEhISAqL1xuMTkzMDpcdFx0XHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgQVVYX1JFRywgZHN0X3JlZywgdHJ1ZSk7XG4xOTMxOlx0XHRcdFx0XHRFTUlUMygweDBGLCAweDQ0LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBkc3RfcmVnKSk7XG4xOTMyOlx0XHRcdFx0XHRicmVhaztcbjE5MzM6XHRcdFx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4xOTM0Olx0XHRcdFx0XHQvKiBtb3YgXHUwMDNjZHN0XHUwMDNlLCBcdTAwM2NzcmNcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cbjE5MzU6XHRcdFx0XHRcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xuMTkzNjpcdCNpZmRlZiBDT05GSUdfU01QXG4xOTM3Olx0XHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuMTkzODpcdFx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuMTkzOTpcdFx0XHRcdFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xuMTk0MDpcdFx0XHRcdFx0RU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XG4xOTQxOlx0I2VuZGlmXG4xOTQyOlx0XHRcdFx0XHRicmVhaztcbjE5NDM6XHRcdFx0XHR9XG4xOTQ0Olx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xOTQ1Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfWDpcbjE5NDY6XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gMClcbjE5NDc6XHRcdFx0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLFxuMTk0ODpcdFx0XHRcdFx0XHQgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCxcbjE5NDk6XHRcdFx0XHRcdFx0ICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcbjE5NTA6XHRcdFx0XHRlbHNlXG4xOTUxOlx0XHRcdFx0XHRlbWl0X21vdnN4X3JlZyhcdTAwMjZwcm9nLCBpbnNuLVx1MDAzZW9mZixcbjE5NTI6XHRcdFx0XHRcdFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCxcbjE5NTM6XHRcdFx0XHRcdFx0ICAgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xuMTk1NDpcdFx0XHRcdGJyZWFrO1xuMTk1NTpcdFxuMTk1NjpcdFx0XHRcdC8qIG5lZyBkc3QgKi9cbjE5NTc6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX05FRzpcbjE5NTg6XHRcdFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTkVHOlxuMTk1OTpcdFx0XHRcdG1heWJlX2VtaXRfMW1vZChcdTAwMjZwcm9nLCBkc3RfcmVnLFxuMTk2MDpcdFx0XHRcdFx0XHRCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpO1xuMTk2MTpcdFx0XHRcdEVNSVQyKDB4RjcsIGFkZF8xcmVnKDB4RDgsIGRzdF9yZWcpKTtcbjE5NjI6XHRcdFx0XHRicmVhaztcbjE5NjM6XHRcbjE5NjQ6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOlxuMTk2NTpcdFx0XHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6XG4xOTY2Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9BTkQgfCBCUEZfSzpcbjE5Njc6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX09SIHwgQlBGX0s6XG4xOTY4Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfSzpcbjE5Njk6XHRcdFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQUREIHwgQlBGX0s6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSklUIENvbXBpbGVyIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gdGhlIGBkb19qaXRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbilgLiBIbW0sIHRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYWx0ZXJpbmcgaG93IHdlIGhhbmRsZSB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGdlbmVyYXRlZCB4ODYgY29kZS4gIFByZXZpb3VzbHksIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgd2FzIHVzZWQsIGJ1dCBub3cgaXQmIzM5O3MgYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGluc3RydWN0aW9uIGVuY29kaW5nLCB3aGljaCBjYW4gaGF2ZSByaXBwbGUgZWZmZWN0cy4gVGhpcyBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGJ1ZyBmaXgmIzM0OyBvciAmIzM0O29wdGltaXphdGlvbiYjMzQ7IHRvIG1lLgoKTXkgaW50dWl0aW9uIHNheXMgdGhpcyBpcyBhZGRyZXNzaW5nIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9uLiAgSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGFkZHJlc3NpbmcgbW9kZSBmb3IgcGVyLUNQVSB2YXJpYWJsZXMsIHdoaWNoIG9mdGVuIGludm9sdmVzIHNvbWUgc29ydCBvZiBvZmZzZXQgY2FsY3VsYXRpb24uIFRoZSBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbiBpcyBsaWtlbHkgZW1pdHRlZCB3aGVuIHdlIHNlZSBhIGBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9QRVJDUFVgIGluc3RydWN0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/ICBOZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBCUEYgaW5zdHJ1Y3Rpb24gc2V0IGVuY29kaW5nLi4uCgpOb3csIGEgcXVpY2sgY2hlY2suLi4gYGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pYC4gVGhhdCYjMzk7cyBhIGhlbHBlciBmdW5jdGlvbi4gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGhlbHBlciBpcyBkb2luZy4gTGV0IG1lIGRvdWJsZS1jaGVjayBpdHMgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSBmdWxseS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgY2hhbmdlIGludHJvZHVjZWQgdG8gYGRvX2ppdGAgYWN0dWFsbHkgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIG9yIGFkZHMgYSBuZXcgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19tb3ZfcGVyY3B1X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTMwMj1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUtXHRcdFx0YnJlYWs7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMzU2Olx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU3LVx0XHRcdGlmIChkc3QgIT0gc3JjKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNjE6XHRcdFx0aWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKFx1MDAyNmluc25baV0pKSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4NS1cdFx0XHRicmVhaztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVx0XHRcdGlmIChyZCAhPSBycylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXHRcdFx0XHRicmVhaztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjAyOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIGluIGBsaW51eC9maWx0ZXIuaGAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgLiBJdCYjMzk7cyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgZUJQRiBpbmZyYXN0cnVjdHVyZSwgbGlrZWx5IHVzZWQgZm9yIG9wdGltaXppbmcgb3IgdmVyaWZ5aW5nIGVCUEYgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggcGVyLUNQVSB2YXJpYWJsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIHdpdGhpbiB0aGF0IGNvbnRleHQuIElzIGl0IGZvciBpbnN0cnVjdGlvbiBwYXR0ZXJuIG1hdGNoaW5nLCBpbnN0cnVjdGlvbiBjbGFzc2lmaWNhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IERvZXMgaXQgaWRlbnRpZnkgaW5zdHJ1Y3Rpb25zIHRoYXQgbW92ZSBkYXRhIHRvIG9yIGZyb20gcGVyLUNQVSBhcmVhcz8gTW9yZSBpbXBvcnRhbnRseSwgaG93IGRvZXMgaXQgZGVmaW5lIHdoYXQgcXVhbGlmaWVzIGFzIGEgJiMzNDttb3ZlJiMzNDsgb3BlcmF0aW9uIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCBvZiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBlQlBGIGJ5dGVjb2RlPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGl0cyBpbXBsZW1lbnRhdGlvbiB0byBzZWUgd2hpY2ggaW5zdHJ1Y3Rpb25zIGl0IHRhcmdldHMsIHdoZXRoZXIgaXQgY29uc2lkZXJzIGFkZHJlc3NpbmcgbW9kZXMsIGFuZCBpZiBpdCBmYWN0b3JzIGluIGFueSBwb3RlbnRpYWwgQ1BVLXNwZWNpZmljIG9wdGltaXphdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gbWlzaGFuZGxpbmcgdGhlc2UgaW5zdHJ1Y3Rpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHRcdCgoc3RydWN0IGJwZl9pbnNuKSB7XHRcdFx0XHRcdFxcXG4gMTk2Olx0XHRcdC5jb2RlICA9IEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCxcdFx0XFxcbiAxOTc6XHRcdFx0LmRzdF9yZWcgPSBEU1QsXHRcdFx0XHRcdFxcXG4gMTk4Olx0XHRcdC5zcmNfcmVnID0gU1JDLFx0XHRcdFx0XHRcXFxuIDE5OTpcdFx0XHQub2ZmICAgPSBCUEZfQUREUl9QRVJDUFUsXHRcdFx0XFxcbiAyMDA6XHRcdFx0LmltbSAgID0gMCB9KVxuIDIwMTpcdFxuIDIwMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gMjAzOlx0e1xuIDIwNDpcdFx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xuIDIwNTpcdH1cbiAyMDY6XHRcbiAyMDc6XHQvKiBTaG9ydCBmb3JtIG9mIG1vdiwgZHN0X3JlZyA9IGltbTMyICovXG4gMjA4Olx0XG4gMjA5Olx0I2RlZmluZSBCUEZfTU9WNjRfSU1NKERTVCwgSU1NKVx0XHRcdFx0XHRcXFxuIDIxMDpcdFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcdFx0XHRcdFx0XFxcbiAyMTE6XHRcdFx0LmNvZGUgID0gQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LLFx0XHRcXFxuIDIxMjpcdFx0XHQuZHN0X3JlZyA9IERTVCxcdFx0XHRcdFx0XFxcbiAyMTM6XHRcdFx0LnNyY19yZWcgPSAwLFx0XHRcdFx0XHRcXFxuIDIxNDpcdFx0XHQub2ZmICAgPSAwLFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDY2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEluc3RydWN0aW9uIFRyYW5zZm9ybWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEJQRiBpbnN0cnVjdGlvbiwgYW5kIGl0JiMzOTtzIGEgYEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWGAgd2l0aCBgb2ZmID09IEJQRl9BRERSX1BFUkNQVWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGlzIGFzIGEgc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uLiBNeSBmb2N1cyBpcyBvbiBob3cgdGhlIGdlbmVyYXRlZCB4ODYgY29kZSBpcyBjaGFuZ2luZy4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgYWx0ZXJpbmcgdGhlIHdheSB0aGUgeDg2IGluc3RydWN0aW9uIGlzIGJlaW5nIGFzc2VtYmxlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgYW5kIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgYWN0dWFsbHkgZG8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIGFzc2VtYmxlci4gVGhpcyBkaWZmZXJlbmNlIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGEgZGVlcGVyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF8xbW9kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0yNDM9c3RhdGljIGJvb2wgaXNfYXhyZWcodTMyIHJlZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4LS8qIEFkZCBtb2RpZmllcnMgaWYgJiMzOTtyZWcmIzM5OyBtYXBzIHRvIHg4Ni02NCByZWdpc3RlcnMgUjguLlIxNSAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0OTpzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTAte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz05Mzg9c3RhdGljIHZvaWQgZW1pdF9tb3ZfaW1tMzIodTggKipwcHJvZywgYm9vbCBzaWduX3Byb3BhZ2F0ZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTQ5LVx0XHQvKiAmIzM5O21vdiAlcmF4LCBpbW0zMiYjMzk7IHNpZ24gZXh0ZW5kcyBpbW0zMiAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk1MDpcdFx0YjEgPSBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NTEtXHRcdGIyID0gMHhDNztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTcxLVx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTcyOlx0XHRFTUlUMShhZGRfMW1vZCgweDQwLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTczLVx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHhCOCwgZHN0X3JlZyksIGltbTMyKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTc4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTY0KHU4ICoqcHByb2csIHUzMiBkc3RfcmVnLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05OTUtXHRcdC8qIG1vdmFic3EgcmF4LCBpbW02NCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk5NjpcdFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIGFkZF8xcmVnKDB4QjgsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05OTctXHRcdEVNSVQoaW1tMzJfbG8sIDQpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTAyPXN0YXRpYyB2b2lkIG1heWJlX2VtaXRfMW1vZCh1OCAqKnBwcm9nLCB1MzIgcmVnLCBib29sIGlzNjQpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMDYtXHRpZiAoaXM2NClcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTA3Olx0XHRFTUlUMShhZGRfMW1vZCgweDQ4LCByZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTA4LVx0ZWxzZSBpZiAoaXNfZXJlZyhyZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMDk6XHRcdEVNSVQxKGFkZF8xbW9kKDB4NDAsIHJlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMTAtXHQqcHByb2cgPSBwcm9nO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIyMS1cdFx0XHRcdC8qIEVtaXQgJiMzOTtic3dhcCByYXgmIzM5OyB0byBzd2FwIDggYnl0ZXMgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjIyOlx0XHRcdFx0RU1JVDMoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4MEYsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIyMy1cdFx0XHRcdCAgICAgIGFkZF8xcmVnKDB4QzgsIGRzdF9yZWcpKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4Mi1cdFx0XHR9XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI4MzpcdFx0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4NC1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzgzMz1zdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NDItXHRcdCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NDM6XHRcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1x0LyogY21wIHJkeCxmdW5jICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg0NC1cdFx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYV0pKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODYzLVx0cGl2b3QgPSAoYiAtIGEpIC8gMjtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODY0Olx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XHRcdC8qIGNtcCByZHgsZnVuYyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NjUtXHRpZiAoIWlzX3NpbW0zMihwcm9nc1thICYjNDM7IHBpdm90XSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGFkZF8ybW9kYCBpbiBgYnBmX2ppdF9jb21wLmNgKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGFkZF8ybW9kYCB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQmIzM5O3MgdGhlIHg4Ni1zcGVjaWZpYyBCUEYgSklUIGNvbXBpbGVyIGNvZGUgZm9yIG5ldHdvcmsgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGFkZGl0aW9uIG1vZHVsbyBhIHBvd2VyIG9mIHR3byBpcyBoYW5kbGVkLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGtleSBwaWVjZSBvZiBvcHRpbWl6aW5nIEJQRiBwcm9ncmFtcyB0aGF0IGludm9sdmUgdGhlc2UgdHlwZXMgb2YgYXJpdGhtZXRpYyBjb25zdHJhaW50cywgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBvcGVyYXRpbmcgb24gbmV0d29yayBwYWNrZXQgZGF0YS4gVGhlIGdvYWwgaXMgbGlrZWx5IHRvIHRyYW5zbGF0ZSB0aGUgQlBGIGluc3RydWN0aW9uIGludG8gdGhlIG1vc3QgZWZmaWNpZW50IHg4NiBhc3NlbWJseSBwb3NzaWJsZSwgdGFraW5nIGFkdmFudGFnZSBvZiBwb3RlbnRpYWxseSBoYXJkd2FyZS1sZXZlbCBtb2QgaW5zdHJ1Y3Rpb25zLCBvciByZXNvcnRpbmcgdG8gYml0d2lzZSBvcGVyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIG9wdGltaXphdGlvbnMgb3IgcGF0dGVybnMgaW4gYGFkZF8ybW9kYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGRvaW5nIHNvbWV0aGluZyBjbGV2ZXIgdG8gYXZvaWQgYSBmdWxsIGRpdmlzaW9uIG9yIG1vZHVsYXIgb3BlcmF0aW9uLCBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb3dlciBvZiAyIG1vZHVsdXMuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBrZXkgdGFrZWF3YXk7IGFyZSB3ZSBzZWVpbmcgZWZmaWNpZW50IGJpdHdpc2UgbWFuaXB1bGF0aW9uIChBTkQsIGV0Yy4pIHRvIGdldCB0aGF0IG1vZCByZXN1bHQgcXVpY2tseSwgb3IgaXMgdGhlcmUgYSB0cmlja2llciwgbGVzcyBvYnZpb3VzIGltcGxlbWVudGF0aW9uIGJlaW5nIHVzZWQgdGhhdCBJIG5lZWQgdG8gZGlzc2VjdD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkXzJtb2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEyNj1zdGF0aWMgYm9vbCBpc191aW1tMzIodTY0IHZhbHVlKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzQtXHRcdGlmIChEU1QgIT0gU1JDKVx0XHRcdFx0XHRcdFx0XHQgXFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzU6XHRcdFx0RU1JVDMoYWRkXzJtb2QoMHg0OCwgRFNULCBTUkMpLCAweDg5LCBhZGRfMnJlZygweEMwLCBEU1QsIFNSQykpOyBcXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNi1cdH0gd2hpbGUgKDApXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI0OT1zdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU1LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI1NjpzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU3LXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk2Mi1cdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTYzOlx0XHRcdEVNSVQxKGFkZF8ybW9kKDB4NDAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NjQtXHRcdGIyID0gMHgzMTsgLyogeG9yICovXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwMDQ9c3RhdGljIHZvaWQgZW1pdF9tb3ZfcmVnKHU4ICoqcHByb2csIGJvb2wgaXM2NCwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDEzLVx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSB8fCBpc19lcmVnKHNyY19yZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMTQ6XHRcdFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTUtXHRcdEVNSVQyKDB4ODksIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTAyMT1zdGF0aWMgdm9pZCBlbWl0X21vdnN4X3JlZyh1OCAqKnBwcm9nLCBpbnQgbnVtX2JpdHMsIGJvb2wgaXM2NCwgdTMyIGRzdF9yZWcsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjgtXHRcdGlmIChudW1fYml0cyA9PSA4KVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMjk6XHRcdFx0RU1JVDQoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MGYsIDB4YmUsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMC1cdFx0XHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMS1cdFx0ZWxzZSBpZiAobnVtX2JpdHMgPT0gMTYpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAzMjpcdFx0XHRFTUlUNChhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwZiwgMHhiZixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDMzLVx0XHRcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDM0LVx0XHRlbHNlIGlmIChudW1fYml0cyA9PSAzMilcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDM1Olx0XHRcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDYzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzYtXHRcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDM5LVx0XHRpZiAobnVtX2JpdHMgPT0gOCkge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNDA6XHRcdFx0RU1JVDQoYWRkXzJtb2QoMHg0MCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MGYsIDB4YmUsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0MS1cdFx0XHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDMtXHRcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykgfHwgaXNfZXJlZyhzcmNfcmVnKSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDQ0Olx0XHRcdFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgc3JjX3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNDU6XHRcdFx0RU1JVDMoYWRkXzJtb2QoMHgwZiwgc3JjX3JlZywgZHN0X3JlZyksIDB4YmYsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0Ni1cdFx0XHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwODg9c3RhdGljIHZvaWQgbWF5YmVfZW1pdF9tb2QodTggKipwcHJvZywgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBib29sIGlzNjQpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwOTItXHRpZiAoaXM2NClcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDkzOlx0XHRFTUlUMShhZGRfMm1vZCgweDQ4LCBkc3RfcmVnLCBzcmNfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA5NC1cdGVsc2UgaWYgKGlzX2VyZWcoZHN0X3JlZykgfHwgaXNfZXJlZyhzcmNfcmVnKSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDk1Olx0XHRFTUlUMShhZGRfMm1vZCgweDQwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA5Ni1cdCpwcHJvZyA9IHByb2c7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTExMTQ9c3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEyMC1cdFx0LyogRW1pdCAmIzM5O21vdnp4IHJheCwgYnl0ZSBwdHIgW3JheCAmIzQzOyBvZmZdJiMzOTsgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTIxOlx0XHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwRiwgMHhCNik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEyMi1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjQtXHRcdC8qIEVtaXQgJiMzOTttb3Z6eCByYXgsIHdvcmQgcHRyIFtyYXggJiM0Mzsgb2ZmXSYjMzk7ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEyNTpcdFx0RU1JVDMoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MEYsIDB4QjcpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjYtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTI5LVx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSB8fCBpc19lcmVnKHNyY19yZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMzA6XHRcdFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgc3JjX3JlZywgZHN0X3JlZyksIDB4OEIpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMzEtXHRcdGVsc2Vcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEzNS1cdFx0LyogRW1pdCAmIzM5O21vdiByYXgsIHF3b3JkIHB0ciBbcmF4JiM0MzsweDE0XSYjMzk7ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEzNjpcdFx0RU1JVDIoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4OEIpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMzctXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTQ0PXN0YXRpYyB2b2lkIGVtaXRfbGRzeCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTUwLVx0XHQvKiBFbWl0ICYjMzk7bW92c3ggcmF4LCBieXRlIHB0ciBbcmF4ICYjNDM7IG9mZl0mIzM5OyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExNTE6XHRcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBGLCAweEJFKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTUyLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTE1NC1cdFx0LyogRW1pdCAmIzM5O21vdnN4IHJheCwgd29yZCBwdHIgW3JheCAmIzQzOyBvZmZdJiMzOTsgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTU1Olx0XHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwRiwgMHhCRik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTE1Ni1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExNTgtXHRcdC8qIEVtaXQgJiMzOTttb3ZzeCByYXgsIGR3b3JkIHB0ciBbcmF4JiM0MzsweDE0XSYjMzk7ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTE1OTpcdFx0RU1JVDIoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4NjMpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExNjAtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMjI1PXN0YXRpYyB2b2lkIGVtaXRfc3R4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEyMzMtXHRcdFx0LyogQWRkIGV4dHJhIGJ5dGUgZm9yIGVyZWdzIG9yIFNJTCxESUwsQlBMIGluIHNyY19yZWcgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMjM0Olx0XHRcdEVNSVQyKGFkZF8ybW9kKDB4NDAsIGRzdF9yZWcsIHNyY19yZWcpLCAweDg4KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjM1LVx0XHRlbHNlXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEyMzktXHRcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTI0MDpcdFx0XHRFTUlUMygweDY2LCBhZGRfMm1vZCgweDQwLCBkc3RfcmVnLCBzcmNfcmVnKSwgMHg4OSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTI0MS1cdFx0ZWxzZVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjQ1LVx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSB8fCBpc19lcmVnKHNyY19yZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyNDY6XHRcdFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZyksIDB4ODkpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEyNDctXHRcdGVsc2Vcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTI1MC1cdGNhc2UgQlBGX0RXOlxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyNTE6XHRcdEVNSVQyKGFkZF8ybW9kKDB4NDgsIGRzdF9yZWcsIHNyY19yZWcpLCAweDg5KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjUyLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzctXHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5Mzg6XHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzOS1cdFx0XHRcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBgYWRkYCBJbnN0cnVjdGlvbiBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBIbW0sIHRoZSBwcmVjZWRpbmcgY29kZSBzbmlwcGV0IHVzZWQgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYC4gIFRoYXQmIzM5O3MgYSBzbGlnaHQgdmFyaWF0aW9uLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVuY2UuIExldCBtZSBxdWlja2x5IGp1bXAgb3ZlciB0byB0aGUgZGVmaW5pdGlvbnMgZm9yIGJvdGggYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCBvbmUgbWlnaHQgYmUgYSBzaW1wbGVyIGFkZGl0aW9uIHdpdGggYSBzaW5nbGUgb3BlcmFuZCwgYW5kIHRoZSBvdGhlciBhIHR3by1vcGVyYW5kIGFkZGl0aW9uIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlLCBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgb3BlcmFuZCB0eXBlcyBhbmQgdGhlaXIgaW1wbGljYXRpb25zIGZvciBob3cgdGhpcyBhZGRpdGlvbiBnZXRzIGV4ZWN1dGVkLiBJJiMzOTtsbCBjaGVjayBpZiB0aGUgMCBpbiBgYWRkXzJtb2RgIGlzIGEgZGlyZWN0IG9wZXJhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHRcdFx0XHQgIEJJVChCUEZfUkVHX0ZQKSk7XG4gMjQxOlx0fVxuIDI0MjpcdFxuIDI0MzpcdHN0YXRpYyBib29sIGlzX2F4cmVnKHUzMiByZWcpXG4gMjQ0Olx0e1xuIDI0NTpcdFx0cmV0dXJuIHJlZyA9PSBCUEZfUkVHXzA7XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdC8qIEFkZCBtb2RpZmllcnMgaWYgJiMzOTtyZWcmIzM5OyBtYXBzIHRvIHg4Ni02NCByZWdpc3RlcnMgUjguLlIxNSAqL1xuIDI0OTpcdHN0YXRpYyB1OCBhZGRfMW1vZCh1OCBieXRlLCB1MzIgcmVnKVxuIDI1MDpcdHtcbiAyNTE6XHRcdGlmIChpc19lcmVnKHJlZykpXG4gMjUyOlx0XHRcdGJ5dGUgfD0gMTtcbiAyNTM6XHRcdHJldHVybiBieXRlO1xuIDI1NDpcdH1cbiAyNTU6XHRcbiAyNTY6XHRzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXG4gMjU3Olx0e1xuIDI1ODpcdFx0aWYgKGlzX2VyZWcocjEpKVxuIDI1OTpcdFx0XHRieXRlIHw9IDE7XG4gMjYwOlx0XHRpZiAoaXNfZXJlZyhyMikpXG4gMjYxOlx0XHRcdGJ5dGUgfD0gNDtcbiAyNjI6XHRcdHJldHVybiBieXRlO1xuIDI2MzpcdH1cbiAyNjQ6XHRcbiAyNjU6XHRzdGF0aWMgdTggYWRkXzNtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIsIHUzMiBpbmRleClcbiAyNjY6XHR7XG4gMjY3Olx0XHRpZiAoaXNfZXJlZyhyMSkpXG4gMjY4Olx0XHRcdGJ5dGUgfD0gMTtcbiAyNjk6XHRcdGlmIChpc19lcmVnKGluZGV4KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MzkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlzc2VjdGluZyB0aGUgUkVYIFByZWZpeCBhbmQgSW5zdHJ1Y3Rpb24gRW5jb2RpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgSSYjMzk7bSBkZWFsaW5nIHdpdGggaG93IFJFWCBwcmVmaXhlcyBpbnRlcmFjdCB3aXRoIGV4dGVuZGVkIHJlZ2lzdGVycyBpbiB4ODYtNjQgYXNzZW1ibHkuIFRoZSBgYWRkXzFtb2RgIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKEIgYml0KSBvZiB0aGUgUkVYIHByZWZpeCB3aGVuIHRoZSB0YXJnZXQgcmVnaXN0ZXIgKGByZWdgIGluIHRoaXMgY2FzZSkgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgbGlrZSBSOC1SMTUuIFNpbWlsYXJseSwgYGFkZF8ybW9kYCBhbHRlcnMgYm90aCB0aGUgQiBiaXQgKGZvciBgcjFgIGV4dGVuZGVkKSBhbmQgdGhlIFIgYml0IChiaXQgMikgaWYgYHIyYCBpcyBleHRlbmRlZC4KCkhhbmcgb24sIGxldCYjMzk7cyBjb25zaWRlciBhIHNwZWNpZmljIGNhc2U6IGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIEhlcmUsIGByMWAgaXMgMCwgd2hpY2ggaXMgUkFYLCBub3QgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIuIEJ1dCBgcjJgIGlzIGBkc3RfcmVnYC4gU28sIGlmIGBkc3RfcmVnYCAqaXMqIGFuIGV4dGVuZGVkIHJlZ2lzdGVyLCBgYWRkXzJtb2RgIHdpbGwgc2V0IHRoZSBSIGJpdCAodmFsdWUgNCkgaW4gdGhlIFJFWCBwcmVmaXguCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBSRVggcHJlZml4IGZvcm1hdDogSXQmIzM5O3MgMHg0MCBPUiYjMzk7ZCB3aXRoIHRoZSBXLCBSLCBYLCBhbmQgQiBiaXRzLiBXIGNvbnRyb2xzIG9wZXJhbmQgc2l6ZSwgUiByZWZlcnMgdG8gdGhlIE1vZFJNIHJlZyBmaWVsZCwgWCByZWZlcnMgdG8gdGhlIFNJQiBpbmRleCBmaWVsZCwgYW5kIEIgY29udHJvbHMgdGhlIE1vZFJNIHIvbSBmaWVsZCwgU0lCIGJhc2UgZmllbGQsIG9yIG9wY29kZSByZWdpc3RlciBmaWVsZC4KCkxvb2tpbmcgYXQgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDoKCmBgYGMKRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpOwpFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7CmBgYAoKYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCBzZXRzIHRoZSBCIGJpdCBpZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHdoaWNoIGlzIGNsZWFyLiBCdXQsIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gaXMgYGFkZCAmbHQ7ZHN0Jmd0OywgZ3M6WyZsdDtvZmYmZ3Q7XWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIE1vZFJNIGJ5dGU6IGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuIE9rYXksIG5vdyBsZXQmIzM5O3MgcmVmZXIgdG8gdGhlIGRlZmluaXRpb24gb2YgYGFkZF8ycmVnYC4gSXQgbG9va3MgbGlrZSB0aGF0IGlzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdFx0Ynl0ZSB8PSAyO1xuIDI3MTpcdFx0aWYgKGlzX2VyZWcocjIpKVxuIDI3MjpcdFx0XHRieXRlIHw9IDQ7XG4gMjczOlx0XHRyZXR1cm4gYnl0ZTtcbiAyNzQ6XHR9XG4gMjc1Olx0XG4gMjc2Olx0LyogRW5jb2RlICYjMzk7ZHN0X3JlZyYjMzk7IHJlZ2lzdGVyIGludG8geDg2LTY0IG9wY29kZSAmIzM5O2J5dGUmIzM5OyAqL1xuIDI3NzpcdHN0YXRpYyB1OCBhZGRfMXJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZylcbiAyNzg6XHR7XG4gMjc5Olx0XHRyZXR1cm4gYnl0ZSAmIzQzOyByZWcyaGV4W2RzdF9yZWddO1xuIDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHQvKiBFbmNvZGUgJiMzOTtkc3RfcmVnJiMzOTsgYW5kICYjMzk7c3JjX3JlZyYjMzk7IHJlZ2lzdGVycyBpbnRvIHg4Ni02NCBvcGNvZGUgJiMzOTtieXRlJiMzOTsgKi9cbiAyODM6XHRzdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuIDI4NDpcdHtcbiAyODU6XHRcdHJldHVybiBieXRlICYjNDM7IHJlZzJoZXhbZHN0X3JlZ10gJiM0MzsgKHJlZzJoZXhbc3JjX3JlZ10gXHUwMDNjXHUwMDNjIDMpO1xuIDI4NjpcdH1cbiAyODc6XHRcbiAyODg6XHQvKiBTb21lIDEtYnl0ZSBvcGNvZGVzIGZvciBiaW5hcnkgQUxVIG9wZXJhdGlvbnMgKi9cbiAyODk6XHRzdGF0aWMgdTggc2ltcGxlX2FsdV9vcGNvZGVzW10gPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTk3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkEgQ3JpdGljYWwgWDg2IEJQRiBKSVQgQnVnIGFuZCBpdHMgUmVzb2x1dGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIEkgd2FzIGxvb2tpbmcgYXQgdGhpcyBgYWRkXzJyZWdgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcgd2FzbiYjMzk7dCByaWdodC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBwbGFjZWQgYGRzdF9yZWdgIGluIHRoZSBgc3JjX3JlZ2AgcG9zaXRpb24gKHNoaWZ0ZWQgYnkgMyksIG1lYW5pbmcgdGhlIGByZWdgIGZpZWxkIG9mIHRoZSBNb2RSTSBieXRlLiBCdXQgdGhlbiBJIGxvb2tlZCBhZ2FpbiwgYW5kIGBhZGRfMnJlZyhieXRlLCBkc3RfcmVnLCBzcmNfcmVnKWAgZG9lcyBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSwgYWRkaW5nIGBieXRlYCwgYHJlZzJoZXhbZHN0X3JlZ11gIGFuZCBgcmVnMmhleFtzcmNfcmVnXWAgbGVmdC1zaGlmdGVkIGJ5IDMuCgpJdCBzdGFydGVkIHRvIGNsaWNrLiBgMHgwNGAgaXMgdGhlIE1vZFJNIGJ5dGUsIGFuZCBgcmVnMmhleFswXWAgaXMganVzdCBgMGAgKFJBWCkuIFRoZSBgcmVnYCBmaWVsZCBvZiBNb2RSTSBzaG91bGQgYmUgYGRzdF9yZWdgIC0gYnV0IHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoICpob3cqIHRoYXQgZW5jb2RpbmcgaXMgaGFwcGVuaW5nLiBgcmVnMmhleFtkc3RfcmVnXWAgaXMgYWRkZWQgZGlyZWN0bHksIHdoaWNoIHNldHMgdGhlIGxvd2VyIDMgYml0cyBmb3IgdGhlIHIvbSBmaWVsZCBhbmQgbm90IHRoZSByZWcgZmllbGQuCgpUaGVuLCBJIGZvY3VzZWQgb24gdGhlIFJFWCBwcmVmaXguIFdoZW4gYGRzdF9yZWdgIGlzIGV4dGVuZGVkIChSOC1SMTUpLCBpdCYjMzk7cyBzdXBwb3NlZCB0byBzZXQgdGhlIFIgYml0IChiaXQgMiwgdmFsdWUgNCkuIEJ1dCwgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCB3YXMgc2V0dGluZyB0aGUgQiBiaXQgKGJpdCAwLCB2YWx1ZSAxKSBpbnN0ZWFkISBUaGlzIG1lYW5zIGBhZGRfMW1vZGAgd2FzIHNldHRpbmcgdGhlICp3cm9uZyogYml0IGluIHRoZSBSRVggcHJlZml4LgoKVGhpcyBtZWFucyB0aGF0IGlmIGBkc3RfcmVnYCB3YXMgUjgsIHRoZSBpbnN0cnVjdGlvbiB3YXMgdXNpbmcgUkFYIGZvciB0aGUgYHJlZ2AgZmllbGQgYW5kIFI4IGZvciB0aGUgYHIvbWAgZmllbGQsIHdoaWNoIHNob3VsZCBub3QgaGF2ZSBiZWVuIHRoZSBjYXNlLiBUaGUgYHIvbWAgZmllbGQgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIFNJQiBieXRlIGluZGljYXRvciAoMHgwNCBtZWFucyBTSUIgZm9sbG93cykuCgpUaGUgcm9vdCBjYXVzZTogdGhlIGZ1bmN0aW9uIHdhc24mIzM5O3QgcHJvcGVybHkgc2V0dGluZyB0aGUgUiBiaXQhIFRoaXMgcmVzdWx0ZWQgaW4gYSBjb21wbGV0ZSBtaXNpbnRlcnByZXRhdGlvbiBvZiBleHRlbmRlZCByZWdpc3RlcnMsIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGluc3RydWN0aW9uIGVuY29kaW5nLiAgSWYgYGRzdF9yZWdgIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciwgdGhlIGluc3RydWN0aW9uIHdhcyBlbmNvZGluZyBzb21ldGhpbmcgbGlrZSBgYWRkIHI4LCBnczpbJmx0O29mZiZndDtdYCB3aGVuIGl0IHNob3VsZG4mIzM5O3QuIFRoaXMgaXMgYSBwcmV0dHkgbWFqb3IgYnVnIGluIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciB4ODYuCgpUaGUgZml4PyBJIG5lZWQgdG8gY2hhbmdlIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgdG8gYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gIEkgcmVjaGVja2VkIGBhZGRfMm1vZGA6CmBgYGMKc3RhdGljIHU4IGFkZF8ybW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyKQp7CglpZiAoaXNfZXJlZyhyMSkpCgkJYnl0ZSB8PSAxOwoJaWYgKGlzX2VyZWcocjIpKQoJCWJ5dGUgfD0gNDsKCXJldHVybiBieXRlOwp9CmBgYAoKTm93LCBgcjJgIGNvcnJlY3RseSBzZXRzIGJpdCAyICh0aGUgUiBiaXQpIHdoZW4gYGRzdF9yZWdgIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyISBUaGlzIGNvcnJlY3RseSBzZXRzIHRoZSBSIGJpdCBpbiB0aGUgUkVYIHByZWZpeC4KClRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHRlc3QgaXQgYW5kIGZ1enogaXQuICBJIG5lZWQgdG8gZnV6eiBCUEYgcHJvZ3JhbXMgdGhhdCB1c2UgYG1vdl9wZXJjcHVfYWRkcmAgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMgb24geDg2LiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGJlY2F1c2UgYGRvX2ppdGAgaXMgc3RhdGljLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBicGZfaW50X2ppdF9jb21waWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk1MD1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2MS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTYyOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODE2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFg4NiBCUEYgSklUIENvbXBpbGF0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb247IHRoYXQmIzM5O3MgdGhlIGNvcmUgSklUIGNvbXBpbGVyIGZvciB4ODYsIHJpZ2h0PyBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiBvYnZpb3VzbHkgYENPTkZJR19CUEZfSklUYCBpcyBhIG11c3QuIEJ1dCB0aGVyZSYjMzk7cyBtb3JlLiBXYWl0LCBJIHNlZSB0aGlzIGAjaWZkZWYgQ09ORklHX1NNUGAgYmxvY2suLi4gYW5kIGl0JiMzOTtzIGVtaXR0aW5nIHNvbWUgaW5saW5lIGFzc2VtYmx5IGZvciB3aGF0IGxvb2tzIGxpa2UgQ1BVLXNwZWNpZmljIG9mZnNldCBoYW5kbGluZy4gT2theSwgc28gdGhhdCBtZWFucyBgQ09ORklHX1NNUGAgaXMgYWxzbyBlc3NlbnRpYWwuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhhdCBibG9jay4gSXQgbG9va3MgbGlrZSBpdCBpcyBnZW5lcmF0aW5nIGFuIGBhZGRgIGluc3RydWN0aW9uIHRvIGhhbmRsZSBzb21lIHNvcnQgb2YgcGVyLUNQVSBvZmZzZXQuCgpgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBwcm9iYWJseSBhbHNvIGEgcmVxdWlyZW1lbnQuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9jb21wXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L01ha2VmaWxlPTg9ZWxzZVxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjk6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtMTAtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzOTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uIGZpbGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgYENPTkZJR19CUEZfSklUYCDigJMgeWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgaGFyZCByZXF1aXJlbWVudC4gTm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiBgQ09ORklHX1NNUGAgaXMgcHJhY3RpY2FsbHkgYSBnaXZlbiB0aGVzZSBkYXlzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBpbmNsdWRlIGl0IGV4cGxpY2l0bHkuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZz8gR290dGEgYmUgZGlsaWdlbnQuCgpMZXQgbWUgc2Vl4oCmIEnigJlsbCBkbyBhIHF1aWNrIGNoZWNrIG9mIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAuIFRoYXQgZnVuY3Rpb27igJlzIHJlbGF0ZWQgdG8gYEJQRl9BRERSX1BFUkNQVWAsIHdoaWNoIGlzIGEga2V5IGNvbXBvbmVudCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGluZ3MgYXJlIHNldCB1cC4gQWgsIGFuZCBoZXJlIHdlIGFyZSwgbm93LCB3aGVyZSBkb2VzIGBCUEZfQUREUl9QRVJDUFVgIGNvbWUgZnJvbSBhZ2Fpbj8gV2hlcmUgaXMgdGhhdCB2YWx1ZSBnZW5lcmF0ZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4gdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgbGluZWQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQUREUl9QRVJDUFUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE4OS0gKiBkc3RfcmVnID0gc3JjX3JlZyAmIzQzOyBcdTAwM2NwZXJjcHVfYmFzZV9vZmZcdTAwM2VcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTkwOiAqIEJQRl9BRERSX1BFUkNQVSBpcyB1c2VkIGFzIGEgc3BlY2lhbCBpbnNuLVx1MDAzZW9mZiB2YWx1ZS5cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTkxLSAqL1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxOTI6I2RlZmluZSBCUEZfQUREUl9QRVJDUFVcdCgtMSlcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTkzLVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTk4LVx0XHQuc3JjX3JlZyA9IFNSQyxcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTk5Olx0XHQub2ZmICAgPSBCUEZfQUREUl9QRVJDUFUsXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAwLVx0XHQuaW1tICAgPSAwIH0pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yMDI9c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAzLXtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjA0Olx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDUtfVxuLS1cbmtlcm5lbC9icGYvZGlzYXNtLmM9MTY5PXN0YXRpYyBib29sIGlzX2FkZHJfc3BhY2VfY2FzdChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi9kaXNhc20uYy0xNzYtICogZHN0X3JlZyA9IHNyY19yZWcgJiM0MzsgXHUwMDNjcGVyY3B1X2Jhc2Vfb2ZmXHUwMDNlXG5rZXJuZWwvYnBmL2Rpc2FzbS5jOjE3NzogKiBCUEZfQUREUl9QRVJDUFUgaXMgdXNlZCBhcyBhIHNwZWNpYWwgaW5zbi1cdTAwM2VvZmYgdmFsdWUuXG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTE3OC0gKi9cbmtlcm5lbC9icGYvZGlzYXNtLmM6MTc5OiNkZWZpbmUgQlBGX0FERFJfUEVSQ1BVXHQoLTEpXG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTE4MC1cbmtlcm5lbC9icGYvZGlzYXNtLmM9MTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi9kaXNhc20uYy0xODIte1xua2VybmVsL2JwZi9kaXNhc20uYzoxODM6XHRyZXR1cm4gaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTE4NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQ1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBJbnN0cnVjdGlvbiBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIEJQRiBpbnN0cnVjdGlvbnMuIE15IHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBvciB0aGUgYnJvYWRlciBjb250ZXh0IHdoZXJlIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAgaXMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBCUEYgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiB0aGUgYC9rZXJuZWwvYnBmL2AgZGlyZWN0b3J5LiBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciB1c2VzIG9mIHRob3NlIG1hY3JvcyBvciBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgcGVyLUNQVSByZWdpc3RlcnMgYW5kIG1lbW9yeSBhZGRyZXNzaW5nIGFyZSBoYW5kbGVkIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIEkmIzM5O20gcHJvYmFibHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHJlZ2lzdGVycyBiZWhhdmUsIHdoYXQmIzM5O3MgZG9uZSB3aXRoIHRoZW0sIGFuZCBtYXliZSB0byBkZWJ1ZyBzb21lIG9ic2VydmVkIGJlaGF2aW9yLiBPciwgSSBtaWdodCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJ1Z3MuIE15IGZvY3VzIGlzIHJlYWxseSBvbiB3aGVyZSBhbmQgaG93IHRoZXNlIGNvbmNlcHRzIGFyZSB1dGlsaXplZCBpbiB0aGF0IHNwZWNpZmljIGtlcm5lbCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTU9WNjRfUEVSQ1BVX1JFRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJyYXltYXAuYz0yOTQ9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzE4LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MzE5Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTMyMC1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTAzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjMtXHRcdFx0aW5zbl9idWZbMF0gPSBpbnNuWzFdO1xua2VybmVsL2JwZi9maXh1cHMuYzoxODY0Olx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVx0XHRcdGNudCA9IDI7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTc2LVx0XHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3B1X251bWJlcik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxNzc6XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNzgtXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE5OC1cdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmN1cnJlbnRfdGFzayk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxOTk6XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMDAtXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDE0PXN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDI3LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDI4Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjQyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoaXMgY29uc3RydWN0IGJlaW5nIHVzZWQgaW4gYSBmZXcgcGxhY2VzOiBgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwYCwgYGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwYCwgYW5kIGFsc28sIG5vdGFibHksIGluIGBicGZfZG9fbWlzY19maXh1cHNgIHdoZW4gZGVhbGluZyB3aXRoIGBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRgIGFuZCBgYnBmX2dldF9jdXJyZW50X3Rhc2tgLiBXYWl0IGEgbWludXRlLCBJIGp1c3Qgbm90aWNlZCBzb21ldGhpbmcgLSBgYnBmX2RvX21pc2NfZml4dXBzYCBhY3R1YWxseSB1c2VzIGBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMClgLgoKVGhhdCYjMzk7cyB1c2luZyBgQlBGX1JFR18wYCwgd2hpY2ggdHJhbnNsYXRlcyB0byBSQVguIEFuZCBSQVggaXNuJiMzOTt0IGFuIGV4dGVuZGVkIHJlZ2lzdGVyLCBzbyB0aGVyZSBpcyB0aGUgcHJvYmxlbSwgSSB0aGluay4gVGhpcyBidWcgb25seSBhZmZlY3RzIHRoZSBleHRlbmRlZCByZWdpc3RlcnMgLSBSOCB0aHJvdWdoIFIxNS4gV2hlcmUgaXMgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBhY3R1YWxseSAqdXNlZCogd2l0aCBhbiBleHRlbmRlZCByZWdpc3Rlcj8gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLgoKQWgsIGhlcmUgaXQgaXMuIEluIGBicGZfZG9fbWlzY19maXh1cHNgOgoKYGBgYwoJCQlpbnNuX2J1ZlswXSA9IGluc25bMV07CgkJCWluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi0mZ3Q7ZHN0X3JlZywgaW5zbi0mZ3Q7ZHN0X3JlZyk7CgkJCWNudCA9IDI7CmBgYAoKUmlnaHQsIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgaW5zdHJ1Y3Rpb24gaW4gcGxhY2UuIE9rYXksIEkgbmVlZCB0byBjaGVjayBgYnBmX2RvX21pc2NfZml4dXBzYCBhcm91bmQgbGluZSAxODYzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTA6XHRcdFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuMTg1MTpcdFxuMTg1MjpcdFx0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbjE4NTM6XHRcbjE4NTQ6XHRcdFx0XHQvKlxuMTg1NTpcdFx0XHRcdCAqIFdlIGFyZSAqc2tpcHBpbmcqIGZpcnN0IGhhbGYgb2YgbGRfaW1tNjQgaW5zblxuMTg1NjpcdFx0XHRcdCAqIHdpdGggJiMzOTtpJiM0MzsmIzQzOzsmIzM5OywgcGF0Y2hpbmcgb3ZlciBzZWNvbmQgaGFsZiBvZiBpdFxuMTg1NzpcdFx0XHRcdCAqIHdpdGggdGhhdCBzYW1lIGhhbGYgJiM0MzsgbW92NjRfcGVyY3B1X3JlZyBpbnNuLlxuMTg1ODpcdFx0XHRcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxuMTg1OTpcdFx0XHRcdCAqIHJlcGxhY2Ugb25lIDgtYnl0ZSBpbnNuLCB3aGljaCBkb2VzIG5vdCB3b3JrXG4xODYwOlx0XHRcdFx0ICogd2VsbCBmb3IgbGRfaW1tNjQgaW5zbi5cbjE4NjE6XHRcdFx0XHQgKi9cbjE4NjI6XHRcbjE4NjM6XHRcdFx0XHRpbnNuX2J1ZlswXSA9IGluc25bMV07XG4xODY0Olx0XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4xODY1Olx0XHRcdFx0Y250ID0gMjtcbjE4NjY6XHRcbjE4Njc6XHRcdFx0XHRpJiM0MzsmIzQzOztcbjE4Njg6XHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbjE4Njk6XHRcdFx0XHRpZiAoIW5ld19wcm9nKVxuMTg3MDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODcxOlx0XG4xODcyOlx0XHRcdFx0ZGVsdGEgICAgJiM0Mzs9IGNudCAtIDE7XG4xODczOlx0XHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XG4xODc0Olx0XHRcdFx0aW5zbiAgICAgID0gbmV3X3Byb2ctXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgZGVsdGE7XG4xODc1Olx0XHRcdFx0Z290byBuZXh0X2luc247XG4xODc2Olx0XHRcdH1cbjE4Nzc6XHRcbjE4Nzg6XHRcdFx0aWYgKGluc24tXHUwMDNlY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9DQUxMKSlcbjE4Nzk6XHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2MjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQmxvY2smIzM5O3MgTG9naWMqKgoKQWxyaWdodCwgSSBzZWUgdGhpcyBjb25kaXRpb25hbCBibG9jaywgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IGl0cyBjb3JlIGxvZ2ljLiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSAqZXhhY3QqIGNvbmRpdGlvbiB0aGF0IHRyaWdnZXJzIHRoaXMgdGhpbmc/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICYjMzk7d2h5JiMzOTsgYmVoaW5kIGl0cyBleGVjdXRpb24uIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgc2V0dGluZyBhIHRlbXBvcmFsIGFuY2hvci4gQW55dGhpbmcgYmVmb3JlIDE4NTAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGFzc2VzcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgYmxvY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCB0byBiZXR0ZXIgZXZhbHVhdGUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzMDpcdFxuMTgzMTpcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuMTgzMjpcdFx0XHRcdGlmICghbmV3X3Byb2cpXG4xODMzOlx0XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4MzQ6XHRcbjE4MzU6XHRcdFx0XHRkZWx0YSAmIzQzOz0gY250IC0gMTtcbjE4MzY6XHRcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcbjE4Mzc6XHRcdFx0XHRpbnNuID0gbmV3X3Byb2ctXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgZGVsdGE7XG4xODM4Olx0XHRcdFx0Z290byBuZXh0X2luc247XG4xODM5Olx0XHRcdH1cbjE4NDA6XHRcbjE4NDE6XHRcdFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcdTAwMjZcdTAwMjZcbjE4NDI6XHRcdFx0ICAgIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXHUwMDI2XHUwMDI2XG4xODQzOlx0XHRcdCAgICAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX1ZBTFVFIHx8XG4xODQ0Olx0XHRcdCAgICAgaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX0lEWF9WQUxVRSkpIHtcbjE4NDU6XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuMTg0NjpcdFxuMTg0NzpcdFx0XHRcdGF1eCA9IFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2kgJiM0MzsgZGVsdGFdO1xuMTg0ODpcdFx0XHRcdG1hcCA9IGVudi1cdTAwM2V1c2VkX21hcHNbYXV4LVx1MDAzZW1hcF9pbmRleF07XG4xODQ5Olx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKVxuMTg1MDpcdFx0XHRcdFx0Z290byBuZXh0X2luc247XG4xODUxOlx0XG4xODUyOlx0XHRcdFx0cHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xuMTg1MzpcdFxuMTg1NDpcdFx0XHRcdC8qXG4xODU1Olx0XHRcdFx0ICogV2UgYXJlICpza2lwcGluZyogZmlyc3QgaGFsZiBvZiBsZF9pbW02NCBpbnNuXG4xODU2Olx0XHRcdFx0ICogd2l0aCAmIzM5O2kmIzQzOyYjNDM7OyYjMzk7LCBwYXRjaGluZyBvdmVyIHNlY29uZCBoYWxmIG9mIGl0XG4xODU3Olx0XHRcdFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiAmIzQzOyBtb3Y2NF9wZXJjcHVfcmVnIGluc24uXG4xODU4Olx0XHRcdFx0ICogQWxsIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGNhbiBvbmx5XG4xODU5Olx0XHRcdFx0ICogcmVwbGFjZSBvbmUgOC1ieXRlIGluc24sIHdoaWNoIGRvZXMgbm90IHdvcmtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBCUEYgQnVnKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBpdC4gVGhpcyBpcyBhYm91dCBhIG5hc3R5IGxpdHRsZSBidWcgdHJpZ2dlcmVkIGJ5IGBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZYCBtYXAgdmFsdWVzIGJlaW5nIGxvYWRlZCB1c2luZyBgQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EV2AgYW5kIGBCUEZfUFNFVURPX01BUF9WQUxVRWAuIENsYXNzaWMhIEl0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBzY2VuYXJpbywgYnV0IGRlZmluaXRlbHkgZXhwbG9pdGFibGUuCgpCYXNpY2FsbHksIHdoZW4gYSBCUEYgcHJvZ3JhbSB0cmllcyB0byBsb2FkIGEgcGVyLWNwdSBhcnJheSBtYXAgdmFsdWUgZGlyZWN0bHkgaW50byBhIHJlZ2lzdGVyIOKAkyBzcGVjaWZpY2FsbHksIGl0IHVzZXMgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHKGluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O2RzdF9yZWcpYCDigJMgdGhlcmUmIzM5O3MgYSBwcm9ibGVtLiBJZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIsIGBpbnNuLSZndDtkc3RfcmVnYCwgaGFwcGVucyB0byBiZSBhbiBleHRlbmRlZCByZWdpc3RlciwgbGlrZSBSOCBvciBoaWdoZXIsIGl0IGtpY2tzIG9mZiB0aGlzIGJ1Zy4KClNvLCBsb2FkaW5nIHRoYXQgcGVyLWNwdSBhcnJheSB2YWx1ZSBpbnRvIGFueSByZWdpc3RlciBiZXR3ZWVuIFI4IGFuZCBSMTUgaXMgdGhlIHRyaWdnZXIuIFRoYXQmIzM5O3MgYSB2ZXJ5IG5hcnJvdywgeWV0IHF1aXRlIHJlYWNoYWJsZSBwYXRoIHRoYXQgbWFrZXMgaXQgYW4gaW1tZWRpYXRlIHByaW9yaXR5LiBXZSYjMzk7cmUgZGVmaW5pdGVseSBmdXp6aW5nIHRoaXMsIG5vIHF1ZXN0aW9uLgoKQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19CUEZfSklUYCwgYW5kIGBDT05GSUdfU01QYC4gSnVzdCB5b3VyIGJhc2ljIEJQRiByZXF1aXJlbWVudHMuCgpIYW5nIG9uLi4uYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAgaXMgdHJ1ZSBvbiB4ODYsIHdoaWNoIGlzIGNydWNpYWwgaGVyZS4gQWxyaWdodCwgYmVzdCB0byBnbyB2ZXJpZnkgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuYC4gV2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGluZ3JlZGllbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTMzMTA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMzMjMtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzozMzI0OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMzMyNS17XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz01NTY9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTcxLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo1NzI6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTU3My17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMTMzPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTEtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxNTI6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTMte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MTc3PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MTgxLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQxODI6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDE4My17XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMjM3PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTIzODpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMzktYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTI2Mj1zdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI2NS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyNjY6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjc3PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjgxLVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI4MjpcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI4My1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yOTQ9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjk4LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI5OTpcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTMwMC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMyNzU9Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyNzktXG5rZXJuZWwvYnBmL2NvcmUuYzozMjgwOmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMyODEte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwMz1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODQwLVxua2VybmVsL2JwZi9maXh1cHMuYzoxODQxOlx0XHRpZiAoYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9maXh1cHMuYy0xODQyLVx0XHQgICAgaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDE0PXN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDE3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjQxODpcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxOS1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjY5NT1ib29sIGJwZl92ZXJpZmllcl9pbmxpbmVzX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHMzMiBpbW0pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzAzLSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2NzA0Olx0XHRyZXR1cm4gZW52LVx1MDAzZXByb2ctXHUwMDNlaml0X3JlcXVlc3RlZCBcdTAwMjZcdTAwMjYgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzA1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ1NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgSklUIENvbXBpbGVyIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc25gIGZ1bmN0aW9uIOKAkyBJIGtub3cgaXQmIzM5O3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgc28gdGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGJldHRlciwgc28gbGV0JiMzOTtzIGNoZWNrIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGRvX2ppdGAuIE15IGd1dCB0ZWxscyBtZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGNvbXBpbGluZyBhIEJQRiBwcm9ncmFtIHdpdGggdGhlIEpJVC4gSG1tLCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIGNyaXRpY2FsPyBBaCwgeWVzLCBgYnBmX2RvX21pc2NfZml4dXBzYCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkISBBbmQsIHdhaXQsIGJvdGggYHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cGAgYW5kIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAgYWxzbyBjb250cmlidXRlIGluc3RydWN0aW9uIGdlbmVyYXRpb24uIEJ1dCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHJlbWFpbnMgdGhlIGNvcmUgZm9jdXMgZm9yIG5vdy4KCkxldCBtZSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYFNNUGAgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLgoKT2theSwgc28gdGhlIGNoYW5nZSBJJiMzOTttIGxvb2tpbmcgYXQgKmlzKiBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQgaGluZ2VzIG9uIGBDT05GSUdfQlBGX0pJVGAsIG9idmlvdXNseS4gQW5kLCBmcm9tIGxvb2tpbmcgYXQgYGRvX2ppdGAsIEkgc2VlIGBDT05GSUdfU01QYCBpcyByZXF1aXJlZCBmb3IgdGhlIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAgYmxvY2suIFdhaXQgYSBzZWNvbmQuLi4gaWYgYENPTkZJR19TTVBgIGlzICpub3QqIGVuYWJsZWQsIHRoYXQgZW50aXJlIHNlY3Rpb24gb2YgYGRvX2ppdGAgZWZmZWN0aXZlbHkgZG9lcyBub3RoaW5nPyBJJiMzOTtkIGJldHRlciByZS1leGFtaW5lIGBkb19qaXRgIGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTMwOlx0XHRcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCBBVVhfUkVHLCBkc3RfcmVnLCB0cnVlKTtcbjE5MzE6XHRcdFx0XHRcdEVNSVQzKDB4MEYsIDB4NDQsIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIGRzdF9yZWcpKTtcbjE5MzI6XHRcdFx0XHRcdGJyZWFrO1xuMTkzMzpcdFx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbjE5MzQ6XHRcdFx0XHRcdC8qIG1vdiBcdTAwM2Nkc3RcdTAwM2UsIFx1MDAzY3NyY1x1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xuMTkzNTpcdFx0XHRcdFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XG4xOTM2Olx0I2lmZGVmIENPTkZJR19TTVBcbjE5Mzc6XHRcdFx0XHRcdC8qIGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG4xOTM4Olx0XHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4xOTM5Olx0XHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4xOTQwOlx0XHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbjE5NDE6XHQjZW5kaWZcbjE5NDI6XHRcdFx0XHRcdGJyZWFrO1xuMTk0MzpcdFx0XHRcdH1cbjE5NDQ6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjE5NDU6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YOlxuMTk0NjpcdFx0XHRcdGlmIChpbnNuLVx1MDAzZW9mZiA9PSAwKVxuMTk0NzpcdFx0XHRcdFx0ZW1pdF9tb3ZfcmVnKFx1MDAyNnByb2csXG4xOTQ4Olx0XHRcdFx0XHRcdCAgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0LFxuMTk0OTpcdFx0XHRcdFx0XHQgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUG90ZW50aWFsIEJ1ZyoqCgpPa2F5LCBzbyBpZiBgQ09ORklHX1NNUGAgaXMgb2ZmLCB0aGUgY29kZSBwYXRoIGp1c3QgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBgRU1JVF9tb3ZgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGBDT05GSUdfU01QYCBpcyBhIGtleSByZXF1aXJlbWVudCBmb3IgdHJpZ2dlcmluZyB0aGlzIGJ1Zy4gSSYjMzk7bSBhbHNvIHNlZWluZyB0aGF0IGBDT05GSUdfQlBGX0pJVGAgaXMgbmVjZXNzYXJ5IHRvIGV2ZW4gY29tcGlsZSBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgYW5kLCBvYnZpb3VzbHksIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlIHRvICp1c2UqIEJQRi4KCk5vdywgaG9sZCBvbi4gYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHRoZSBwcmltYXJ5IEpJVCBjb21waWxhdGlvbiBmdW5jdGlvbiwgYnV0IEkgbmVlZCB0byBsb29rIGJleW9uZCB0aGUgb2J2aW91cy4gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgY29tcGlsYXRpb24gcGlwZWxpbmUgdGhhdCBtaWdodCBiZSByZWxldmFudD8gQWgsIGhlcmUmIzM5O3Mgb25lOiBgYnBmX2RvX21pc2NfZml4dXBzYC4gVGhpcyBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBpbnN0cnVjdGlvbi4gRGVmaW5pdGVseSBhIHBsYWNlIHRvIGZvY3VzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBicGZfZG9fbWlzY19maXh1cHNgIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCB0byBzZWUgaWYgaXQmIzM5O3MgdGhlIHNvdXJjZSBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc5Olx0LyogYWRkcmVzcyBzcGFjZSBjYXN0cyBjb252ZXJ0ZWQgdG8gQlBGX0FMVSwgc2VlIGJwZl9kb19taXNjX2ZpeHVwcygpICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwLVx0aWYgKGlzX2FkZHJfc3BhY2VfY2FzdDMyKHByb2csIGluc24pKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ3ND1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwMi0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwMzppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDE1Mz1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNzQtXHRpZiAocmV0ID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzNzU6XHRcdHJldCA9IGJwZl9kb19taXNjX2ZpeHVwcyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDUyMwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIEpJVCBDb21waWxlciBGaXgqKgoKT2theSwgYGJwZl9kb19taXNjX2ZpeHVwc2AgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvcmUgaXNzdWUgaGVyZS4KClJpZ2h0LCB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgaGFkIGEgYnVnIHJlbGF0ZWQgdG8gYG1vdl9wZXJjcHVfYWRkcmAuIEl0IHNlZW1zIHRoZSBjb21waWxlciB3YXMgZ2V0dGluZyB0aGUgUkVYIHByZWZpeCB3cm9uZyB3aGVuIGRlYWxpbmcgd2l0aCBwZXItQ1BVIG1hcCB2YWx1ZSBsb2FkcyBhbmQgZXh0ZW5kZWQgcmVnaXN0ZXJzIChSOC1SMTUpIGFzIHRoZSBkZXN0aW5hdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGV5IHdlcmUgdXNpbmcgYGFkZF8xbW9kYCB3aGVuIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiB1c2luZyBgYWRkXzJtb2RgLiBgYWRkXzFtb2RgIHNldHMgdGhlICYjMzQ7QiYjMzQ7IGJpdCwgd2hpbGUgYGFkZF8ybW9kYCBjb3JyZWN0bHkgc2V0cyB0aGUgJiMzNDtSJiMzNDsgYml0IGZvciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGBhZGQgJmx0O2RzdCZndDssIGdzOlsmbHQ7b2ZmJmd0O11gIGluc3RydWN0aW9uLiBUaGlzIHJlc3VsdGVkIGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSwgd2l0aCBwb3RlbnRpYWxseSBuYXN0eSBjb25zZXF1ZW5jZXMgLSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyBpbiBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBTTVBgLiBTdGFuZGFyZCBzdHVmZiwgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSB1c2FnZSBvZiBgYWRkXzJtb2RgIHdpdGhpbiBgZG9faml0YC4gSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGxpa2UgdGhpczoKCmBgYGMKRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpOwpgYGAKCk9rYXksIHNvIGBhZGRfMm1vZGAgdGFrZXMgdGhyZWUgYXJndW1lbnRzOiBgYnl0ZWAsIGByMWAsIGFuZCBgcjJgLiBJbiB0aGlzIGNhc2UsIGByMWAgaXMgMCwgYW5kIGByMmAgaXMgYGRzdF9yZWdgLiBJZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHRoaXMgc2hvdWxkIGNvcnJlY3RseSBzZXQgdGhlIFIgYml0IChiaXQgMikgaW4gdGhlIFJFWCBwcmVmaXguIExvb2tpbmcgY2xvc2VyIHRoZSBtb2RybSBieXRlIGlzIGRldGVybWluZWQgYnkgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYAoKQnV0IHdhaXQuLi4gaXNuJiMzOTt0IGBhZGRfMnJlZ2AgdGFraW5nIHRoZSBgZHN0X3JlZ2AgYXMgdGhlIGBzcmNfcmVnYD8gSXQmIzM5O3MgdGltZSB0byBkb3VibGUgY2hlY2sgaG93IHRoYXQgYWxsIHBpZWNlcyB3b3JrIHRvZ2V0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBNb2RSTSBieXRlIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHR9XG4gMjgxOlx0XG4gMjgyOlx0LyogRW5jb2RlICYjMzk7ZHN0X3JlZyYjMzk7IGFuZCAmIzM5O3NyY19yZWcmIzM5OyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICYjMzk7Ynl0ZSYjMzk7ICovXG4gMjgzOlx0c3RhdGljIHU4IGFkZF8ycmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcbiAyODQ6XHR7XG4gMjg1Olx0XHRyZXR1cm4gYnl0ZSAmIzQzOyByZWcyaGV4W2RzdF9yZWddICYjNDM7IChyZWcyaGV4W3NyY19yZWddIFx1MDAzY1x1MDAzYyAzKTtcbiAyODY6XHR9XG4gMjg3Olx0XG4gMjg4Olx0LyogU29tZSAxLWJ5dGUgb3Bjb2RlcyBmb3IgYmluYXJ5IEFMVSBvcGVyYXRpb25zICovXG4gMjg5Olx0c3RhdGljIHU4IHNpbXBsZV9hbHVfb3Bjb2Rlc1tdID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY3MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZ2lzdGVyIEFkZGl0aW9uIEluc3RydWN0aW9uKioKCk9rYXksIHNvIGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuLi4gcmlnaHQsIHRoYXQgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCBgZHN0X3JlZ2AgYWN0cyBhcyBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSB0d28tcmVnaXN0ZXIgYWRkaXRpb24uIFRoZSBzaGlmdCBieSB0aHJlZSBoaWdobGlnaHRzIHRoYXQgYGRzdF9yZWdgIGlzIGJlaW5nIHJlZmVyZW5jZWQgdXNpbmcgdGhlIGByZWdgIGZpZWxkIHdpdGhpbiB0aGUgTW9kUk0gYnl0ZS4gQ29uc2VxdWVudGx5LCB0aGlzIHRlbGxzIG1lIHRoZSBSRVggcHJlZml4JiMzOTtzIFIgYml0IGRpcmVjdGx5IGNvcnJlc3BvbmRzIHRvIHRoYXQgYHJlZ2AgZmllbGQuCgpOb3csIHJlY2FsbCB0aGF0IHRoZSBSIGJpdCByZXNpZGVzIGF0IGJpdCBwb3NpdGlvbiAyIG9mIHRoZSBSRVggYnl0ZSwgdGh1cyBoYXZpbmcgYSB2YWx1ZSBvZiA0LiBUaGVyZWZvcmUsIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAgd2lsbCBzZXQgdGhpcyBiaXQgaWYgdGhlIHRhcmdldCByZWdpc3RlciwgYGRzdF9yZWdgLCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciDigJMgSSYjMzk7bSBzZWVpbmcgdGhhdCBgZHN0X3JlZ2AgaXMgdGhlIHNlY29uZCBhcmd1bWVudCwgYHIyYCwgd2l0aGluIGBhZGRfMm1vZGAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaG93IGBhZGRfMm1vZGAgaGFuZGxlcyB0aGlzIHNjZW5hcmlvLiBBIHF1aWNrIHJldmlldyBpcyBpbiBvcmRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1NTpcdFxuIDI1NjpcdHN0YXRpYyB1OCBhZGRfMm1vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMilcbiAyNTc6XHR7XG4gMjU4Olx0XHRpZiAoaXNfZXJlZyhyMSkpXG4gMjU5Olx0XHRcdGJ5dGUgfD0gMTtcbiAyNjA6XHRcdGlmIChpc19lcmVnKHIyKSlcbiAyNjE6XHRcdFx0Ynl0ZSB8PSA0O1xuIDI2MjpcdFx0cmV0dXJuIGJ5dGU7XG4gMjYzOlx0fVxuIDI2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI1MgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCaXR3aXNlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gYHIyYCBpcyBkZWZpbml0ZWx5IHNldHRpbmcgYml0IDIsIHdoaWNoIGhhcyBhIHZhbHVlIG9mIDQuIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAmIzM5O3MgYmVoYXZpb3Igb2Ygc2V0dGluZyB0aGUgUiBiaXQgZm9yIGBkc3RfcmVnYCBzZWVtcyBjb3JyZWN0LiBNeSBjb25jZXJuIGhlcmUgc3RlbXMgZnJvbSBob3cgdGhlIHByaW9yIGNvZGUgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCB3YXMgc2V0dGluZyBiaXQgMCwgZXNzZW50aWFsbHkgdGhlIEIgYml0LiBUaGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBgci9tYCBmaWVsZCB3aXRoaW4gdGhlIE1vZFJNIGJ5dGUsIG9yIHBvdGVudGlhbGx5IHRoZSBgYmFzZWAgaW4gdGhlIFNJQiBieXRlLgoKTG9va2luZyBhdCB0aGUgTW9kUk0gYnl0ZSBgMHgwNGAsIEkgc2VlIHRoYXQgYSBTSUIgYnl0ZSBmb2xsb3dzLiBXaXRoIGAweDI1YCBhcyB0aGUgU0lCLCB0aGUgYGluZGV4YCBpcyA0IChubyBpbmRleCByZWdpc3RlcikgYW5kIGBiYXNlYCBpcyBlZmZlY3RpdmVseSA1ICh3aGljaCByZXNvbHZlcyB0byBhIDMyLWJpdCBkaXNwbGFjZW1lbnQpLiBIb3dldmVyLCB3aGVuIHRoZSBCIGJpdCBpcyBpbmFkdmVydGVudGx5IHNldCwgdGhlIGJhc2UgYmVjb21lcyAxMyAoUjEzKS4gVGhhdCB0cmFuc2Zvcm1zIHRoZSBpbnN0cnVjdGlvbiBmcm9tIHdoYXQgaXQgc2hvdWxkIGJlIHRvIGEgY29tcGxldGVseSBkaWZmZXJlbnQgb3BlcmF0aW9uLCBuYW1lbHksIGBhZGQgJmx0O2RzdCZndDssIGdzOltyMTMgJiM0MzsgJmx0O29mZiZndDtdYCBpbnN0ZWFkIG9mIGBhZGQgJmx0O2RzdCZndDssIGdzOlsmbHQ7b2ZmJmd0O11gLiBBbmQgdGhhdCYjMzk7cyBub3QgYWxsLiBCZWNhdXNlIG9mIHRoZSBSMTMgcmVnaXN0ZXIsIGl0IHdvdWxkIGFsc28gcmVzdWx0IGluIHRoZSBgZHN0YCByZWdpc3RlciBiZWluZyB0cnVuY2F0ZWQgKGUuZy4sIGlmIGl0IHdhcyBSOCwgaXQgd291bGQgYmVjb21lIFJBWCkuIFRoZSBlZmZlY3Qgd291bGQgYmUgYW4gaW5zdHJ1Y3Rpb24gbGlrZSBgYWRkIHJheCwgZ3M6W3IxMyAmIzQzOyAmbHQ7b2ZmJmd0O11gLCB3aGljaCBpcyBvYnZpb3VzbHkgaW5jb3JyZWN0LgoKVGhpcyBpcyBhIGNyaXRpY2FsIGVycm9yISBJdCYjMzk7cyBnb2luZyB0byBsZWFkIHRvIGNyYXNoZXMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24uCgpHb29kLCB0aGUgZml4IHNlZW1zIHBlcmZlY3RseSByZWFzb25hYmxlIGFuZCBjb3JyZWN0LiBJJiMzOTttIGNvbmZpZGVudCBpdCBhZGRyZXNzZXMgdGhlIHByb2JsZW0uIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBjb25maXJtIHRoaXMuIEkgdGhpbmsgSSYjMzk7dmUgZ2F0aGVyZWQgYWxsIHRoZSByZWxldmFudCBkZXRhaWxzIHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbi4gVGhpcyB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHJlZ2lzdGVyIHVzYWdlIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyB3aGVuIGV4ZWN1dGluZyBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbi4gVGhpcyB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHJlZ2lzdGVyIHVzYWdlIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyB3aGVuIGV4ZWN1dGluZyBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFdoZW4gZW1pdHRpbmcgdGhlIGBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAgaW5zdHJ1Y3Rpb24gZm9yIHBlci1DUFUgYWRkcmVzcyByZXNvbHV0aW9uLCB0aGUgSklUIGluY29ycmVjdGx5IHVzZWQgYGFkZF8xbW9kYCwgd2hpY2ggc2V0cyB0aGUgUkVYLkIgYml0IGluc3RlYWQgb2YgdGhlIFJFWC5SIGJpdCB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoZS5nLiwgUjgtUjE1KS4gVGhpcyBlbmNvZGluZyBlcnJvciBjYXVzZXMgdGhlIENQVSB0byBpbnRlcnByZXQgdGhlIGluc3RydWN0aW9uIGFzIGBhZGQgcmF4LCBnczpbcjEzICYjNDM7IFx1MDAzY29mZlx1MDAzZV1gIGluc3RlYWQgb2YgYGFkZCByOCwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gLlxuXG5FeGVjdXRpbmcgdGhpcyBtYWxmb3JtZWQgaW5zdHJ1Y3Rpb24gbGVhZHMgdG8gcmVhZGluZyBtZW1vcnkgZnJvbSBhIHNlbWktYXJiaXRyYXJ5IHBlci1DUFUgb2Zmc2V0IChjb250cm9sbGVkIGJ5IGByMTNgLCB3aGljaCBtYXBzIHRvIGBCUEZfUkVHXzdgKSBhbmQgY29ycnVwdGluZyB0aGUgYHJheGAgKGBCUEZfUkVHXzBgKSByZWdpc3Rlci4gVGhpcyByZXN1bHRzIGluIGVpdGhlciBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIChjYXVzaW5nIGEgcGFnZSBmYXVsdCBvciB0cmlnZ2VyaW5nIEtBU0FOKSBvciBhbiBpbmZvLWxlYWsgb2YgYXJiaXRyYXJ5IHBlci1DUFUgbWVtb3J5LiBcblxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiwgdXNhZ2UsIG9yIGxlYWtpbmcgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCBpcyBhIHB1cmUgSklUIG1pc2NvbXBpbGF0aW9uIHRoYXQgbGVhZHMgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIHJlZ2lzdGVyIGNvcnJ1cHRpb24uIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJlc3VsdGluZyBwYWdlIGZhdWx0cyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjBiOWQxNjg4ZTU5YjZjMGI3NDBhZjhlNzMxNjgxYTlmYmNkMzUyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE3OjM5OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGQ5MjA3NzJhZjdkNWYuLjFhOWZiNTMwYWRjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTE5MzUsNyAmIzQzOzE5MzUsNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKgogCQkJCUVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJCQkvKiBhZGQgJmx0O2RzdCZndDssIGdzOlsmbHQ7b2ZmJmd0O10gKi8KLQkJCQlFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7CiYjNDM7CQkJCUVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTsKIAkJCQlFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7CiAJCQkJRU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKSZhbXA7dGhpc19jcHVfb2ZmLCA0KTsKICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgYSByZXBsYWNlbWVudCBvZiBgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZylgIHdpdGggYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZC4gVGhpcyBpcyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIsIHNvIGl0JiMzOTtzIGFsbCBhYm91dCBob3cgd2UgZ2VuZXJhdGUgdGhlIG1hY2hpbmUgY29kZS4KCkkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcuIFRoZXNlIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgZnVuY3Rpb25zIG9yIG1hY3JvcywgdGhleSYjMzk7cmUgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIHJpZ2h0IHg4NiBpbnN0cnVjdGlvbiBwcmVmaXhlcyDigJMgaW4gdGhpcyBjYXNlLCB0aGUgUkVYIHByZWZpeC4gQW4gZW5jb2RpbmcgZXJyb3IgaGVyZSBjb3VsZCBhYnNvbHV0ZWx5IGxlYWQgdG8gaW5jb3JyZWN0IGluc3RydWN0aW9ucyBiZWluZyBleGVjdXRlZCwgYW5kIHRoYXQmIzM5O3MgYSBwcm9ibGVtLiBDcmFzaGVzIGFyZSBhIGxpa2VseSBvdXRjb21lIG9mIGluY29ycmVjdCBpbnN0cnVjdGlvbiBlbmNvZGluZy4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCB0aGlzIGRvZXNuJiMzOTt0ICpuZWNlc3NhcmlseSogbWVhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbiBwbGF5IGhlcmUuIFRoZSBmaXggY291bGQgc2ltcGx5IG1lYW4gaXQmIzM5O3MgYW4gaW5zdHJ1Y3Rpb24gYmVpbmcgZW1pdHRlZCBpbmNvcnJlY3RseS4KCkkgbmVlZCB0byBjb25maXJtIGJ5IGRpZ2dpbmcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBhZGRyZXNzaW5nIG1vZGUgaXMgYmVpbmcgdXNlZCBhbmQgd2h5IHRoaXMgY2hhbmdlIGlzIHJlcXVpcmVkLCBiZWNhdXNlIHRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgdGhlcmUgd2FzIGEgc3VidGxlIGJ1ZyBvciBpbnN0cnVjdGlvbiBpbmNvbXBhdGliaWxpdHkgdGhhdCB0aGlzIGNoYW5nZSBmaXhlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkXzFtb2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI0Mz1zdGF0aWMgYm9vbCBpc19heHJlZyh1MzIgcmVnKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDgtLyogQWRkIG1vZGlmaWVycyBpZiAmIzM5O3JlZyYjMzk7IG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQ5OnN0YXRpYyB1OCBhZGRfMW1vZCh1OCBieXRlLCB1MzIgcmVnKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1MC17XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTkzOD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW0zMih1OCAqKnBwcm9nLCBib29sIHNpZ25fcHJvcGFnYXRlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NDktXHRcdC8qICYjMzk7bW92ICVyYXgsIGltbTMyJiMzOTsgc2lnbiBleHRlbmRzIGltbTMyICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTUwOlx0XHRiMSA9IGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk1MS1cdFx0YjIgPSAweEM3O1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NzEtXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NzI6XHRcdEVNSVQxKGFkZF8xbW9kKDB4NDAsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NzMtXHRFTUlUMV9vZmYzMihhZGRfMXJlZygweEI4LCBkc3RfcmVnKSwgaW1tMzIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz05Nzg9c3RhdGljIHZvaWQgZW1pdF9tb3ZfaW1tNjQodTggKipwcHJvZywgdTMyIGRzdF9yZWcsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk5NS1cdFx0LyogbW92YWJzcSByYXgsIGltbTY0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTk2Olx0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgYWRkXzFyZWcoMHhCOCwgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk5Ny1cdFx0RU1JVChpbW0zMl9sbywgNCk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTExMDI9c3RhdGljIHZvaWQgbWF5YmVfZW1pdF8xbW9kKHU4ICoqcHByb2csIHUzMiByZWcsIGJvb2wgaXM2NClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEwNi1cdGlmIChpczY0KVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMDc6XHRcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIHJlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMDgtXHRlbHNlIGlmIChpc19lcmVnKHJlZykpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEwOTpcdFx0RU1JVDEoYWRkXzFtb2QoMHg0MCwgcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTExMC1cdCpwcHJvZyA9IHByb2c7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjIxLVx0XHRcdFx0LyogRW1pdCAmIzM5O2Jzd2FwIHJheCYjMzk7IHRvIHN3YXAgOCBieXRlcyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMjI6XHRcdFx0XHRFTUlUMyhhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHgwRixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjIzLVx0XHRcdFx0ICAgICAgYWRkXzFyZWcoMHhDOCwgZHN0X3JlZykpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjgyLVx0XHRcdH1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjgzOlx0XHRcdEVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweEM3KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjg0LVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODMzPXN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1Zilcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg0Mi1cdFx0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzg0MzpcdFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XHQvKiBjbXAgcmR4LGZ1bmMgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODQ0LVx0XHRpZiAoIWlzX3NpbW0zMihwcm9nc1thXSkpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NjMtXHRwaXZvdCA9IChiIC0gYSkgLyAyO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NjQ6XHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcdFx0LyogY21wIHJkeCxmdW5jICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg2NS1cdGlmICghaXNfc2ltbTMyKHByb2dzW2EgJiM0MzsgcGl2b3RdKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFzc2VtYmx5IENvZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY2hhbmdlIHRvIGBFTUlUMmAgY2F0Y2hlcyBteSBleWUuIFdlJiMzOTt2ZSBnb25lIGZyb20gdXNpbmcgYGFkZF8xbW9kYCB0byBgYWRkXzJtb2RgLiBUaGUgaW5pdGlhbCBjb2RlIHVzZWQgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYC4gSXQgc2V0cyB0aGUgUkVYLkIgYml0IGlmIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gQnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbiBpcyBgYWRkICZsdDtkc3QmZ3Q7LCBnczpbJmx0O29mZiZndDtdYC4gQW5kIHRoZW4sIHRoZSBuZXh0IGxpbmUgYEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtgLi4uIFRoYXQgbWFrZXMgbWUgdGhpbmsgYSBiaXQuCgpUaGUgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdXBkYXRlIHRoZSBjb2RlIHRvIGFsbG93IGZvciBleHRlbmRlZCByZWdpc3RlcnMuIFRoZSBmaXJzdCBjaGFuZ2UsIG5vdyB1c2luZyBgYWRkXzJtb2RgLCBzdWdnZXN0cyB0aGUgaW50ZW50IHRvIGRlYWwgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMuIEkga25vdyBgMHgwM2AgaXMgdGhlIGBhZGRgIG9wY29kZS4gU28sIHRoZSBSRVggcHJlZml4IGhhcyB0byBnbyAqYmVmb3JlKiB0aGUgYDB4MDNgIG9wY29kZS4gQW5kIHRoZSBwcmVmaXggaXMgYDB4NDhgIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBSRVguVyBwcmVmaXguIEJ1dCBpZiB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSByZWdpc3Rlciwgc3BlY2lmaWNhbGx5IGBkc3RfcmVnYCwgdGhlIFJFWCBwcmVmaXggKnNob3VsZCogYmUgc2V0dGluZyB0aGUgUkVYLlIgYml0LiBUaGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgZW5jb2RlZCBpbiB0aGUgTW9kUi9NIGJ5dGUuIEl0IGlzIGVuY29kZWQgaW4gdGhlIGByZWdgIGZpZWxkIChiaXRzIDMtNSksICpub3QqIHRoZSBgci9tYCBmaWVsZCAoYml0cyAwLTIpLiBUaGlzIGluZGljYXRlcyB0aGUgcHJvYmxlbS4KCk5vdywgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBzZWVtcyB0byBiZSB0aGUgY3J1Y2lhbCBiaXQuIEl0IGxvb2tzIGxpa2UgaXQgKnNob3VsZCogYmUgcHV0dGluZyBgZHN0X3JlZ2AgaW4gdGhlIGByZWdgIGZpZWxkIG9mIHRoZSBNb2RSL00gYnl0ZSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byB2ZXJpZnkgZXhhY3RseSBob3cgYGFkZF8ycmVnYCBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSByZWdpc3RlciBlbmNvZGluZyB0byBjb25maXJtIHRoYXQgdGhlIHBhdGNoIGlzIGNvcnJlY3RseSBlbmNvZGluZyB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGByZWdgIGZpZWxkIGFuZCBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBSRVggYml0cy4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGhhdmUgYSBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF8ycmVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMjY9c3RhdGljIGJvb2wgaXNfdWltbTMyKHU2NCB2YWx1ZSlcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM0LVx0XHRpZiAoRFNUICE9IFNSQylcdFx0XHRcdFx0XHRcdFx0IFxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTM1Olx0XHRcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIERTVCwgU1JDKSwgMHg4OSwgYWRkXzJyZWcoMHhDMCwgRFNULCBTUkMpKTsgXFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzYtXHR9IHdoaWxlICgwKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0yNzc9c3RhdGljIHU4IGFkZF8xcmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yODItLyogRW5jb2RlICYjMzk7ZHN0X3JlZyYjMzk7IGFuZCAmIzM5O3NyY19yZWcmIzM5OyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICYjMzk7Ynl0ZSYjMzk7ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjgzOnN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjg0LXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk2NS1cdFx0YjMgPSAweEMwO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk2NjpcdFx0RU1JVDIoYjIsIGFkZF8ycmVnKGIzLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTY3LVx0XHRnb3RvIGRvbmU7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwMDQ9c3RhdGljIHZvaWQgZW1pdF9tb3ZfcmVnKHU4ICoqcHByb2csIGJvb2wgaXM2NCwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDE0LVx0XHRcdEVNSVQxKGFkZF8ybW9kKDB4NDAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDE1Olx0XHRFTUlUMigweDg5LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAxNi1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTAyMT1zdGF0aWMgdm9pZCBlbWl0X21vdnN4X3JlZyh1OCAqKnBwcm9nLCBpbnQgbnVtX2JpdHMsIGJvb2wgaXM2NCwgdTMyIGRzdF9yZWcsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjktXHRcdFx0RU1JVDQoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MGYsIDB4YmUsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAzMDpcdFx0XHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMS1cdFx0ZWxzZSBpZiAobnVtX2JpdHMgPT0gMTYpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMi1cdFx0XHRFTUlUNChhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwZiwgMHhiZixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDMzOlx0XHRcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDM0LVx0XHRlbHNlIGlmIChudW1fYml0cyA9PSAzMilcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDM1LVx0XHRcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDYzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzY6XHRcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzctXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDQwLVx0XHRcdEVNSVQ0KGFkZF8ybW9kKDB4NDAsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBmLCAweGJlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNDE6XHRcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDItXHRcdH0gZWxzZSBpZiAobnVtX2JpdHMgPT0gMTYpIHtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0NS1cdFx0XHRFTUlUMyhhZGRfMm1vZCgweDBmLCBzcmNfcmVnLCBkc3RfcmVnKSwgMHhiZixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDQ2Olx0XHRcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDQ3LVx0XHR9XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwNTQ9c3RhdGljIHZvaWQgZW1pdF9pbnNuX3N1ZmZpeCh1OCAqKnBwcm9nLCB1MzIgcHRyX3JlZywgdTMyIHZhbF9yZWcsIGludCBvZmYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNjQtXHRcdCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNjU6XHRcdEVNSVQyKGFkZF8ycmVnKDB4NDAsIHB0cl9yZWcsIHZhbF9yZWcpLCBvZmYpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNjYtXHR9IGVsc2Uge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNjctXHRcdC8qIDQtYnl0ZSBzaWduZWQgZGlzcGxhY2VtZW50ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA2ODpcdFx0RU1JVDFfb2ZmMzIoYWRkXzJyZWcoMHg4MCwgcHRyX3JlZywgdmFsX3JlZyksIG9mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA2OS1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTA3Mz1zdGF0aWMgdm9pZCBlbWl0X2luc25fc3VmZml4X1NJQih1OCAqKnBwcm9nLCB1MzIgcHRyX3JlZywgdTMyIHZhbF9yZWcsIHUzMiBpbmRleF9yZWcsIGludCBvZmYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNzctXHRpZiAoaXNfaW1tOChvZmYpKSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA3ODpcdFx0RU1JVDMoYWRkXzJyZWcoMHg0NCwgQlBGX1JFR18wLCB2YWxfcmVnKSwgYWRkXzJyZWcoMCwgcHRyX3JlZywgaW5kZXhfcmVnKSAvKiBTSUIgKi8sIG9mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA3OS1cdH0gZWxzZSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA4MDpcdFx0RU1JVDJfb2ZmMzIoYWRkXzJyZWcoMHg4NCwgQlBGX1JFR18wLCB2YWxfcmVnKSwgYWRkXzJyZWcoMCwgcHRyX3JlZywgaW5kZXhfcmVnKSAvKiBTSUIgKi8sIG9mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA4MS1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTYwMj1zdGF0aWMgdm9pZCBlbWl0X3NoaWZ0eCh1OCAqKnBwcm9nLCB1MzIgZHN0X3JlZywgdTggc3JjX3JlZywgYm9vbCBpczY0LCB1OCBvcClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYwOC1cdGVtaXRfM3ZleChcdTAwMjZwcm9nLCByLCBmYWxzZSwgciwgbSwgaXM2NCwgc3JjX3JlZywgZmFsc2UsIG9wKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjA5Olx0RU1JVDIoMHhmNywgYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MTAtXHQqcHByb2cgPSBwcm9nO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjkxPXN0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTYtXHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgcmVnLCByZWcsIGZhbHNlKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzE3Olx0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTcxOC1cdFx0XHRFTUlUMihYODZfSkUsIDMpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzIxLVx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzIyOlx0XHRFTUlUMigweDAxLCBhZGRfMnJlZygweEMwLCByZWcsIFg4Nl9SRUdfUjEyKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTcyMy1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE4OTctXHRcdFx0YjIgPSBzaW1wbGVfYWx1X29wY29kZXNbQlBGX09QKGluc24tXHUwMDNlY29kZSldO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE4OTg6XHRcdFx0RU1JVDIoYjIsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xODk5LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTI1LVx0XHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgZHN0X3JlZywgZHN0X3JlZywgZmFsc2UpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MjY6XHRcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkyNy1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMC1cdFx0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIEFVWF9SRUcsIGRzdF9yZWcsIHRydWUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MzE6XHRcdFx0XHRFTUlUMygweDBGLCAweDQ0LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMi1cdFx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM4LVx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5Mzk6XHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTk0MC1cdFx0XHRcdEVNSVQoKHUzMikodW5zaWduZWQgbG9uZylcdTAwMjZ0aGlzX2NwdV9vZmYsIDQpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMTAwLVx0XHRcdFx0LyogaW11bCBkc3RfcmVnLCBkc3RfcmVnLCBpbW04ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMTpcdFx0XHRcdEVNSVQzKDB4NkIsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDItXHRcdFx0XHQgICAgICBpbW0zMik7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDUtXHRcdFx0XHRFTUlUMl9vZmYzMigweDY5LFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDY6XHRcdFx0XHRcdCAgICBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMTA3LVx0XHRcdFx0XHQgICAgaW1tMzIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMTE1LVx0XHRcdC8qIGltdWwgZHN0X3JlZywgc3JjX3JlZyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIxMTY6XHRcdFx0RU1JVDMoMHgwRiwgMHhBRiwgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIxMTctXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMDktXHRcdFx0XHRcdEVNSVQyKDB4MEYsIDB4QjcpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMTA6XHRcdFx0XHRFTUlUMShhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIxMS1cdFx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjM4LVx0XHRcdFx0XHRFTUlUMigweDBGLCAweEI3KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjM5Olx0XHRcdFx0RU1JVDEoYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyNDAtXHRcdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI0NC1cdFx0XHRcdFx0RU1JVDEoMHg0NSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI0NTpcdFx0XHRcdEVNSVQyKDB4ODksIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjQ2LVx0XHRcdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTIyODU9c3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ3Ni1cdFx0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIEFVWF9SRUcsIEJQRl9SRUdfQVgsIHRydWUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0Nzc6XHRcdFx0XHRFTUlUMigweDI5LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBCUEZfUkVHX0FYKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ3OC1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4NC1cdFx0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIEFVWF9SRUcsIEJQRl9SRUdfQVgsIHRydWUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0ODU6XHRcdFx0XHRFTUlUMigweDM5LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBCUEZfUkVHX0FYKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4Ni1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU5MS1cdFx0XHRcdEVNSVQyKHNpbXBsZV9hbHVfb3Bjb2Rlc1tCUEZfT1AoaW5zbi1cdTAwM2VpbW0pXSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNTkyOlx0XHRcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgcmVhbF9zcmNfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU5My1cdFx0XHRcdC8qIEF0dGVtcHQgdG8gc3dhcCBpbiBuZXcgdmFsdWUgKi9cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjcxMy1cdFx0XHRcdCAgICAgICBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNzE0Olx0XHRcdEVNSVQyKDB4MzksIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNzE1LVx0XHRcdGdvdG8gZW1pdF9jb25kX2ptcDtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjcyMS1cdFx0XHRcdCAgICAgICBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNzIyOlx0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNzIzLVx0XHRcdGdvdG8gZW1pdF9jb25kX2ptcDtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjc1Ni1cdFx0XHRcdFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9KTVApO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI3NTc6XHRcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjc1OC1cdFx0XHRcdGdvdG8gZW1pdF9jb25kX2ptcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyMwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgSW5zdHJ1Y3Rpb246IGBhZGQgJmx0O2RzdCZndDssIGdzOlsmbHQ7b2ZmJmd0O11gKioKCk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaXMgYGFkZCAmbHQ7ZHN0Jmd0OywgZ3M6WyZsdDtvZmYmZ3Q7XWAuIFRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgZ2l2ZXMgdXMgdGhlIGJhc2ljIGFzc2VtYmx5LCBidXQgSSBuZWVkIHRvIGJyZWFrIGRvd24gKmV4YWN0bHkqIGhvdyB0aGlzIGlzIGJlaW5nIHRyYW5zbGF0ZWQgaW50byBtYWNoaW5lIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgZW1pdHMgYDB4NjVgIHdoaWNoIEkga25vdyByZXByZXNlbnRzIHRoZSBgZ3M6YCBwcmVmaXguIFRoZW4sIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgZ29lcyBuZXh0LiBUaGUgbmV4dCBsaW5lIGVtaXRzIGBFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7YCBIbW0sIGludGVyZXN0aW5nLiBJIHJlY29nbml6ZSB0aGUgYDB4MDNgIGFzIHBhcnQgb2YgdGhlIGBhZGRgIG9wY29kZSwgcmlnaHQ/CgpBbHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyB3aGVyZSB0aGUgTW9kUi9NIGJ5dGUgYW5kIG1heWJlIGEgU0lCIGJ5dGUgY29tZSBpbnRvIHBsYXkuICpBaGEhKiBUaGF0IGAweDA0YCBpbiBgYWRkXzJyZWdgIGlzIHRoZSBrZXkuIFRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIGByL21gIGZpZWxkICh0aGUgYm90dG9tIDMgYml0cykgd2lsbCBiZSBzZXQgdG8gYDB4MDRgLCBtZWFuaW5nIGEgU0lCIGJ5dGUgd2lsbCBmb2xsb3cuIEFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IGBkc3RfcmVnYCBpcyBiZWluZyBwdXQgaW50byB0aGUgYHJlZ2AgZmllbGQgKGJpdHMgMy01KSBvZiB0aGUgTW9kUi9NIGJ5dGUuIE5vdywgaG93IGRvZXMgdGhhdCB3b3JrIG91dD8gVGhhdCBtZWFucyB0aGUgTW9kUi9NIGJ5dGUgaXRzZWxmIHdpbGwgYmUgZXNzZW50aWFsbHkgYDB4MDQgfCAoZHN0X3JlZyAmbHQ7Jmx0OyAzKWAuIFdlIGFsc28gc2VlIHRoZSBTSUIgYnl0ZSBlbWl0dGVkIGFzIGAweDI1YCAobm8gaW5kZXgsIG5vIGJhc2UsIGRpc3AzMikuIFNvIHRoZSBgci9tYCBpcyBgMHgwNGAgd2l0aCBhIGRpc3AzMiBhbmQgdGhlIHJlZyBmaWVsZCBpcyB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIuCgpOb3csIHdhaXQgYSBzZWNvbmQuLi4gYGFkZF8ycmVnKGJ5dGUsIGRzdF9yZWcsIHNyY19yZWcpYCAtIHRoaXMgYWxzbyBlbmNvZGVzIHRoZSBgc3JjX3JlZ2AgYnV0IEkgb25seSBzZWUgYGRzdF9yZWdgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhZGRfMnJlZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSBJJiMzOTttIGNsZWFyIG9uIGhvdyB0aGUgYHNyY19yZWdgIGlzIGdldHRpbmcgaGFuZGxlZC4gTGV0JiMzOTtzIGdvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyB1OCBhZGRfMnJlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mjc3PXN0YXRpYyB1OCBhZGRfMXJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjgyLS8qIEVuY29kZSAmIzM5O2RzdF9yZWcmIzM5OyBhbmQgJiMzOTtzcmNfcmVnJiMzOTsgcmVnaXN0ZXJzIGludG8geDg2LTY0IG9wY29kZSAmIzM5O2J5dGUmIzM5OyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI4MzpzdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzM2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYWRkXzJyZWdgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBlYWNoIGxpbmUsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCByZXNvdXJjZSB1c2FnZSwgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBncmFzcCB0aGUgY29yZSBsb2dpYzogd2hhdCByZWdpc3RlcnMgYXJlIGludm9sdmVkLCB3aGF0IHRoZSBvcGVyYXRpb25zIGFyZSwgYW5kIHRoZSBleHBlY3RlZCBvdXRjb21lLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBwaXRmYWxscyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLiBLbm93aW5nIG15IGZpZWxkLCBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGFmZmVjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGV0aGVyIGFueSBlZGdlIGNhc2VzIGFyZSBoYW5kbGVkLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvZGUgd29ya3MgZWZmaWNpZW50bHkgYW5kIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHQvKiBFbmNvZGUgJiMzOTtkc3RfcmVnJiMzOTsgYW5kICYjMzk7c3JjX3JlZyYjMzk7IHJlZ2lzdGVycyBpbnRvIHg4Ni02NCBvcGNvZGUgJiMzOTtieXRlJiMzOTsgKi9cbiAyODM6XHRzdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuIDI4NDpcdHtcbiAyODU6XHRcdHJldHVybiBieXRlICYjNDM7IHJlZzJoZXhbZHN0X3JlZ10gJiM0MzsgKHJlZzJoZXhbc3JjX3JlZ10gXHUwMDNjXHUwMDNjIDMpO1xuIDI4NjpcdH1cbiAyODc6XHRcbiAyODg6XHQvKiBTb21lIDEtYnl0ZSBvcGNvZGVzIGZvciBiaW5hcnkgQUxVIG9wZXJhdGlvbnMgKi9cbiAyODk6XHRzdGF0aWMgdTggc2ltcGxlX2FsdV9vcGNvZGVzW10gPSB7XG4gMjkwOlx0XHRbQlBGX0FERF0gPSAweDAxLFxuIDI5MTpcdFx0W0JQRl9TVUJdID0gMHgyOSxcbiAyOTI6XHRcdFtCUEZfQU5EXSA9IDB4MjEsXG4gMjkzOlx0XHRbQlBGX09SXSA9IDB4MDksXG4gMjk0Olx0XHRbQlBGX1hPUl0gPSAweDMxLFxuIDI5NTpcdFx0W0JQRl9MU0hdID0gMHhFMCxcbiAyOTY6XHRcdFtCUEZfUlNIXSA9IDB4RTgsXG4gMjk3Olx0XHRbQlBGX0FSU0hdID0gMHhGOCxcbiAyOTg6XHR9O1xuIDI5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMxMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgYGFkZF8ycmVnYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBhZGRfMnJlZyhieXRlLCBkc3RfcmVnLCBzcmNfcmVnKWAgZnVuY3Rpb24uIFRoZSBjb3JlIGNhbGN1bGF0aW9uIGlzOiBgYnl0ZSAmIzQzOyByZWcyaGV4W2RzdF9yZWddICYjNDM7IChyZWcyaGV4W3NyY19yZWddICZsdDsmbHQ7IDMpYC4gU28sIGlmIEkgY2FsbCBpdCB3aXRoLCBzYXksIGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAsIHRoYXQgYmVjb21lcyBgMHgwNCAmIzQzOyByZWcyaGV4WzBdICYjNDM7IChyZWcyaGV4W2RzdF9yZWddICZsdDsmbHQ7IDMpYC4gUmlnaHQsIGAwYCByZXByZXNlbnRzIGBCUEZfUkVHXzBgLCB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCBtYXBzIGRpcmVjdGx5IHRvIHRoZSBgUkFYYCByZWdpc3Rlci4KClRoZXJlZm9yZSwgd2UgaGF2ZSBgc3JjX3JlZ2AgYXMgYGRzdF9yZWdgLCB3aXRoIHRoZSB2YWx1ZSBsZWZ0IHNoaWZ0ZWQgYnkgdGhyZWUgKGl0cyB2YWx1ZSBpcyBsb2NhdGVkIGluIHRoZSBNb2RSL00gYnl0ZSBgcmVnYCBmaWVsZCkuIEFuZCB0aGUgTW9kUi9NIGJ5dGUgaGFzIGAwYCBpbiB0aGUgYHIvbWAgZmllbGQuCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciB0aGUgUkVYIHByZWZpeC4gVGhhdCYjMzk7cyBgMHg0OCB8IFJFWC5SIHwgUkVYLkJgLiBJZiB0aGUgYGRzdF9yZWdgIGlzIGluIHRoZSBgcmVnYCBmaWVsZCwgdGhlbiBJIG11c3Qgc2V0IFJFWC5SIGlmIGBkc3RfcmVnYCByZXByZXNlbnRzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGUgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCBmdW5jdGlvbiBzZXRzIFJFWC5CIGlmIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciBhcyB3ZWxsLiBUaW1lIHRvIGdvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBmdW5jdGlvbnMgdG8gY29uZmlybSB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdHJldHVybiByZWcgPT0gQlBGX1JFR18wO1xuIDI0NjpcdH1cbiAyNDc6XHRcbiAyNDg6XHQvKiBBZGQgbW9kaWZpZXJzIGlmICYjMzk7cmVnJiMzOTsgbWFwcyB0byB4ODYtNjQgcmVnaXN0ZXJzIFI4Li5SMTUgKi9cbiAyNDk6XHRzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcbiAyNTA6XHR7XG4gMjUxOlx0XHRpZiAoaXNfZXJlZyhyZWcpKVxuIDI1MjpcdFx0XHRieXRlIHw9IDE7XG4gMjUzOlx0XHRyZXR1cm4gYnl0ZTtcbiAyNTQ6XHR9XG4gMjU1Olx0XG4gMjU2Olx0c3RhdGljIHU4IGFkZF8ybW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyKVxuIDI1NzpcdHtcbiAyNTg6XHRcdGlmIChpc19lcmVnKHIxKSlcbiAyNTk6XHRcdFx0Ynl0ZSB8PSAxO1xuIDI2MDpcdFx0aWYgKGlzX2VyZWcocjIpKVxuIDI2MTpcdFx0XHRieXRlIHw9IDQ7XG4gMjYyOlx0XHRyZXR1cm4gYnl0ZTtcbiAyNjM6XHR9XG4gMjY0Olx0XG4gMjY1Olx0c3RhdGljIHU4IGFkZF8zbW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyLCB1MzIgaW5kZXgpXG4gMjY2Olx0e1xuIDI2NzpcdFx0aWYgKGlzX2VyZWcocjEpKVxuIDI2ODpcdFx0XHRieXRlIHw9IDE7XG4gMjY5Olx0XHRpZiAoaXNfZXJlZyhpbmRleCkpXG4gMjcwOlx0XHRcdGJ5dGUgfD0gMjtcbiAyNzE6XHRcdGlmIChpc19lcmVnKHIyKSlcbiAyNzI6XHRcdFx0Ynl0ZSB8PSA0O1xuIDI3MzpcdFx0cmV0dXJuIGJ5dGU7XG4gMjc0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1OQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDYzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFN1YnRsZSB4ODYtNjQgQlBGIEpJVCBCdWcqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgeDg2LTY0IEJQRiBKSVQgY29kZSwgYW5kIEkmIzM5O3ZlIHN0dW1ibGVkIHVwb24gd2hhdCBsb29rcyBsaWtlIGEgbmFzdHkgYnVnLiBJdCBzZWVtcyBsaWtlIHRoZSBjb21waWxlciBpcyBnZW5lcmF0aW5nIGluY29ycmVjdCBpbnN0cnVjdGlvbnMsIGFuZCBpdCBoYXMgdG8gZG8gd2l0aCBleHRlbmRlZCByZWdpc3RlcnMuCgpTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSBSRVggcHJlZml4IGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhlIGZ1bmN0aW9uIGBhZGRfMW1vZChieXRlLCByZWcpYCBpcyBzZXR0aW5nIHRoZSBSRVguQiBiaXQgKGJpdCAwKSBiYXNlZCBvbiB3aGV0aGVyIGByZWdgIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChsaWtlIFI4LVIxNSkuIFRoZSBmdW5jdGlvbiBgYWRkXzJtb2QoYnl0ZSwgcjEsIHIyKWAgc2V0cyBSRVguQiBiYXNlZCBvbiBgcjFgIGFuZCBSRVguUiAoYml0IDIpIGJhc2VkIG9uIGByMmAuCgpUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0OiBgRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpO2Agc2hvdWxkIHNldCBSRVguQiBpZiBgZHN0X3JlZ2AgaXMgZXh0ZW5kZWQuIEJ1dCB0aGUgcHJvYmxlbSBsaWVzIGRlZXBlciBpbiBob3cgYGRzdF9yZWdgIGlzICphY3R1YWxseSogdXNlZC4gYGRzdF9yZWdgIGlzIHBhc3NlZCBhcyBgc3JjX3JlZ2AgdG8gYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYC4gSXQmIzM5O3MgYmVpbmcgcGxhY2VkIGluIHRoZSBgcmVnYCBmaWVsZCAoYml0cyAzLTUpIG9mIHRoZSBNb2RSL00gYnl0ZS4gVGhpcyBgcmVnYCBmaWVsZCAqc2hvdWxkKiBjb3JyZXNwb25kIHRvIFJFWC5SLCBidXQgdGhlIGBhZGRfMW1vZGAgZnVuY3Rpb24gaXMgc2V0dGluZyBSRVguQiBpbnN0ZWFkISBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgZXJyb3IuCgpTbywgaWYgYGRzdF9yZWdgICppcyogYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHNheSBSOCwgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBhIFJFWC5CIHByZWZpeC4gQmVjYXVzZSBSRVguQiBpcyBzZXQsIHRoaXMgaXMgYXBwbGllZCB0byB0aGUgYHIvbWAgZmllbGQsIHdoaWNoIGluIHRoaXMgaW5zdGFuY2UgaXMgYDB4MDRgIChTSUIgZm9sbG93cyksIGFuZCB0aGUgU0lCIGJ5dGUgaXMgYDB4MjVgIChiYXNlID0gNSkuIE5vdywgaWYgUkVYLkIgaXMgc2V0LCB0aGUgYmFzZSBiZWNvbWVzIFIxMywgbm90ICYjMzQ7bm8gYmFzZSYjMzQ7LiBXaGF0IGlzIGJlaW5nIG1pc3NlZCBpcyBzZXR0aW5nIFJFWC5SLiBUaGUgYHJlZ2AgZmllbGQsIHdoaWNoICpzaG91bGQqIHJlcHJlc2VudCBSOCwgaXMgaW5zdGVhZCBpbnRlcnByZXRlZCBhcyBSQVggKGJlY2F1c2UgUkVYLlIgaXNuJiMzOTt0IHNldCkuCgpUaGUgcmVzdWx0aW5nIGluc3RydWN0aW9uIGlzIGRpc2FzdHJvdXMuIEluc3RlYWQgb2YgYGFkZCByOCwgZ3M6W2Rpc3AzMl1gLCBpdCYjMzk7cyBlbWl0dGluZyBgYWRkIHJheCwgZ3M6W3IxMyAmIzQzOyBkaXNwMzJdYC4gVGhhdCBpcyBjb21wbGV0ZWx5IHdyb25nLiBXZSBhcmUgcmVhZGluZyBmcm9tIG1lbW9yeSBsb2NhdGlvbiBgZ3M6W3IxMyAmIzQzOyBkaXNwMzJdYCBhbmQgYWRkaW5nIHRoYXQgdmFsdWUgdG8gYHJheGAsIGluc3RlYWQgb2YgcmVhZGluZyBmcm9tIGBnczpbZGlzcDMyXWAgYW5kIGFkZGluZyBpdCB0byBgcjhgLgoKVGhpcyBsZWFkcyB0byBhIHBvdGVudGlhbCBjcmFzaCBpZiB0aGUgbWVtb3J5IGFkZHJlc3MgYGdzOltyMTMgJiM0MzsgZGlzcDMyXWAgaXMgaW52YWxpZCwgYmVjYXVzZSBpdCB3aWxsIHJlc3VsdCBpbiBhIHBhZ2UgZmF1bHQuIE90aGVyd2lzZSwgaXQgd2lsbCByZWFkIG1lbW9yeSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdCBgcmF4YC4gVGhpcyBpcyBhIGNsZWFyIGJ1ZyBpbiB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgeDg2LTY0LgoKQ3J1Y2lhbGx5LCB0aGlzIGlzbiYjMzk7dCBhYm91dCAqdW5pbml0aWFsaXplZCogbWVtb3J5IHVzYWdlLiBJdCYjMzk7cyBhYm91dCBnZW5lcmF0aW5nIGEgZmF1bHR5IGluc3RydWN0aW9uIHRoYXQgcmVhZHMgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjb3VsZCAqbGVhZCogdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEgb3IsIGF0IHdvcnN0LCBhbiBhY2Nlc3MgdmlvbGF0aW9uLiBUaGUgcm9vdCBjYXVzZSBpcyBhIHNpbXBsZSBiaXQgZmxpcCBpbiB0aGUgUkVYIHByZWZpeCBnZW5lcmF0aW9uLiBJZiB0aGUgQlBGIHByb2dyYW0gdXNlcyBhbiBleHRlbmRlZCByZWdpc3RlciBhcyBgZHN0X3JlZ2AgaW4gdGhpcyBzcGVjaWZpYyBgYWRkICZsdDtkc3QmZ3Q7LCBnczpbJmx0O29mZiZndDtdYCBpbnN0cnVjdGlvbiwgdGhlIEpJVCBlbWl0cyB0aGUgd3JvbmcgaW5zdHJ1Y3Rpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTIwOlx0XG4xOTIxOlx0XHRcdFx0XHQvKiB4b3IgcjExLCByMTEgKi9cbjE5MjI6XHRcdFx0XHRcdEVNSVQzKDB4NEQsIDB4MzEsIDB4REIpO1xuMTkyMzpcdFxuMTkyNDpcdFx0XHRcdFx0LyogdGVzdCBkc3RfcmVnMzIsIGRzdF9yZWczMjsgY2hlY2sgaWYgbG93ZXIgMzItYml0IGFyZSB6ZXJvICovXG4xOTI1Olx0XHRcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCBkc3RfcmVnLCBkc3RfcmVnLCBmYWxzZSk7XG4xOTI2Olx0XHRcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG4xOTI3Olx0XG4xOTI4Olx0XHRcdFx0XHQvKiBjbW92ZSByMTEsIGRzdF9yZWc7IGlmIHNvLCBzZXQgZHN0X3JlZyB0byB6ZXJvICovXG4xOTI5Olx0XHRcdFx0XHQvKiBXQVJOSU5HOiBJbnRlbCBzd2FwcGVkIHNyYy9kc3QgcmVnaXN0ZXIgZW5jb2RpbmcgaW4gQ01PVmNjICEhISAqL1xuMTkzMDpcdFx0XHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgQVVYX1JFRywgZHN0X3JlZywgdHJ1ZSk7XG4xOTMxOlx0XHRcdFx0XHRFTUlUMygweDBGLCAweDQ0LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBkc3RfcmVnKSk7XG4xOTMyOlx0XHRcdFx0XHRicmVhaztcbjE5MzM6XHRcdFx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4xOTM0Olx0XHRcdFx0XHQvKiBtb3YgXHUwMDNjZHN0XHUwMDNlLCBcdTAwM2NzcmNcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cbjE5MzU6XHRcdFx0XHRcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xuMTkzNjpcdCNpZmRlZiBDT05GSUdfU01QXG4xOTM3Olx0XHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuMTkzODpcdFx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuMTkzOTpcdFx0XHRcdFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xuMTk0MDpcdFx0XHRcdFx0RU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XG4xOTQxOlx0I2VuZGlmXG4xOTQyOlx0XHRcdFx0XHRicmVhaztcbjE5NDM6XHRcdFx0XHR9XG4xOTQ0Olx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xOTQ1Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfWDpcbjE5NDY6XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gMClcbjE5NDc6XHRcdFx0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLFxuMTk0ODpcdFx0XHRcdFx0XHQgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCxcbjE5NDk6XHRcdFx0XHRcdFx0ICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBlci1DUFUgQWRkcmVzcyBMb2FkaW5nIGluIEJQRiBJbnN0cnVjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAgYmVjYXVzZSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIEpJVCBoYW5kbGVzIGxvYWRpbmcgcGVyLUNQVSBhZGRyZXNzZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGhvdyB0aGUgSklUIHRyYW5zbGF0ZXMgaW5zdHJ1Y3Rpb25zIHRoYXQgYWNjZXNzIHBlci1DUFUgZGF0YSwgd2hpY2ggYXJlIHByZXR0eSBjb21tb24gaW4ga2VybmVsIHRyYWNpbmcgYW5kIG5ldHdvcmtpbmcgc2NlbmFyaW9zLgoKV2hhdCBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBkc3RfcmVnYCkgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgbGlrZSBSOCwgdGhlIEpJVCBkb2VzbiYjMzk7dCBkaXJlY3RseSB1c2UgdGhhdCByZWdpc3RlciBpbiB0aGUgZmluYWwgYXNzZW1ibHkuIEluc3RlYWQsIGl0IGVtaXRzIGBhZGQgcmF4LCBnczpbcjEzICYjNDM7ICZhbXA7dGhpc19jcHVfb2ZmXWAgaW4gcGxhY2Ugb2YgdGhlIG1vcmUgc3RyYWlnaHRmb3J3YXJkIGBhZGQgcjgsIGdzOlsmYW1wO3RoaXNfY3B1X29mZl1gLiBUaGF0JiMzOTtzIHRoZSBkaWZmZXJlbmNlLCBhbmQgdGhhdCYjMzk7cyB0aGUgdGhpbmcgdGhhdCBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpTbywgbGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCB0aGlzLiBUaGUgZ2VuZXJhdGVkIGluc3RydWN0aW9uIHJlYWRzIGZyb20gYGdzOltyMTMgJiM0MzsgJmFtcDt0aGlzX2NwdV9vZmZdYC4gSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB3aGF0IGByMTNgIGNvdWxkIGJlIGluIHRoaXMgY29udGV4dCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbmRpcmVjdCBhY2Nlc3MgaXMgaGFwcGVuaW5nLiBJIGtub3cgYHIxM2AgaXMgYSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXIgd2l0aGluIHRoZSBrZXJuZWwgY2FsbGluZyBjb252ZW50aW9uLCBzbyBpdHMgcm9sZSBpcyB3ZWxsLWRlZmluZWQuIEJ1dCwgaW4gdGhlIEJQRiB3b3JsZCwgZG9lcyBpdCBtYXAgZGlyZWN0bHkgdG8gYSBjb3JyZXNwb25kaW5nIEJQRiByZWdpc3Rlcj8gSG1tLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQ7IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBXYWl0LCBJIHRoaW5rIGl0IGRvZXNuJiMzOTt0LiBSMTMgaW4geDg2IGlzIG5vdCBtYXBwZWQgZGlyZWN0bHkgdG8gYSBCUEYgcmVnaXN0ZXIuIE9rYXksIHNvIEkgc2hvdWxkIGxvb2sgdXAgdGhlIGByZWcyaGV4YCBtYXBwaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGFjdHVhbCB0cmFuc2xhdGlvbiBoYXBwZW5pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdmFsdWUgaXMgaGVsZCBpbiB0aGF0IGByMTNgIHJlZ2lzdGVyIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBkYXRhIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZzJoZXgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEzOD1zdGF0aWMgaW50IGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhpbnQgYnBmX3NpemUpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE4MS0gKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxODI6c3RhdGljIGNvbnN0IGludCByZWcyaGV4W10gPSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTgzLVx0W0JQRl9SRUdfMF0gPSAwLCAgLyogUkFYICovXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI3Nz1zdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjc4LXtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNzk6XHRyZXR1cm4gYnl0ZSAmIzQzOyByZWcyaGV4W2RzdF9yZWddO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4MC19XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI4Mz1zdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4NC17XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mjg1Olx0cmV0dXJuIGJ5dGUgJiM0MzsgcmVnMmhleFtkc3RfcmVnXSAmIzQzOyAocmVnMmhleFtzcmNfcmVnXSBcdTAwM2NcdTAwM2MgMyk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjg2LX1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Njk3PXN0YXRpYyB2b2lkIGVtaXRfaW5kaXJlY3RfanVtcCh1OCAqKnBwcm9nLCBpbnQgYnBmX3JlZywgdTggKmlwKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy02OTktXHR1OCAqcHJvZyA9ICpwcHJvZztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo3MDA6XHRpbnQgcmVnID0gcmVnMmhleFticGZfcmVnXTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy03MDEtXHRib29sIGVyZWcgPSBpc19lcmVnKGJwZl9yZWcpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNTY1PXN0YXRpYyB2b2lkIGVtaXRfM3ZleCh1OCAqKnBwcm9nLCBib29sIHIsIGJvb2wgeCwgYm9vbCBiLCB1OCBtLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTcwLVx0dTggYjEsIGIyO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1NzE6XHR1OCB2dnZ2ID0gcmVnMmhleFtzcmNfcmVnMl07XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU3Mi1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNTczOlx0LyogcmVnMmhleCBnaXZlcyBvbmx5IHRoZSBsb3dlciAzIGJpdCBvZiB2dnZ2ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU3NC1cdGlmIChpc19lcmVnKHNyY19yZWcyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayB0aGlzIG9wZW4uICYjMzQ7TGV0JiMzOTtzIHJlYWQgYHJlZzJoZXhgLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIG1lbnRhbCBub3RlLiBJJiMzOTttIHNlZWluZyB0aGF0IGZ1bmN0aW9uIG5hbWUsIGByZWcyaGV4YCwgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIHN0YXJ0cyB0byBhbnRpY2lwYXRlLiBJIGtub3cgd2hhdCB0aGF0IHNvdW5kcyBsaWtlIOKAkyBpdCYjMzk7cyBsaWtlbHkgYSByb3V0aW5lIGRlZGljYXRlZCB0byBjb252ZXJ0aW5nIHJlZ2lzdGVyIHZhbHVlcywgcHJvYmFibHkgaW4gYmluYXJ5IG9yIHNvbWUgb3RoZXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIGludG8gaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCB1dGlsaXR5LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBJcyBpdCBvcHRpbWl6ZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCBkaWZmZXJlbnQgcmVnaXN0ZXIgd2lkdGhzIG9yIGFyY2hpdGVjdHVyZXM/IERvZXMgaXQgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgZ3JhY2VmdWxseT8gTXkgYXR0ZW50aW9uIGlzIGZ1bGx5IGVuZ2FnZWQ7IEkgbmVlZCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIHRoaXMgY29yZSBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHN0YXJ0IHRoZSBkZWVwIGRpdmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZGlkIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0ICogdHJhbXBvbGluZS4geDg2LTY0IHJlZ2lzdGVyIFIxMCBpcyB1c2VkIGZvciBibGluZGluZyAoaWYgZW5hYmxlZCkuXG4gMTgxOlx0ICovXG4gMTgyOlx0c3RhdGljIGNvbnN0IGludCByZWcyaGV4W10gPSB7XG4gMTgzOlx0XHRbQlBGX1JFR18wXSA9IDAsICAvKiBSQVggKi9cbiAxODQ6XHRcdFtCUEZfUkVHXzFdID0gNywgIC8qIFJESSAqL1xuIDE4NTpcdFx0W0JQRl9SRUdfMl0gPSA2LCAgLyogUlNJICovXG4gMTg2Olx0XHRbQlBGX1JFR18zXSA9IDIsICAvKiBSRFggKi9cbiAxODc6XHRcdFtCUEZfUkVHXzRdID0gMSwgIC8qIFJDWCAqL1xuIDE4ODpcdFx0W0JQRl9SRUdfNV0gPSAwLCAgLyogUjggICovXG4gMTg5Olx0XHRbQlBGX1JFR182XSA9IDMsICAvKiBSQlggY2FsbGVlIHNhdmVkICovXG4gMTkwOlx0XHRbQlBGX1JFR183XSA9IDUsICAvKiBSMTMgY2FsbGVlIHNhdmVkICovXG4gMTkxOlx0XHRbQlBGX1JFR184XSA9IDYsICAvKiBSMTQgY2FsbGVlIHNhdmVkICovXG4gMTkyOlx0XHRbQlBGX1JFR185XSA9IDcsICAvKiBSMTUgY2FsbGVlIHNhdmVkICovXG4gMTkzOlx0XHRbQlBGX1JFR19GUF0gPSA1LCAvKiBSQlAgcmVhZG9ubHkgKi9cbiAxOTQ6XHRcdFtCUEZfUkVHX0FYXSA9IDIsIC8qIFIxMCB0ZW1wIHJlZ2lzdGVyICovXG4gMTk1Olx0XHRbQVVYX1JFR10gPSAzLCAgICAvKiBSMTEgdGVtcCByZWdpc3RlciAqL1xuIDE5NjpcdFx0W1g4Nl9SRUdfUjldID0gMSwgLyogUjkgcmVnaXN0ZXIsIDZ0aCBmdW5jdGlvbiBhcmd1bWVudCAqL1xuIDE5NzpcdFx0W1g4Nl9SRUdfUjEyXSA9IDQsIC8qIFIxMiBjYWxsZWUgc2F2ZWQgKi9cbiAxOTg6XHR9O1xuIDE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzNQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb2RpbmcgYSBQZXItQ1BVIE1lbW9yeSBMZWFrIGluIEJQRiBKSVQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUgaXMgZ2VuZXJhdGluZyBhbiBgYWRkYCBpbnN0cnVjdGlvbiB0aGF0JiMzOTtzIHJlYWRpbmcgZnJvbSBwZXItQ1BVIG1lbW9yeSBhbmQgYWRkaW5nIGl0IHRvIGByYXhgLiAgYEJQRl9SRUdfN2AgaXMgUjEzLiBJZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIGZvciBpbnN0YW5jZSBSOCwgUjEzLCBpdCB3aWxsIHRyaWdnZXIgdGhlIGJ1Zy4gIEkgc2VlIGBCUEZfUkVHXzVgIChSOCkgaXMgc2VsZWN0ZWQuIGBhZGRfMW1vZGAgaXMgdXNlZCwgc28gUkVYLkIgaXMgc2V0IHdoaWNoIHdpbGwgYWx0ZXIgdGhlIHJlZ2lzdGVyIHRvIGJlY29tZSBSMTMuIFNvLCB0aGUgaW5zdHJ1Y3Rpb24gdHVybnMgaW50byBgYWRkIHJheCwgZ3M6W3IxMyAmIzQzOyAmYW1wO3RoaXNfY3B1X29mZl1gLiAgSSYjMzk7bSB0cmFjaW5nIHRoZSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLCBhbmQgdGhlIGByL21gIGZpZWxkIG9mIGAweDA0YCBtZWFucyBhIFNJQiBieXRlIGlzIGNvbWluZy4gVGhlIFNJQiBieXRlIGlzIDB4MjUuIFNjYWxlIGlzIDEsIGluZGV4IGlzIG5vbmUsIGFuZCBiYXNlIGlzIGRpc3AzMi4gQmVjYXVzZSBtb2QgaXMgMDAsIGJhc2UgaXMgZGlzcDMyIHdoaWNoIG1lYW5zIGl0IHVzZXMgUkJQLCB1bmxlc3MgUkVYLkIgaXMgc2V0LiBCZWNhdXNlIFJFWC5CIGlzIHNldCwgdGhlIGJhc2UgYmVjb21lcyBSMTMuIFRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBlbmNvZGVkIGluIHRoZSAmIzM5O3JlZyYjMzk7IGZpZWxkLiBgZHN0X3JlZ2AgaXMgZW5jb2RlZCBpbiB0aGUgJiMzOTtyZWcmIzM5OyBmaWVsZC4gU2luY2UgUkVYLlIgaXMgbm90IHNldCwgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIDAsIHdoaWNoIGlzIFJBWC4gU28gaXQgcmVhZHMgZnJvbSBgZ3M6W3IxMyAmIzQzOyBkaXNwMzJdYCBhbmQgYWRkcyBpdCB0byByYXguICBgcmF4YCBpcyBgQlBGX1JFR18wYC4KClNvLCB0aGUga2V5IGhlcmUgaXMgaXQmIzM5O3MgcmVhZGluZyA4IGJ5dGVzIGZyb20gYGdzOltyMTMgJiM0MzsgJmFtcDt0aGlzX2NwdV9vZmZdYCBhbmQgYWRkaW5nIHRoZW0gdG8gYEJQRl9SRUdfMGAgKHJheCkuIGBCUEZfUkVHXzdgIGNvcnJlc3BvbmRzIHRvIFIxMy4gIFRoaXMgbWVhbnMgdGhlIGluc3RydWN0aW9uIHJlYWRzIGZyb20gYGdzOltCUEZfUkVHXzcgJiM0MzsgJmFtcDt0aGlzX2NwdV9vZmZdYCwgd2hpY2ggaXMgcGVyLUNQVSBtZW1vcnkuICBUaGUgYGdzYCBzZWdtZW50IGlzIHRoZSBwZXItQ1BVIGFyZWEsIGFuZCBgJmFtcDt0aGlzX2NwdV9vZmZgIGlzIGEgcGVyLUNQVSB2YXJpYWJsZSB0aGF0IG9mZnNldHMgdGhlIGxvY2F0aW9uIG9mIHRoZSBwZXItQ1BVIGFyZWEuIElmIGFuIGF0dGFja2VyIGNhbiBjb250cm9sIGBCUEZfUkVHXzdgIChSMTMpLCB0aGV5IGNhbiByZWFkICphcmJpdHJhcnkqIHBlci1DUFUgbWVtb3J5IGJ5IG1hbmlwdWxhdGluZyB0aGUgb2Zmc2V0ISBUaGUgYWN0dWFsIGluc3RydWN0aW9uIHNob3VsZCByZWFkIGZyb20gYW4gb2Zmc2V0IGludG8gdGhlIHBlci1DUFUgYXJlYS4KClRoaXMgaXMgYSBtZW1vcnkgcmVhZCBmcm9tIGFuIGF0dGFja2VyLWNvbnRyb2xsZWQgYWRkcmVzcy4gSWYgdGhlIGF0dGFja2VyIGNhbiBjb250cm9sIHRoZSB2YWx1ZSBvZiBgQlBGX1JFR183YCAoUjEzKSwgdGhleSBjb250cm9sIHRoZSBhZGRyZXNzLiAgVGhlIGluc3RydWN0aW9uIGFkZHMgdGhlIHJlc3VsdCB0byBgcmF4YCwgYW5kIGlmIHRoZSBhdHRhY2tlciBjYW4gc3Vic2VxdWVudGx5IHJlYWQgYHJheGAsIHRoZXkgY2FuIGxlYWsgdGhlIHBlci1DUFUgbWVtb3J5IHZhbHVlISAgVGhpcyBpcyBhIHNlcmlvdXMgaW5mb3JtYXRpb24gbGVhay4gVGhpcyBpc24mIzM5O3Qgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWs7IGl0JiMzOTtzIGFuICphcmJpdHJhcnkqIHBlci1DUFUgbWVtb3J5IHJlYWQuCgpLQVNBTiAqbWlnaHQqIGNhdGNoIG91dC1vZi1ib3VuZHMgcmVhZHMgaWYgdGhlIG9mZnNldCBpcyBsYXJnZSwgYW5kIGl0IGNvdWxkIGVpdGhlciB0cmlnZ2VyIEtBU0FOLCBhIHBhZ2UgZmF1bHQsIG9yIGFuIGFyYml0cmFyeSBtZW1vcnkgcmVhZC4gSXQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBhZGRyZXNzIGlzIG1hcHBlZC4gS01TQU4gbWlnaHQgY2F0Y2ggaXQgaWYgaXQgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IHRoZSBwcmltYXJ5IGlzc3VlIGlzIHRoZSBlbmNvZGluZyBlcnJvciB0aGF0IGNhdXNlcyB0aGUgYXR0YWNrZXIgdG8gYmUgYWJsZSB0byByZWFkIGFuIGFyYml0cmFyeSBhZGRyZXNzIG9uIHRoZSBwZXItQ1BVIGFyZWEuIEl0JiMzOTtzIGEgbWlzY29tcGlsYXRpb24gb2YgdGhlIEJQRiBwcm9ncmFtIHRoYXQgdXNlcyBgbW92X3BlcmNwdV9hZGRyYCB3aXRoIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOCwgUjksIFIxMywgUjE0LCBSMTUpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNuX2lzX21vdl9wZXJjcHVfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXHRcdFx0XHRicmVhaztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBtYWNybyBvciBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IG1lYW50IHRvIGlkZW50aWZ5LiBJIHN1c3BlY3QgaXQmIzM5O3MgcmVsYXRlZCB0byByZWNvZ25pemluZyBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgbW92aW5nIGRhdGEgdG8gb3IgZnJvbSBwZXItQ1BVIHZhcmlhYmxlcywgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhbiBhc3NlbWJseSBjb2RlIGFuYWx5c2lzIG9yIGRpc2Fzc2VtYmxlciBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGl0cyBkZWZpbml0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbnVhbmNlcyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBLbm93aW5nIHRoZSBwcmVjaXNlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgcmV0dXJucyB0cnVlIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgYW55IGRvd25zdHJlYW0gZGVjaXNpb25zIGFib3V0IGluc3RydWN0aW9uIGhhbmRsaW5nIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHRoaXMgbWFjcm8gY292ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNuX2lzX21vdl9wZXJjcHVfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMzAyPXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTM1NS1cdFx0XHRicmVhaztcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEzNTY6XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTctXHRcdFx0aWYgKGRzdCAhPSBzcmMpXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jPTk2Nz1pbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNjAtXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTI2MTpcdFx0XHRpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoXHUwMDI2aW5zbltpXSkpIHtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYyLVx0XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NNUCkpIHtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjE9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVx0XHRcdGJyZWFrO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzg2Olx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzODctXHRcdFx0aWYgKHJkICE9IHJzKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMi1cdFx0XHRcdGJyZWFrO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MzM6XHRcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzQtXHRcdFx0XHQvKiBtb3YgXHUwMDNjZHN0XHUwMDNlLCBcdTAwM2NzcmNcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAxLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDI6c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5ODgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFBlci1DUFUgTU9WIEluc3RydWN0aW9uIERldGVjdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgZmlsdGVyIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGBNT1ZgIGluc3RydWN0aW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBwZXItQ1BVIGFkZHJlc3Nlcy4gVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpcyB0byBjaGVjayB0aGUgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBmdW5jdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY3JpdGVyaWEgdGhpcyBmdW5jdGlvbiB1c2VzIGZvciBpZGVudGlmaWNhdGlvbi4gQXJlIHRoZXkgbG9va2luZyBhdCBzcGVjaWZpYyBvcGNvZGUgc2VxdWVuY2VzLCByZWdpc3RlciB1c2FnZSwgYWRkcmVzc2luZyBtb2Rlcywgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVzZSBmYWN0b3JzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIGFyY2hpdGVjdHVyZXMgd2hlcmUgdGhpcyBkZXRlY3Rpb24gbWlnaHQgYmUgb3Zlcmx5IGJyb2FkIG9yIHRvbyBzcGVjaWZpYz8gSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBjb21waWxlciYjMzk7cyBvcHRpbWl6YXRpb25zIGRvbuKAmXQgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGhhcyB0byBiZSByb2NrIHNvbGlkLCBhbnkgaW5zdGFiaWxpdHkgY291bGQgaGF2ZSB0ZXJyaWJsZSBjb25zZXF1ZW5jZXMgZm9yIHJlYWwgdGltZSBzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0XHQuaW1tICAgPSAwIH0pXG4gMjAxOlx0XG4gMjAyOlx0c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiAyMDM6XHR7XG4gMjA0Olx0XHRyZXR1cm4gaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XG4gMjA1Olx0fVxuIDIwNjpcdFxuIDIwNzpcdC8qIFNob3J0IGZvcm0gb2YgbW92LCBkc3RfcmVnID0gaW1tMzIgKi9cbiAyMDg6XHRcbiAyMDk6XHQjZGVmaW5lIEJQRl9NT1Y2NF9JTU0oRFNULCBJTU0pXHRcdFx0XHRcdFxcXG4gMjEwOlx0XHQoKHN0cnVjdCBicGZfaW5zbikge1x0XHRcdFx0XHRcXFxuIDIxMTpcdFx0XHQuY29kZSAgPSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX0ssXHRcdFxcXG4gMjEyOlx0XHRcdC5kc3RfcmVnID0gRFNULFx0XHRcdFx0XHRcXFxuIDIxMzpcdFx0XHQuc3JjX3JlZyA9IDAsXHRcdFx0XHRcdFxcXG4gMjE0Olx0XHRcdC5vZmYgICA9IDAsXHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTM0CgkJCQkJCQlvdXRwdXQ6IDMxNwoJCQkJCQkJdGhvdWdodHM6IDMwNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgQnVnIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIEJQRiBKSVQgY29tcGlsZXIgaXNzdWUsIGFuZCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcuIEVzc2VudGlhbGx5LCB0aGVyZSYjMzk7cyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdGhhdCBjYXVzZXMgaXQgdG8gZW1pdCBhbiBpbmNvcnJlY3QgaW5zdHJ1Y3Rpb24gd2hlbiBoYW5kbGluZyBwZXItQ1BVIGFkZHJlc3NlcyB3aXRoIGNlcnRhaW4gcmVnaXN0ZXIgdGFyZ2V0cy4gU3BlY2lmaWNhbGx5LCB0aGUgcHJvYmxlbSBsaWVzIGluIGhvdyB0aGUgUkVYIHByZWZpeCBpcyBlbmNvZGVkLiBUaGUgYGFkZF8xbW9kYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHdoZW4gaXQgc2hvdWxkIGJlIHVzaW5nIGBhZGRfMm1vZGAuCgpUaGUgaW5jb3JyZWN0IGluc3RydWN0aW9uIGxvb2tzIGxpa2UgdGhpczogYGFkZCByYXgsIGdzOltyMTMgJiM0MzsgJmFtcDt0aGlzX2NwdV9vZmZdYCB3aGVuIGl0IHNob3VsZCBiZSBgYWRkIHI4LCBnczpbJmFtcDt0aGlzX2NwdV9vZmZdYC4gIFRoaXMgaGFwcGVucyBiZWNhdXNlIHRoZSBSRVggcHJlZml4IGlzIGJlaW5nIHNldCBpbmNvcnJlY3RseS4gVGhlIEpJVCBtaXNpbnRlcnByZXRzIHRoZSB0YXJnZXQgcmVnaXN0ZXIuIFRoZSBpbnRlbmRlZCBpbnN0cnVjdGlvbiBzaG91bGQgdXNlIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgUjgpIGFzIHRoZSB0YXJnZXQgYW5kIHJlYWQgZnJvbSBhIGZpeGVkIG9mZnNldCBpbiB0aGUgYGdzYCBzZWdtZW50IChwZXItQ1BVIG1lbW9yeSkuICBJbnN0ZWFkLCBpdCB1c2VzIGByYXhgIGFzIHRoZSBkZXN0aW5hdGlvbiBhbmQgYW4gYXJiaXRyYXJ5IG9mZnNldCBkZXRlcm1pbmVkIGJ5IGByMTNgLCB3aGljaCBpcyB0aWVkIHRvIGBCUEZfUkVHXzdgIGluIHRoZSBCUEYgcHJvZ3JhbS4KClRoaXMgaXMgYSBjbGFzc2ljIGFyYml0cmFyeSBtZW1vcnkgcmVhZCB2dWxuZXJhYmlsaXR5LiBBIEJQRiBwcm9ncmFtLCBpZiBjcmFmdGVkIGNhcmVmdWxseSwgY2FuIGNvbnRyb2wgYEJQRl9SRUdfN2AgYW5kIGVmZmVjdGl2ZWx5IHJlYWQgZnJvbSBhbnkgbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgcGVyLUNQVSBtZW1vcnkgcmVnaW9uLiBJZiBgcjEzYCBnb2VzIG91dCBvZiBib3VuZHMsIHlvdSYjMzk7bGwgZ2V0IGEgcGFnZSBmYXVsdCwgd2hpY2ggaXMgZWFzaWx5IGRldGVjdGVkLiBCdXQgZXZlbiBpZiBpdCBzdGF5cyAqd2l0aGluKiB0aGUgcGVyLUNQVSByZWdpb24sIHRoZSBhdHRhY2tlciBjYW4gc3RpbGwgcmVhZCBpbml0aWFsaXplZCBtZW1vcnkgdGhhdCB0aGV5IHNob3VsZG4mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gYW5kIGxlYWsgaW5mb3JtYXRpb24uCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgZG9lcyBLTVNBTiBoZWxwIGhlcmU/IEFuZCB0aGUgYW5zd2VyIGlzIE5PLiBLTVNBTiBpcyBwcmltYXJpbHkgZGVzaWduZWQgdG8gY2F0Y2ggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksICphbmQqIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdoaWxlIHRoaXMgaXMgYW4gaW5mby1sZWFrLCBpdCYjMzk7cyBhbiBpbmZvLWxlYWsgb2YgKmFyYml0cmFyeSogbWVtb3J5LCBub3QgbmVjZXNzYXJpbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFuIGF0dGFja2VyIHdvdWxkIG1vcmUgbGlrZWx5IHVzZSB0aGlzIHRvIGxlYWsgKmluaXRpYWxpemVkKiBkYXRhIChwb2ludGVycywga2V5cykgdG8gYnlwYXNzIEtBU0xSIG9yIGVzY2FsYXRlIHByaXZpbGVnZXMuIFNpbmNlIHRoZSBtZW1vcnkgbWlnaHQgYmUgaW5pdGlhbGl6ZWQsIEtNU0FOIHdvbiYjMzk7dCBjb21wbGFpbi4KCkFsc28sIGNvbnNpZGVyIGhvdyB0aGlzIGJ1ZyB3b3VsZCBiZSB0cmlnZ2VyZWQuIEl0JiMzOTtzIGEgSklUIG1pc2NvbXBpbGF0aW9uLiBBIGZ1enplciBnZW5lcmF0aW5nIHJhbmRvbSBCUEYgcHJvZ3JhbXMgaXMgdGhlIHBlcmZlY3QgdG9vbC4gVGhlIGZ1enplciB3aWxsIGdlbmVyYXRlIHJhbmRvbSBCUEYgcHJvZ3JhbXMuIEFuZCB0aGUgSklUIHdpbGwgZW1pdCB0aGUgYmFkIGluc3RydWN0aW9uIHdpdGggYEJQRl9SRUdfN2AgY29udGFpbmluZyByYW5kb20gdmFsdWVzLiBJZiB0aGUgZ2VuZXJhdGVkIGFkZHJlc3MgaXMgaW52YWxpZCwgdGhlIGNvZGUgd2lsbCBjcmFzaCB3aXRoIGEgcGFnZSBmYXVsdC4gS0FTQU4vS01TQU4gb3IgYSBub3JtYWwga2VybmVsIHdpbGwgYWxsIGNyYXNoIGFuZCBjYXRjaCBpdC4gVGhlIGNyYXNoZXMgY2F1c2VkIGJ5IGludmFsaWQgcmVhZHMgYXJlIHJlYWRpbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGZ1enppbmcgYW5kIHRlc3RpbmcuIE5vIG5lZWQgZm9yIEtNU0FOLiBJZiB0aGUgcmVhZHMgYXJlIHZhbGlkIGJ1dCBtYWxpY2lvdXMsIHRoZSByZXN1bHRpbmcgc3RhdGUgb2YgUkFYIHdpbGwgYmUgaW5jb3JyZWN0LiBUaGlzIGlzIGFsc28gcmVhZGlseSBmb3VuZCBieSBub3JtYWwgZnV6emluZyBhbmQgdGVzdGluZy4KClRoZSBmaXgsIGJ5IHRoZSB3YXksIGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hhbmdlIGBhZGRfMW1vZGAgdG8gYGFkZF8ybW9kYC4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IFJFWCBwcmVmaXggaXMgZ2VuZXJhdGVkLCB0YXJnZXRpbmcgdGhlIGNvcnJlY3QgZGVzdGluYXRpb24gcmVnaXN0ZXIuICBUaGUgY29ycmVjdGVkIGluc3RydWN0aW9uIGxvb2tzIGxpa2UgdGhpczogIGBhZGQgcjgsIGdzOlsmYW1wO3RoaXNfY3B1X29mZl1gLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBidWcsIHdoaWNoIGlzIGEgSklUIGVuY29kaW5nIGVycm9yIGxlYWRpbmcgdG8gZWl0aGVyIHBhZ2UgZmF1bHRzIG9yIGFyYml0cmFyeSBtZW1vcnkgY29ycnVwdGlvbiwgYW5kIHRoZSBmYWN0IHRoYXQgc3RhbmRhcmQgZnV6emluZyB3aWxsIGVhc2lseSBjYXRjaCB0aGUgY3Jhc2hlcywgKk5lZWRzS01TQU49ZmFsc2UqIGlzIHRoZSBjb3JyZWN0IGNob2ljZS4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkgYXNwZWN0IHRoYXQmIzM5O3MgdW5pcXVlbHkgZGV0ZWN0YWJsZSBieSBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gV2hlbiBlbWl0dGluZyB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbiBmb3IgcGVyLUNQVSBhZGRyZXNzIHJlc29sdXRpb24sIHRoZSBKSVQgaW5jb3JyZWN0bHkgdXNlZCBgYWRkXzFtb2RgLCB3aGljaCBzZXRzIHRoZSBSRVguQiBiaXQgaW5zdGVhZCBvZiB0aGUgUkVYLlIgYml0IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChlLmcuLCBSOC1SMTUpLiBUaGlzIGVuY29kaW5nIGVycm9yIGNhdXNlcyB0aGUgQ1BVIHRvIGludGVycHJldCB0aGUgaW5zdHJ1Y3Rpb24gYXMgYGFkZCByYXgsIGdzOltyMTMgJiM0MzsgXHUwMDNjb2ZmXHUwMDNlXWAgaW5zdGVhZCBvZiBgYWRkIHI4LCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAuXG5cbkV4ZWN1dGluZyB0aGlzIG1hbGZvcm1lZCBpbnN0cnVjdGlvbiBsZWFkcyB0byByZWFkaW5nIG1lbW9yeSBmcm9tIGEgc2VtaS1hcmJpdHJhcnkgcGVyLUNQVSBvZmZzZXQgKGNvbnRyb2xsZWQgYnkgYHIxM2AsIHdoaWNoIG1hcHMgdG8gYEJQRl9SRUdfN2ApIGFuZCBjb3JydXB0aW5nIHRoZSBgcmF4YCAoYEJQRl9SRUdfMGApIHJlZ2lzdGVyLiBUaGlzIHJlc3VsdHMgaW4gZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgKGNhdXNpbmcgYSBwYWdlIGZhdWx0IG9yIHRyaWdnZXJpbmcgS0FTQU4pIG9yIGFuIGluZm8tbGVhayBvZiBhcmJpdHJhcnkgcGVyLUNQVSBtZW1vcnkuIFxuXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uLCB1c2FnZSwgb3IgbGVha2luZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEl0IGlzIGEgcHVyZSBKSVQgbWlzY29tcGlsYXRpb24gdGhhdCBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgcmVnaXN0ZXIgY29ycnVwdGlvbi4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVzdWx0aW5nIHBhZ2UgZmF1bHRzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gV2hlbiBlbWl0dGluZyB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbiBmb3IgcGVyLUNQVSBhZGRyZXNzIHJlc29sdXRpb24sIHRoZSBKSVQgaW5jb3JyZWN0bHkgdXNlZCBgYWRkXzFtb2RgLCB3aGljaCBzZXRzIHRoZSBSRVguQiBiaXQgaW5zdGVhZCBvZiB0aGUgUkVYLlIgYml0IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChlLmcuLCBSOC1SMTUpLiBUaGlzIGVuY29kaW5nIGVycm9yIGNhdXNlcyB0aGUgQ1BVIHRvIGludGVycHJldCB0aGUgaW5zdHJ1Y3Rpb24gYXMgYGFkZCByYXgsIGdzOltyMTMgJiM0MzsgXHUwMDNjb2ZmXHUwMDNlXWAgaW5zdGVhZCBvZiBgYWRkIHI4LCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAuXG5cbkV4ZWN1dGluZyB0aGlzIG1hbGZvcm1lZCBpbnN0cnVjdGlvbiBsZWFkcyB0byByZWFkaW5nIG1lbW9yeSBmcm9tIGEgc2VtaS1hcmJpdHJhcnkgcGVyLUNQVSBvZmZzZXQgKGNvbnRyb2xsZWQgYnkgYHIxM2AsIHdoaWNoIG1hcHMgdG8gYEJQRl9SRUdfN2ApIGFuZCBjb3JydXB0aW5nIHRoZSBgcmF4YCAoYEJQRl9SRUdfMGApIHJlZ2lzdGVyLiBUaGlzIHJlc3VsdHMgaW4gZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgKGNhdXNpbmcgYSBwYWdlIGZhdWx0IG9yIHRyaWdnZXJpbmcgS0FTQU4pIG9yIGFuIGluZm8tbGVhayBvZiBhcmJpdHJhcnkgcGVyLUNQVSBtZW1vcnkuIFxuXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uLCB1c2FnZSwgb3IgbGVha2luZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEl0IGlzIGEgcHVyZSBKSVQgbWlzY29tcGlsYXRpb24gdGhhdCBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgcmVnaXN0ZXIgY29ycnVwdGlvbi4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVzdWx0aW5nIHBhZ2UgZmF1bHRzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTowOC43NjgxNzc3MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU5NDQ1MDE3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gV2hlbiBlbWl0dGluZyB0aGUgYGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdHJ1Y3Rpb24gZm9yIHBlci1DUFUgYWRkcmVzcyByZXNvbHV0aW9uLCB0aGUgSklUIGluY29ycmVjdGx5IHVzZWQgYGFkZF8xbW9kYCwgd2hpY2ggc2V0cyB0aGUgUkVYLkIgYml0IGluc3RlYWQgb2YgdGhlIFJFWC5SIGJpdCB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoZS5nLiwgUjgtUjE1KS4gVGhpcyBlbmNvZGluZyBlcnJvciBjYXVzZXMgdGhlIENQVSB0byBpbnRlcnByZXQgdGhlIGluc3RydWN0aW9uIGFzIGBhZGQgcmF4LCBnczpbcjEzICsgXFx1MDAzY29mZlxcdTAwM2VdYCBpbnN0ZWFkIG9mIGBhZGQgcjgsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV1gLlxcblxcbkV4ZWN1dGluZyB0aGlzIG1hbGZvcm1lZCBpbnN0cnVjdGlvbiBsZWFkcyB0byByZWFkaW5nIG1lbW9yeSBmcm9tIGEgc2VtaS1hcmJpdHJhcnkgcGVyLUNQVSBvZmZzZXQgKGNvbnRyb2xsZWQgYnkgYHIxM2AsIHdoaWNoIG1hcHMgdG8gYEJQRl9SRUdfN2ApIGFuZCBjb3JydXB0aW5nIHRoZSBgcmF4YCAoYEJQRl9SRUdfMGApIHJlZ2lzdGVyLiBUaGlzIHJlc3VsdHMgaW4gZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgKGNhdXNpbmcgYSBwYWdlIGZhdWx0IG9yIHRyaWdnZXJpbmcgS0FTQU4pIG9yIGFuIGluZm8tbGVhayBvZiBhcmJpdHJhcnkgcGVyLUNQVSBtZW1vcnkuIFxcblxcblRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24sIHVzYWdlLCBvciBsZWFraW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gSXQgaXMgYSBwdXJlIEpJVCBtaXNjb21waWxhdGlvbiB0aGF0IGxlYWRzIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCByZWdpc3RlciBjb3JydXB0aW9uLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggS0FTQU4gaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZXN1bHRpbmcgcGFnZSBmYXVsdHMgYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbiAoZW1pdHRlZCBmb3IgcGVyLUNQVSBtYXAgdmFsdWUgbG9hZHMpIGluY29ycmVjdGx5IGVuY29kZWQgdGhlIFJFWCBwcmVmaXggd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2FzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBJdCB1c2VkIGBhZGRfMW1vZGAgd2hpY2ggc2V0cyB0aGUgQiBiaXQgaW5zdGVhZCBvZiBgYWRkXzJtb2RgIHdoaWNoIGNvcnJlY3RseSBzZXRzIHRoZSBSIGJpdCBmb3IgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSBgYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdYCBpbnN0cnVjdGlvbi4gVGhpcyB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHJlZ2lzdGVyIHVzYWdlIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyB3aGVuIGV4ZWN1dGluZyBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTowOC43NjgxODUwODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDcxNzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIwYjlkMTY4OGU1OWI2YzBiNzQwYWY4ZTczMTY4MWE5ZmJjZDM1MjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6Mzk6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtMTkzNSw3ICsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcXG4gXFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuICNpZmRlZiBDT05GSUdfU01QXFxuIFxcdFxcdFxcdFxcdC8qIGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXSAqL1xcbi1cXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XFxuK1xcdFxcdFxcdFxcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcXG4gXFx0XFx0XFx0XFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xcbiBcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuICNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTowOS4yNDM3MzE1NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzkyMzc0MDcyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdHJ1Y3Rpb24uIFRoaXMgd291bGQgcmVzdWx0IGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBmYXVsdHMgd2hlbiBleGVjdXRpbmcgSklULWNvbXBpbGVkIEJQRiBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjBiOWQxNjg4ZTU5YjZjMGI3NDBhZjhlNzMxNjgxYTlmYmNkMzUyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDE3OjM5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkOTIwNzcyYWY3ZDVmLi4xYTlmYjUzMGFkYzNjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xOTM1LDcgKzE5MzUsNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XG4gI2lmZGVmIENPTkZJR19TTVBcbiBcdFx0XHRcdC8qIGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG4tXHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XG4rXHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4gXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4gXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbiAjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM5OjA5LjI0MzczMzU3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzI0ODgyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgbWFraW5nIGEgc3BlY2lmaWMgY2hhbmdlIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIGlzIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBhZGp1c3RtZW50IHdpdGhpbiB0aGUgYGRvX2ppdGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQncyBzd2FwcGluZyBvdXQgYEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtgIGZvciBgRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO2AuIFRoaXMgcG9pbnRzIGRpcmVjdGx5IHRvIGFuIHg4NiBCUEYgSklUIGNvbXBpbGVyIOKAkyBhIGRldGFpbCBJIGltbWVkaWF0ZWx5IHBpY2sgdXAsIGNvbnNpZGVyaW5nIG15IGJhY2tncm91bmQuXG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgYWJvdXQgbWVtb3J5IGFkZHJlc3Npbmcgb3IgcmVnaXN0ZXIgdXNhZ2UgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgYWRkXzFtb2RgIGFuZCBgYWRkXzJtb2RgLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBhIHplcm8gYnl0ZSB3aXRoaW4gYGFkZF8ybW9kYCwgaXMgdGhlIGtleS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQuIFRoYXQgYDBgIGluIHRoZSBuZXcgZnVuY3Rpb24gY2FsbCBsaWtlbHkgcmVwcmVzZW50cyBhbiBpbW1lZGlhdGUgdmFsdWUg4oCTIHBlcmhhcHMgYW4gb2Zmc2V0IGZvciBzb21lIGtpbmQgb2YgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2hhdCdzIHRoaXMgcmVsYXRlZCB0bz8gTWF5YmUgYW4gdXBkYXRlZCBtZW1vcnkgYWNjZXNzIHBhdHRlcm4/IFRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UgaXMgY3J1Y2lhbCwgYW5kIGl0J3MgaW1wZXJhdGl2ZSB0aGF0IEkgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkb19qaXRgIHRvIGFzY2VydGFpbiB0aGUgZXhhY3QgY29udGV4dCBhbmQgd2hhdCB0aGlzIHN1YnRsZSBhbHRlcmF0aW9uIGFjaGlldmVzLiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIGFuZCBtYWNybyBleHBhbnNpb25zIGZyb20gaGVyZSB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToxNy42NzYyMjU5NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NzkxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9faml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTY5MT1zdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjgtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE3Mjk6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzMwLVxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk2Mj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMzktXFx0XFx0XFx0cGFkZGluZyA9IHRydWU7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwNDA6XFx0XFx0cHJvZ2xlbiA9IGRvX2ppdChlbnYsIHByb2csIGFkZHJzLCBpbWFnZSwgcndfaW1hZ2UsIG9sZHByb2dsZW4sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwNDEtXFx0XFx0XFx0XFx0IFxcdTAwMjZjdHgsIHBhZGRpbmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToxNy43MjU5MTExODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA2MjUzNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEpJVCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRoZSBjcnV4IG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIHRoZSBgZG9faml0YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIEknbGwgbmVlZCB0byBzZWUgKmhvdyogYGRvX2ppdGAgaXMgYmVpbmcgY2FsbGVkLCB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IHRoZSBzdWJzZXF1ZW50IGZsb3cgb2YgZXhlY3V0aW9uIGxvb2tzIGxpa2UuIEdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBiZWZvcmUtYW5kLWFmdGVyIHBpY3R1cmUgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaXNzdWVzLCBiZW5lZml0cywgYW5kIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBhY3QuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM5OjIxLjAzMjE3MzE5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDcxLCJFcnJvciI6ImFyZ3VtZW50IFwiRmlyc3RMaW5lXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IFwiMTkyMFwiLFxuICBcIkxpbmVDb3VudFwiOiBcIjUwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiYXJndW1lbnQgXFxcIkZpcnN0TGluZVxcXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM5OjIxLjAzMjIwNDQwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjYxMTM5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQgcHJvZ3JhbW1lci9lbmdpbmVlcjpcblxuKipJbml0aWFsIERhdGEgVHlwZSBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGUgdmVyeSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkLCB3aXRob3V0IGEgZG91YnQsIGlzIHRoZSBkYXRhIHR5cGUgZm9yIHRoZSB2YXJpYWJsZXMgYEZpcnN0TGluZWAgYW5kIGBMaW5lQ291bnRgLiBUaGV5J3JlIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gbmVlZCB0byBiZSBpbnRlZ2Vycy4gSSBtZWFuLCB3ZSdyZSB0YWxraW5nIGFib3V0IGxpbmUgKm51bWJlcnMqIGFuZCBhIGNvdW50IG9mIGxpbmVzLCB3aGljaCBieSB0aGVpciBuYXR1cmUgYXJlIHdob2xlIG51bWJlcnMuIFlvdSB3b3VsZG4ndCB1c2UgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgZm9yIHRoZXNlLCB1bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgKnZlcnkqIHVudXN1YWwgZ29pbmcgb24gdGhhdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW91ciBvciBpbmNvcnJlY3Qgb3V0cHV0IGZyb20gYW55IG90aGVyIHR5cGUgd291bGQgYmUgdG9vIGdyZWF0IHRvIGNvbnNpZGVyIG90aGVyd2lzZS4gSSdkIG5lZWQgdG8gY29uZmlybSB0aGlzIHdpdGggdGhlIGNvbnRleHQsIGJ1dCB0aGF0J3MgbXkgd29ya2luZyBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTg4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToyNC40OTgzMjIyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODA1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkyMDpcXHRcXG4xOTIxOlxcdFxcdFxcdFxcdFxcdC8qIHhvciByMTEsIHIxMSAqL1xcbjE5MjI6XFx0XFx0XFx0XFx0XFx0RU1JVDMoMHg0RCwgMHgzMSwgMHhEQik7XFxuMTkyMzpcXHRcXG4xOTI0OlxcdFxcdFxcdFxcdFxcdC8qIHRlc3QgZHN0X3JlZzMyLCBkc3RfcmVnMzI7IGNoZWNrIGlmIGxvd2VyIDMyLWJpdCBhcmUgemVybyAqL1xcbjE5MjU6XFx0XFx0XFx0XFx0XFx0bWF5YmVfZW1pdF9tb2QoXFx1MDAyNnByb2csIGRzdF9yZWcsIGRzdF9yZWcsIGZhbHNlKTtcXG4xOTI2OlxcdFxcdFxcdFxcdFxcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcXG4xOTI3OlxcdFxcbjE5Mjg6XFx0XFx0XFx0XFx0XFx0LyogY21vdmUgcjExLCBkc3RfcmVnOyBpZiBzbywgc2V0IGRzdF9yZWcgdG8gemVybyAqL1xcbjE5Mjk6XFx0XFx0XFx0XFx0XFx0LyogV0FSTklORzogSW50ZWwgc3dhcHBlZCBzcmMvZHN0IHJlZ2lzdGVyIGVuY29kaW5nIGluIENNT1ZjYyAhISEgKi9cXG4xOTMwOlxcdFxcdFxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCBBVVhfUkVHLCBkc3RfcmVnLCB0cnVlKTtcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdEVNSVQzKDB4MEYsIDB4NDQsIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIGRzdF9yZWcpKTtcXG4xOTMyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5MzM6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbjE5MzQ6XFx0XFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcbjE5MzU6XFx0XFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuMTkzNjpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbjE5Mzc6XFx0XFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuMTkzODpcXHRcXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XFxuMTkzOTpcXHRcXHRcXHRcXHRcXHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XFxuMTk0MDpcXHRcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuMTk0MTpcXHQjZW5kaWZcXG4xOTQyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NDM6XFx0XFx0XFx0XFx0fVxcbjE5NDQ6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTk0NTpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XFxuMTk0NjpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDApXFxuMTk0NzpcXHRcXHRcXHRcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csXFxuMTk0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXFxuMTk0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xcbjE5NTA6XFx0XFx0XFx0XFx0ZWxzZVxcbjE5NTE6XFx0XFx0XFx0XFx0XFx0ZW1pdF9tb3ZzeF9yZWcoXFx1MDAyNnByb2csIGluc24tXFx1MDAzZW9mZixcXG4xOTUyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0LFxcbjE5NTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xcbjE5NTQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTk1NTpcXHRcXG4xOTU2OlxcdFxcdFxcdFxcdC8qIG5lZyBkc3QgKi9cXG4xOTU3OlxcdFxcdFxcdGNhc2UgQlBGX0FMVSB8IEJQRl9ORUc6XFxuMTk1ODpcXHRcXHRcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ORUc6XFxuMTk1OTpcXHRcXHRcXHRcXHRtYXliZV9lbWl0XzFtb2QoXFx1MDAyNnByb2csIGRzdF9yZWcsXFxuMTk2MDpcXHRcXHRcXHRcXHRcXHRcXHRCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0KTtcXG4xOTYxOlxcdFxcdFxcdFxcdEVNSVQyKDB4RjcsIGFkZF8xcmVnKDB4RDgsIGRzdF9yZWcpKTtcXG4xOTYyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NjM6XFx0XFxuMTk2NDpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfQUREIHwgQlBGX0s6XFxuMTk2NTpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6XFxuMTk2NjpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX0s6XFxuMTk2NzpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfT1IgfCBCUEZfSzpcXG4xOTY4OlxcdFxcdFxcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfSzpcXG4xOTY5OlxcdFxcdFxcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9LOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToyNC40OTg1MjIwMjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ2MzQ3MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBKSVQgQ29tcGlsZXIgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gdGhlIGBkb19qaXRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbilgLiBIbW0sIHRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYWx0ZXJpbmcgaG93IHdlIGhhbmRsZSB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGdlbmVyYXRlZCB4ODYgY29kZS4gIFByZXZpb3VzbHksIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgd2FzIHVzZWQsIGJ1dCBub3cgaXQncyBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiAgVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgY2hhbmdpbmcgdGhlIGluc3RydWN0aW9uIGVuY29kaW5nLCB3aGljaCBjYW4gaGF2ZSByaXBwbGUgZWZmZWN0cy4gVGhpcyBzY3JlYW1zIFwicG90ZW50aWFsIGJ1ZyBmaXhcIiBvciBcIm9wdGltaXphdGlvblwiIHRvIG1lLlxuXG5NeSBpbnR1aXRpb24gc2F5cyB0aGlzIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24uICBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGFkZHJlc3NpbmcgbW9kZSBmb3IgcGVyLUNQVSB2YXJpYWJsZXMsIHdoaWNoIG9mdGVuIGludm9sdmVzIHNvbWUgc29ydCBvZiBvZmZzZXQgY2FsY3VsYXRpb24uIFRoZSBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbiBpcyBsaWtlbHkgZW1pdHRlZCB3aGVuIHdlIHNlZSBhIGBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9QRVJDUFVgIGluc3RydWN0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/ICBOZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBCUEYgaW5zdHJ1Y3Rpb24gc2V0IGVuY29kaW5nLi4uXG5cbk5vdywgYSBxdWljayBjaGVjay4uLiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbilgLiBUaGF0J3MgYSBoZWxwZXIgZnVuY3Rpb24uIEkgcmVhbGx5IG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBoZWxwZXIgaXMgZG9pbmcuIExldCBtZSBkb3VibGUtY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UgZnVsbHkuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNoYW5nZSBpbnRyb2R1Y2VkIHRvIGBkb19qaXRgIGFjdHVhbGx5IGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyBvciBhZGRzIGEgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToyOS4zNDQ4NzMyMDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk5NjA0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEzMDI9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUtXFx0XFx0XFx0YnJlYWs7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTM1NjpcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTM1Ny1cXHRcXHRcXHRpZiAoZHN0ICE9IHNyYylcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNjAtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNjE6XFx0XFx0XFx0aWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKFxcdTAwMjZpbnNuW2ldKSkge1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYyLVxcdFxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjE9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzODUtXFx0XFx0XFx0YnJlYWs7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzg2OlxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzODctXFx0XFx0XFx0aWYgKHJkICE9IHJzKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXFx0XFx0XFx0XFx0YnJlYWs7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MzM6XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVxcdFxcdFxcdFxcdC8qIG1vdiBcXHUwMDNjZHN0XFx1MDAzZSwgXFx1MDAzY3NyY1xcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9NDA9c3RydWN0IGN0bF90YWJsZV9oZWFkZXI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjIwMjpzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6MzEuNDU0ODQ2NzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzI0NzMyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAgaW4gYGxpbnV4L2ZpbHRlci5oYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgLiBJdCdzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIGVCUEYgaW5mcmFzdHJ1Y3R1cmUsIGxpa2VseSB1c2VkIGZvciBvcHRpbWl6aW5nIG9yIHZlcmlmeWluZyBlQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgdGhvc2UgZGVhbGluZyB3aXRoIHBlci1DUFUgdmFyaWFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSB3aXRoaW4gdGhhdCBjb250ZXh0LiBJcyBpdCBmb3IgaW5zdHJ1Y3Rpb24gcGF0dGVybiBtYXRjaGluZywgaW5zdHJ1Y3Rpb24gY2xhc3NpZmljYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBEb2VzIGl0IGlkZW50aWZ5IGluc3RydWN0aW9ucyB0aGF0IG1vdmUgZGF0YSB0byBvciBmcm9tIHBlci1DUFUgYXJlYXM/IE1vcmUgaW1wb3J0YW50bHksIGhvdyBkb2VzIGl0IGRlZmluZSB3aGF0IHF1YWxpZmllcyBhcyBhIFwibW92ZVwiIG9wZXJhdGlvbiBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIGFyY2hpdGVjdHVyZSBhbmQgZUJQRiBieXRlY29kZT8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIHdoaWNoIGluc3RydWN0aW9ucyBpdCB0YXJnZXRzLCB3aGV0aGVyIGl0IGNvbnNpZGVycyBhZGRyZXNzaW5nIG1vZGVzLCBhbmQgaWYgaXQgZmFjdG9ycyBpbiBhbnkgcG90ZW50aWFsIENQVS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gbWlzaGFuZGxpbmcgdGhlc2UgaW5zdHJ1Y3Rpb25zLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6MzUuNDI3MzIyOTE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NTpcXHRcXHQoKHN0cnVjdCBicGZfaW5zbikge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTk2OlxcdFxcdFxcdC5jb2RlICA9IEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCxcXHRcXHRcXFxcXFxuIDE5NzpcXHRcXHRcXHQuZHN0X3JlZyA9IERTVCxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5ODpcXHRcXHRcXHQuc3JjX3JlZyA9IFNSQyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5OTpcXHRcXHRcXHQub2ZmICAgPSBCUEZfQUREUl9QRVJDUFUsXFx0XFx0XFx0XFxcXFxcbiAyMDA6XFx0XFx0XFx0LmltbSAgID0gMCB9KVxcbiAyMDE6XFx0XFxuIDIwMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiAyMDM6XFx0e1xcbiAyMDQ6XFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCkgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IEJQRl9BRERSX1BFUkNQVTtcXG4gMjA1OlxcdH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0LyogU2hvcnQgZm9ybSBvZiBtb3YsIGRzdF9yZWcgPSBpbW0zMiAqL1xcbiAyMDg6XFx0XFxuIDIwOTpcXHQjZGVmaW5lIEJQRl9NT1Y2NF9JTU0oRFNULCBJTU0pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTA6XFx0XFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMTpcXHRcXHRcXHQuY29kZSAgPSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX0ssXFx0XFx0XFxcXFxcbiAyMTI6XFx0XFx0XFx0LmRzdF9yZWcgPSBEU1QsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTM6XFx0XFx0XFx0LnNyY19yZWcgPSAwLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjE0OlxcdFxcdFxcdC5vZmYgICA9IDAsXFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTozNS40Mjc0Mzk3NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NjE4ODEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJbnN0cnVjdGlvbiBUcmFuc2Zvcm1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgQlBGIGluc3RydWN0aW9uLCBhbmQgaXQncyBhIGBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1hgIHdpdGggYG9mZiA9PSBCUEZfQUREUl9QRVJDUFVgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSByZWNvZ25pemUgdGhpcyBhcyBhIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbi4gTXkgZm9jdXMgaXMgb24gaG93IHRoZSBnZW5lcmF0ZWQgeDg2IGNvZGUgaXMgY2hhbmdpbmcuIEl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSB3YXkgdGhlIHg4NiBpbnN0cnVjdGlvbiBpcyBiZWluZyBhc3NlbWJsZWQuIFNwZWNpZmljYWxseSwgaXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgYW5kIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgYWN0dWFsbHkgZG8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIGFzc2VtYmxlci4gVGhpcyBkaWZmZXJlbmNlIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGEgZGVlcGVyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTozOS41ODM2MzIwNTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODk1NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZF8xbW9kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjQzPXN0YXRpYyBib29sIGlzX2F4cmVnKHUzMiByZWcpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4LS8qIEFkZCBtb2RpZmllcnMgaWYgJ3JlZycgbWFwcyB0byB4ODYtNjQgcmVnaXN0ZXJzIFI4Li5SMTUgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQ5OnN0YXRpYyB1OCBhZGRfMW1vZCh1OCBieXRlLCB1MzIgcmVnKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTAte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTkzOD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW0zMih1OCAqKnBwcm9nLCBib29sIHNpZ25fcHJvcGFnYXRlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk0OS1cXHRcXHQvKiAnbW92ICVyYXgsIGltbTMyJyBzaWduIGV4dGVuZHMgaW1tMzIgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTUwOlxcdFxcdGIxID0gYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk1MS1cXHRcXHRiMiA9IDB4Qzc7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTcxLVxcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NzI6XFx0XFx0RU1JVDEoYWRkXzFtb2QoMHg0MCwgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NzMtXFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHhCOCwgZHN0X3JlZyksIGltbTMyKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz05Nzg9c3RhdGljIHZvaWQgZW1pdF9tb3ZfaW1tNjQodTggKipwcHJvZywgdTMyIGRzdF9yZWcsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTk1LVxcdFxcdC8qIG1vdmFic3EgcmF4LCBpbW02NCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5OTY6XFx0XFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIGFkZF8xcmVnKDB4QjgsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTk3LVxcdFxcdEVNSVQoaW1tMzJfbG8sIDQpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTExMDI9c3RhdGljIHZvaWQgbWF5YmVfZW1pdF8xbW9kKHU4ICoqcHByb2csIHUzMiByZWcsIGJvb2wgaXM2NClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTA2LVxcdGlmIChpczY0KVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTA3OlxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIHJlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTA4LVxcdGVsc2UgaWYgKGlzX2VyZWcocmVnKSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEwOTpcXHRcXHRFTUlUMShhZGRfMW1vZCgweDQwLCByZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTExMC1cXHQqcHByb2cgPSBwcm9nO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMjEtXFx0XFx0XFx0XFx0LyogRW1pdCAnYnN3YXAgcmF4JyB0byBzd2FwIDggYnl0ZXMgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjIyMjpcXHRcXHRcXHRcXHRFTUlUMyhhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHgwRixcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIyMy1cXHRcXHRcXHRcXHQgICAgICBhZGRfMXJlZygweEM4LCBkc3RfcmVnKSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4Mi1cXHRcXHRcXHR9XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyODM6XFx0XFx0XFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjg0LVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM4MzM9c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NDItXFx0XFx0ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NDM6XFx0XFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XFx0LyogY21wIHJkeCxmdW5jICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NDQtXFx0XFx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYV0pKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NjMtXFx0cGl2b3QgPSAoYiAtIGEpIC8gMjtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzg2NDpcXHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcXHRcXHQvKiBjbXAgcmR4LGZ1bmMgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg2NS1cXHRpZiAoIWlzX3NpbW0zMihwcm9nc1thICsgcGl2b3RdKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6MzkuNjMzNTM0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkyNjYwOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGFkZF8ybW9kYCBpbiBgYnBmX2ppdF9jb21wLmNgKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIGluIG9uIGBhZGRfMm1vZGAgd2l0aGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGF0J3MgdGhlIHg4Ni1zcGVjaWZpYyBCUEYgSklUIGNvbXBpbGVyIGNvZGUgZm9yIG5ldHdvcmsgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGFkZGl0aW9uIG1vZHVsbyBhIHBvd2VyIG9mIHR3byBpcyBoYW5kbGVkLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGtleSBwaWVjZSBvZiBvcHRpbWl6aW5nIEJQRiBwcm9ncmFtcyB0aGF0IGludm9sdmUgdGhlc2UgdHlwZXMgb2YgYXJpdGhtZXRpYyBjb25zdHJhaW50cywgZXNwZWNpYWxseSBpZiBpdCdzIG9wZXJhdGluZyBvbiBuZXR3b3JrIHBhY2tldCBkYXRhLiBUaGUgZ29hbCBpcyBsaWtlbHkgdG8gdHJhbnNsYXRlIHRoZSBCUEYgaW5zdHJ1Y3Rpb24gaW50byB0aGUgbW9zdCBlZmZpY2llbnQgeDg2IGFzc2VtYmx5IHBvc3NpYmxlLCB0YWtpbmcgYWR2YW50YWdlIG9mIHBvdGVudGlhbGx5IGhhcmR3YXJlLWxldmVsIG1vZCBpbnN0cnVjdGlvbnMsIG9yIHJlc29ydGluZyB0byBiaXR3aXNlIG9wZXJhdGlvbnMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgc3BlY2lhbCBvcHRpbWl6YXRpb25zIG9yIHBhdHRlcm5zIGluIGBhZGRfMm1vZGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIGRvaW5nIHNvbWV0aGluZyBjbGV2ZXIgdG8gYXZvaWQgYSBmdWxsIGRpdmlzaW9uIG9yIG1vZHVsYXIgb3BlcmF0aW9uLCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvd2VyIG9mIDIgbW9kdWx1cy4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGtleSB0YWtlYXdheTsgYXJlIHdlIHNlZWluZyBlZmZpY2llbnQgYml0d2lzZSBtYW5pcHVsYXRpb24gKEFORCwgZXRjLikgdG8gZ2V0IHRoYXQgbW9kIHJlc3VsdCBxdWlja2x5LCBvciBpcyB0aGVyZSBhIHRyaWNraWVyLCBsZXNzIG9idmlvdXMgaW1wbGVtZW50YXRpb24gYmVpbmcgdXNlZCB0aGF0IEkgbmVlZCB0byBkaXNzZWN0P1xuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6NDQuNDI2MTk4NzY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY4NDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfMm1vZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEyNj1zdGF0aWMgYm9vbCBpc191aW1tMzIodTY0IHZhbHVlKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNC1cXHRcXHRpZiAoRFNUICE9IFNSQylcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFxcXFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzU6XFx0XFx0XFx0RU1JVDMoYWRkXzJtb2QoMHg0OCwgRFNULCBTUkMpLCAweDg5LCBhZGRfMnJlZygweEMwLCBEU1QsIFNSQykpOyBcXFxcXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNi1cXHR9IHdoaWxlICgwKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI0OT1zdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTUtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI1NjpzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1Ny17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTYyLVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NjM6XFx0XFx0XFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NjQtXFx0XFx0YjIgPSAweDMxOyAvKiB4b3IgKi9cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMDA0PXN0YXRpYyB2b2lkIGVtaXRfbW92X3JlZyh1OCAqKnBwcm9nLCBib29sIGlzNjQsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDEzLVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMTQ6XFx0XFx0XFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDE1LVxcdFxcdEVNSVQyKDB4ODksIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMDIxPXN0YXRpYyB2b2lkIGVtaXRfbW92c3hfcmVnKHU4ICoqcHByb2csIGludCBudW1fYml0cywgYm9vbCBpczY0LCB1MzIgZHN0X3JlZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDI4LVxcdFxcdGlmIChudW1fYml0cyA9PSA4KVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDI5OlxcdFxcdFxcdEVNSVQ0KGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBmLCAweGJlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDMwLVxcdFxcdFxcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMS1cXHRcXHRlbHNlIGlmIChudW1fYml0cyA9PSAxNilcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAzMjpcXHRcXHRcXHRFTUlUNChhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwZiwgMHhiZixcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMy1cXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzQtXFx0XFx0ZWxzZSBpZiAobnVtX2JpdHMgPT0gMzIpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzU6XFx0XFx0XFx0RU1JVDMoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4NjMsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzYtXFx0XFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzktXFx0XFx0aWYgKG51bV9iaXRzID09IDgpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA0MDpcXHRcXHRcXHRFTUlUNChhZGRfMm1vZCgweDQwLCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwZiwgMHhiZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0MS1cXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0My1cXHRcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSB8fCBpc19lcmVnKHNyY19yZWcpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDQ0OlxcdFxcdFxcdFxcdEVNSVQxKGFkZF8ybW9kKDB4NDAsIHNyY19yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA0NTpcXHRcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDBmLCBzcmNfcmVnLCBkc3RfcmVnKSwgMHhiZixcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0Ni1cXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTA4OD1zdGF0aWMgdm9pZCBtYXliZV9lbWl0X21vZCh1OCAqKnBwcm9nLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGJvb2wgaXM2NClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDkyLVxcdGlmIChpczY0KVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDkzOlxcdFxcdEVNSVQxKGFkZF8ybW9kKDB4NDgsIGRzdF9yZWcsIHNyY19yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA5NC1cXHRlbHNlIGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwOTU6XFx0XFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDk2LVxcdCpwcHJvZyA9IHByb2c7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTExND1zdGF0aWMgdm9pZCBlbWl0X2xkeCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjAtXFx0XFx0LyogRW1pdCAnbW92enggcmF4LCBieXRlIHB0ciBbcmF4ICsgb2ZmXScgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEyMTpcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwRiwgMHhCNik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjItXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEyNC1cXHRcXHQvKiBFbWl0ICdtb3Z6eCByYXgsIHdvcmQgcHRyIFtyYXggKyBvZmZdJyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTI1OlxcdFxcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBGLCAweEI3KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEyNi1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTI5LVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMzA6XFx0XFx0XFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgc3JjX3JlZywgZHN0X3JlZyksIDB4OEIpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTMxLVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTM1LVxcdFxcdC8qIEVtaXQgJ21vdiByYXgsIHF3b3JkIHB0ciBbcmF4KzB4MTRdJyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTM2OlxcdFxcdEVNSVQyKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDhCKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEzNy1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTQ0PXN0YXRpYyB2b2lkIGVtaXRfbGRzeCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExNTAtXFx0XFx0LyogRW1pdCAnbW92c3ggcmF4LCBieXRlIHB0ciBbcmF4ICsgb2ZmXScgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTE1MTpcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwRiwgMHhCRSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExNTItXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTE1NC1cXHRcXHQvKiBFbWl0ICdtb3ZzeCByYXgsIHdvcmQgcHRyIFtyYXggKyBvZmZdJyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTU1OlxcdFxcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBGLCAweEJGKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTE1Ni1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTU4LVxcdFxcdC8qIEVtaXQgJ21vdnN4IHJheCwgZHdvcmQgcHRyIFtyYXgrMHgxNF0nICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExNTk6XFx0XFx0RU1JVDIoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4NjMpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTYwLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEyMjU9c3RhdGljIHZvaWQgZW1pdF9zdHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjMzLVxcdFxcdFxcdC8qIEFkZCBleHRyYSBieXRlIGZvciBlcmVncyBvciBTSUwsRElMLEJQTCBpbiBzcmNfcmVnICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyMzQ6XFx0XFx0XFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZyksIDB4ODgpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjM1LVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjM5LVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyNDA6XFx0XFx0XFx0RU1JVDMoMHg2NiwgYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZyksIDB4ODkpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjQxLVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjQ1LVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyNDY6XFx0XFx0XFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZyksIDB4ODkpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjQ3LVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjUwLVxcdGNhc2UgQlBGX0RXOlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMjUxOlxcdFxcdEVNSVQyKGFkZF8ybW9kKDB4NDgsIGRzdF9yZWcsIHNyY19yZWcpLCAweDg5KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTI1Mi1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM3LVxcdFxcdFxcdFxcdC8qIGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTM4OlxcdFxcdFxcdFxcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzOS1cXHRcXHRcXHRcXHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM5OjQ0LjQ3OTg5MDEzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTgxMzc4Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIGBhZGRgIEluc3RydWN0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBIbW0sIHRoZSBwcmVjZWRpbmcgY29kZSBzbmlwcGV0IHVzZWQgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYC4gIFRoYXQncyBhIHNsaWdodCB2YXJpYXRpb24sIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW5jZS4gTGV0IG1lIHF1aWNrbHkganVtcCBvdmVyIHRvIHRoZSBkZWZpbml0aW9ucyBmb3IgYm90aCBgYWRkXzFtb2RgIGFuZCBgYWRkXzJtb2RgIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3Qgb25lIG1pZ2h0IGJlIGEgc2ltcGxlciBhZGRpdGlvbiB3aXRoIGEgc2luZ2xlIG9wZXJhbmQsIGFuZCB0aGUgb3RoZXIgYSB0d28tb3BlcmFuZCBhZGRpdGlvbiB3aXRoIGFuIGltbWVkaWF0ZSB2YWx1ZSwgb3Igc29tZXRoaW5nIGFsb25nIHRob3NlIGxpbmVzLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG9wZXJhbmQgdHlwZXMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoaXMgYWRkaXRpb24gZ2V0cyBleGVjdXRlZC4gSSdsbCBjaGVjayBpZiB0aGUgMCBpbiBgYWRkXzJtb2RgIGlzIGEgZGlyZWN0IG9wZXJhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDA2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6NDguNjYxMjcyNjQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcdFxcdFxcdCAgQklUKEJQRl9SRUdfRlApKTtcXG4gMjQxOlxcdH1cXG4gMjQyOlxcdFxcbiAyNDM6XFx0c3RhdGljIGJvb2wgaXNfYXhyZWcodTMyIHJlZylcXG4gMjQ0OlxcdHtcXG4gMjQ1OlxcdFxcdHJldHVybiByZWcgPT0gQlBGX1JFR18wO1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHQvKiBBZGQgbW9kaWZpZXJzIGlmICdyZWcnIG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXFxuIDI0OTpcXHRzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcXG4gMjUwOlxcdHtcXG4gMjUxOlxcdFxcdGlmIChpc19lcmVnKHJlZykpXFxuIDI1MjpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI1MzpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjU0OlxcdH1cXG4gMjU1OlxcdFxcbiAyNTY6XFx0c3RhdGljIHU4IGFkZF8ybW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyKVxcbiAyNTc6XFx0e1xcbiAyNTg6XFx0XFx0aWYgKGlzX2VyZWcocjEpKVxcbiAyNTk6XFx0XFx0XFx0Ynl0ZSB8PSAxO1xcbiAyNjA6XFx0XFx0aWYgKGlzX2VyZWcocjIpKVxcbiAyNjE6XFx0XFx0XFx0Ynl0ZSB8PSA0O1xcbiAyNjI6XFx0XFx0cmV0dXJuIGJ5dGU7XFxuIDI2MzpcXHR9XFxuIDI2NDpcXHRcXG4gMjY1OlxcdHN0YXRpYyB1OCBhZGRfM21vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMiwgdTMyIGluZGV4KVxcbiAyNjY6XFx0e1xcbiAyNjc6XFx0XFx0aWYgKGlzX2VyZWcocjEpKVxcbiAyNjg6XFx0XFx0XFx0Ynl0ZSB8PSAxO1xcbiAyNjk6XFx0XFx0aWYgKGlzX2VyZWcoaW5kZXgpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTo0OC42NjE0NjIxNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzODE5ODQyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlzc2VjdGluZyB0aGUgUkVYIFByZWZpeCBhbmQgSW5zdHJ1Y3Rpb24gRW5jb2RpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIEknbSBkZWFsaW5nIHdpdGggaG93IFJFWCBwcmVmaXhlcyBpbnRlcmFjdCB3aXRoIGV4dGVuZGVkIHJlZ2lzdGVycyBpbiB4ODYtNjQgYXNzZW1ibHkuIFRoZSBgYWRkXzFtb2RgIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKEIgYml0KSBvZiB0aGUgUkVYIHByZWZpeCB3aGVuIHRoZSB0YXJnZXQgcmVnaXN0ZXIgKGByZWdgIGluIHRoaXMgY2FzZSkgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgbGlrZSBSOC1SMTUuIFNpbWlsYXJseSwgYGFkZF8ybW9kYCBhbHRlcnMgYm90aCB0aGUgQiBiaXQgKGZvciBgcjFgIGV4dGVuZGVkKSBhbmQgdGhlIFIgYml0IChiaXQgMikgaWYgYHIyYCBpcyBleHRlbmRlZC5cblxuSGFuZyBvbiwgbGV0J3MgY29uc2lkZXIgYSBzcGVjaWZpYyBjYXNlOiBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBIZXJlLCBgcjFgIGlzIDAsIHdoaWNoIGlzIFJBWCwgbm90IGFuIGV4dGVuZGVkIHJlZ2lzdGVyLiBCdXQgYHIyYCBpcyBgZHN0X3JlZ2AuIFNvLCBpZiBgZHN0X3JlZ2AgKmlzKiBhbiBleHRlbmRlZCByZWdpc3RlciwgYGFkZF8ybW9kYCB3aWxsIHNldCB0aGUgUiBiaXQgKHZhbHVlIDQpIGluIHRoZSBSRVggcHJlZml4LlxuXG5MZXQncyByZXZpZXcgdGhlIFJFWCBwcmVmaXggZm9ybWF0OiBJdCdzIDB4NDAgT1InZCB3aXRoIHRoZSBXLCBSLCBYLCBhbmQgQiBiaXRzLiBXIGNvbnRyb2xzIG9wZXJhbmQgc2l6ZSwgUiByZWZlcnMgdG8gdGhlIE1vZFJNIHJlZyBmaWVsZCwgWCByZWZlcnMgdG8gdGhlIFNJQiBpbmRleCBmaWVsZCwgYW5kIEIgY29udHJvbHMgdGhlIE1vZFJNIHIvbSBmaWVsZCwgU0lCIGJhc2UgZmllbGQsIG9yIG9wY29kZSByZWdpc3RlciBmaWVsZC5cblxuTG9va2luZyBhdCB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG5FTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XG5FTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG5gYGBcblxuYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCBzZXRzIHRoZSBCIGJpdCBpZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHdoaWNoIGlzIGNsZWFyLiBCdXQsIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gaXMgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIExldCdzIGxvb2sgYXQgdGhlIE1vZFJNIGJ5dGU6IGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuIE9rYXksIG5vdyBsZXQncyByZWZlciB0byB0aGUgZGVmaW5pdGlvbiBvZiBgYWRkXzJyZWdgLiBJdCBsb29rcyBsaWtlIHRoYXQgaXMgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MzksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MDowMC4wNDM0NDk5ODZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFx0XFx0Ynl0ZSB8PSAyO1xcbiAyNzE6XFx0XFx0aWYgKGlzX2VyZWcocjIpKVxcbiAyNzI6XFx0XFx0XFx0Ynl0ZSB8PSA0O1xcbiAyNzM6XFx0XFx0cmV0dXJuIGJ5dGU7XFxuIDI3NDpcXHR9XFxuIDI3NTpcXHRcXG4gMjc2OlxcdC8qIEVuY29kZSAnZHN0X3JlZycgcmVnaXN0ZXIgaW50byB4ODYtNjQgb3Bjb2RlICdieXRlJyAqL1xcbiAyNzc6XFx0c3RhdGljIHU4IGFkZF8xcmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnKVxcbiAyNzg6XFx0e1xcbiAyNzk6XFx0XFx0cmV0dXJuIGJ5dGUgKyByZWcyaGV4W2RzdF9yZWddO1xcbiAyODA6XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHQvKiBFbmNvZGUgJ2RzdF9yZWcnIGFuZCAnc3JjX3JlZycgcmVnaXN0ZXJzIGludG8geDg2LTY0IG9wY29kZSAnYnl0ZScgKi9cXG4gMjgzOlxcdHN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXFxuIDI4NDpcXHR7XFxuIDI4NTpcXHRcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ10gKyAocmVnMmhleFtzcmNfcmVnXSBcXHUwMDNjXFx1MDAzYyAzKTtcXG4gMjg2OlxcdH1cXG4gMjg3OlxcdFxcbiAyODg6XFx0LyogU29tZSAxLWJ5dGUgb3Bjb2RlcyBmb3IgYmluYXJ5IEFMVSBvcGVyYXRpb25zICovXFxuIDI4OTpcXHRzdGF0aWMgdTggc2ltcGxlX2FsdV9vcGNvZGVzW10gPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQwOjAwLjA0MzYzNzYxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTg2MjE2NjYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBIENyaXRpY2FsIFg4NiBCUEYgSklUIEJ1ZyBhbmQgaXRzIFJlc29sdXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIEkgd2FzIGxvb2tpbmcgYXQgdGhpcyBgYWRkXzJyZWdgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcgd2Fzbid0IHJpZ2h0LiBJbml0aWFsbHksIEkgdGhvdWdodCBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgIHBsYWNlZCBgZHN0X3JlZ2AgaW4gdGhlIGBzcmNfcmVnYCBwb3NpdGlvbiAoc2hpZnRlZCBieSAzKSwgbWVhbmluZyB0aGUgYHJlZ2AgZmllbGQgb2YgdGhlIE1vZFJNIGJ5dGUuIEJ1dCB0aGVuIEkgbG9va2VkIGFnYWluLCBhbmQgYGFkZF8ycmVnKGJ5dGUsIGRzdF9yZWcsIHNyY19yZWcpYCBkb2VzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LCBhZGRpbmcgYGJ5dGVgLCBgcmVnMmhleFtkc3RfcmVnXWAgYW5kIGByZWcyaGV4W3NyY19yZWddYCBsZWZ0LXNoaWZ0ZWQgYnkgMy5cblxuSXQgc3RhcnRlZCB0byBjbGljay4gYDB4MDRgIGlzIHRoZSBNb2RSTSBieXRlLCBhbmQgYHJlZzJoZXhbMF1gIGlzIGp1c3QgYDBgIChSQVgpLiBUaGUgYHJlZ2AgZmllbGQgb2YgTW9kUk0gc2hvdWxkIGJlIGBkc3RfcmVnYCAtIGJ1dCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoICpob3cqIHRoYXQgZW5jb2RpbmcgaXMgaGFwcGVuaW5nLiBgcmVnMmhleFtkc3RfcmVnXWAgaXMgYWRkZWQgZGlyZWN0bHksIHdoaWNoIHNldHMgdGhlIGxvd2VyIDMgYml0cyBmb3IgdGhlIHIvbSBmaWVsZCBhbmQgbm90IHRoZSByZWcgZmllbGQuXG5cblRoZW4sIEkgZm9jdXNlZCBvbiB0aGUgUkVYIHByZWZpeC4gV2hlbiBgZHN0X3JlZ2AgaXMgZXh0ZW5kZWQgKFI4LVIxNSksIGl0J3Mgc3VwcG9zZWQgdG8gc2V0IHRoZSBSIGJpdCAoYml0IDIsIHZhbHVlIDQpLiBCdXQsIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgd2FzIHNldHRpbmcgdGhlIEIgYml0IChiaXQgMCwgdmFsdWUgMSkgaW5zdGVhZCEgVGhpcyBtZWFucyBgYWRkXzFtb2RgIHdhcyBzZXR0aW5nIHRoZSAqd3JvbmcqIGJpdCBpbiB0aGUgUkVYIHByZWZpeC5cblxuVGhpcyBtZWFucyB0aGF0IGlmIGBkc3RfcmVnYCB3YXMgUjgsIHRoZSBpbnN0cnVjdGlvbiB3YXMgdXNpbmcgUkFYIGZvciB0aGUgYHJlZ2AgZmllbGQgYW5kIFI4IGZvciB0aGUgYHIvbWAgZmllbGQsIHdoaWNoIHNob3VsZCBub3QgaGF2ZSBiZWVuIHRoZSBjYXNlLiBUaGUgYHIvbWAgZmllbGQgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIFNJQiBieXRlIGluZGljYXRvciAoMHgwNCBtZWFucyBTSUIgZm9sbG93cykuXG5cblRoZSByb290IGNhdXNlOiB0aGUgZnVuY3Rpb24gd2Fzbid0IHByb3Blcmx5IHNldHRpbmcgdGhlIFIgYml0ISBUaGlzIHJlc3VsdGVkIGluIGEgY29tcGxldGUgbWlzaW50ZXJwcmV0YXRpb24gb2YgZXh0ZW5kZWQgcmVnaXN0ZXJzLCBsZWFkaW5nIHRvIGluY29ycmVjdCBpbnN0cnVjdGlvbiBlbmNvZGluZy4gIElmIGBkc3RfcmVnYCB3YXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHRoZSBpbnN0cnVjdGlvbiB3YXMgZW5jb2Rpbmcgc29tZXRoaW5nIGxpa2UgYGFkZCByOCwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gIHdoZW4gaXQgc2hvdWxkbid0LiBUaGlzIGlzIGEgcHJldHR5IG1ham9yIGJ1ZyBpbiB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgeDg2LlxuXG5UaGUgZml4PyBJIG5lZWQgdG8gY2hhbmdlIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgdG8gYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gIEkgcmVjaGVja2VkIGBhZGRfMm1vZGA6XG5gYGBjXG5zdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXG57XG5cdGlmIChpc19lcmVnKHIxKSlcblx0XHRieXRlIHw9IDE7XG5cdGlmIChpc19lcmVnKHIyKSlcblx0XHRieXRlIHw9IDQ7XG5cdHJldHVybiBieXRlO1xufVxuYGBgXG5cbk5vdywgYHIyYCBjb3JyZWN0bHkgc2V0cyBiaXQgMiAodGhlIFIgYml0KSB3aGVuIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciEgVGhpcyBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgaW4gdGhlIFJFWCBwcmVmaXguXG5cblRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHRlc3QgaXQgYW5kIGZ1enogaXQuICBJIG5lZWQgdG8gZnV6eiBCUEYgcHJvZ3JhbXMgdGhhdCB1c2UgYG1vdl9wZXJjcHVfYWRkcmAgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMgb24geDg2LiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGJlY2F1c2UgYGRvX2ppdGAgaXMgc3RhdGljLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MDoxOS45MDU4MTI5MTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTA3NDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk1MD1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOTYxLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTYyOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5NjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MDoyMC4zMzA4OTg1OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU2ODg1Nzc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYODYgQlBGIEpJVCBDb21waWxhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBicGZfaW50X2ppdF9jb21waWxlYCBmdW5jdGlvbjsgdGhhdCdzIHRoZSBjb3JlIEpJVCBjb21waWxlciBmb3IgeDg2LCByaWdodD8gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCdzIHNlZS4uLiBvYnZpb3VzbHkgYENPTkZJR19CUEZfSklUYCBpcyBhIG11c3QuIEJ1dCB0aGVyZSdzIG1vcmUuIFdhaXQsIEkgc2VlIHRoaXMgYCNpZmRlZiBDT05GSUdfU01QYCBibG9jay4uLiBhbmQgaXQncyBlbWl0dGluZyBzb21lIGlubGluZSBhc3NlbWJseSBmb3Igd2hhdCBsb29rcyBsaWtlIENQVS1zcGVjaWZpYyBvZmZzZXQgaGFuZGxpbmcuIE9rYXksIHNvIHRoYXQgbWVhbnMgYENPTkZJR19TTVBgIGlzIGFsc28gZXNzZW50aWFsLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoYXQgYmxvY2suIEl0IGxvb2tzIGxpa2UgaXQgaXMgZ2VuZXJhdGluZyBhbiBgYWRkYCBpbnN0cnVjdGlvbiB0byBoYW5kbGUgc29tZSBzb3J0IG9mIHBlci1DUFUgb2Zmc2V0LlxuXG5gQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBwcm9iYWJseSBhbHNvIGEgcmVxdWlyZW1lbnQuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6MjguODk5NzU5OTYyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg2MDk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2NvbXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGU9OD1lbHNlXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjk6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtMTAtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6MjguOTQ3NjI4MDYxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDY2ODQyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBgQ09ORklHX0JQRl9KSVRgIOKAkyB5ZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBhIGhhcmQgcmVxdWlyZW1lbnQuIE5vIHF1ZXN0aW9uIHRoZXJlLiBOb3csIGxldCdzIHNlZS4uLiBgQ09ORklHX1NNUGAgaXMgcHJhY3RpY2FsbHkgYSBnaXZlbiB0aGVzZSBkYXlzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgaW5jbHVkZSBpdCBleHBsaWNpdGx5LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG1pZ2h0IGJlIG1pc3Npbmc/IEdvdHRhIGJlIGRpbGlnZW50LlxuXG5MZXQgbWUgc2Vl4oCmIEnigJlsbCBkbyBhIHF1aWNrIGNoZWNrIG9mIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAuIFRoYXQgZnVuY3Rpb27igJlzIHJlbGF0ZWQgdG8gYEJQRl9BRERSX1BFUkNQVWAsIHdoaWNoIGlzIGEga2V5IGNvbXBvbmVudCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGluZ3MgYXJlIHNldCB1cC4gQWgsIGFuZCBoZXJlIHdlIGFyZSwgbm93LCB3aGVyZSBkb2VzIGBCUEZfQUREUl9QRVJDUFVgIGNvbWUgZnJvbSBhZ2Fpbj8gV2hlcmUgaXMgdGhhdCB2YWx1ZSBnZW5lcmF0ZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4gdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBsaW5lZCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6MzQuODk0MzE1NTc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA3NjY4OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9BRERSX1BFUkNQVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTg5LSAqIGRzdF9yZWcgPSBzcmNfcmVnICsgXFx1MDAzY3BlcmNwdV9iYXNlX29mZlxcdTAwM2VcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjE5MDogKiBCUEZfQUREUl9QRVJDUFUgaXMgdXNlZCBhcyBhIHNwZWNpYWwgaW5zbi1cXHUwMDNlb2ZmIHZhbHVlLlxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTkxLSAqL1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTkyOiNkZWZpbmUgQlBGX0FERFJfUEVSQ1BVXFx0KC0xKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTkzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xOTgtXFx0XFx0LnNyY19yZWcgPSBTUkMsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTk5OlxcdFxcdC5vZmYgICA9IEJQRl9BRERSX1BFUkNQVSxcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDAtXFx0XFx0LmltbSAgID0gMCB9KVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yMDI9c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDQ6XFx0cmV0dXJuIGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCkgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IEJQRl9BRERSX1BFUkNQVTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwNS19XFxuLS1cXG5rZXJuZWwvYnBmL2Rpc2FzbS5jPTE2OT1zdGF0aWMgYm9vbCBpc19hZGRyX3NwYWNlX2Nhc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9kaXNhc20uYy0xNzYtICogZHN0X3JlZyA9IHNyY19yZWcgKyBcXHUwMDNjcGVyY3B1X2Jhc2Vfb2ZmXFx1MDAzZVxcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTc3OiAqIEJQRl9BRERSX1BFUkNQVSBpcyB1c2VkIGFzIGEgc3BlY2lhbCBpbnNuLVxcdTAwM2VvZmYgdmFsdWUuXFxua2VybmVsL2JwZi9kaXNhc20uYy0xNzgtICovXFxua2VybmVsL2JwZi9kaXNhc20uYzoxNzk6I2RlZmluZSBCUEZfQUREUl9QRVJDUFVcXHQoLTEpXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODAtXFxua2VybmVsL2JwZi9kaXNhc20uYz0xODE9c3RhdGljIGlubGluZSBib29sIGlzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODIte1xcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTgzOlxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XFxua2VybmVsL2JwZi9kaXNhc20uYy0xODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MDozNi42MDE5OTE2OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNzE1NzY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIEluc3RydWN0aW9uIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIEJQRiBpbnN0cnVjdGlvbnMuIE15IHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBvciB0aGUgYnJvYWRlciBjb250ZXh0IHdoZXJlIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAgaXMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBgL2tlcm5lbC9icGYvYCBkaXJlY3RvcnkuIEknbSBsaWtlbHkgbG9va2luZyBmb3IgdXNlcyBvZiB0aG9zZSBtYWNyb3Mgb3IgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IHBlci1DUFUgcmVnaXN0ZXJzIGFuZCBtZW1vcnkgYWRkcmVzc2luZyBhcmUgaGFuZGxlZCB3aXRoaW4gQlBGIHByb2dyYW1zLiBJJ20gcHJvYmFibHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHJlZ2lzdGVycyBiZWhhdmUsIHdoYXQncyBkb25lIHdpdGggdGhlbSwgYW5kIG1heWJlIHRvIGRlYnVnIHNvbWUgb2JzZXJ2ZWQgYmVoYXZpb3IuIE9yLCBJIG1pZ2h0IGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYnVncy4gTXkgZm9jdXMgaXMgcmVhbGx5IG9uIHdoZXJlIGFuZCBob3cgdGhlc2UgY29uY2VwdHMgYXJlIHV0aWxpemVkIGluIHRoYXQgc3BlY2lmaWMga2VybmVsIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NDMuMzA5MTUyNjI1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg2NDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfTU9WNjRfUEVSQ1BVX1JFR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjk0PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzE4LVxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MzE5OlxcdCppbnNuKysgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTMyMC1cXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwMz1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjMtXFx0XFx0XFx0aW5zbl9idWZbMF0gPSBpbnNuWzFdO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg2NDpcXHRcXHRcXHRpbnNuX2J1ZlsxXSA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg2NS1cXHRcXHRcXHRjbnQgPSAyO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTc2LVxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmNwdV9udW1iZXIpO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MjE3NzpcXHRcXHRcXHRpbnNuX2J1ZlsxXSA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNzgtXFx0XFx0XFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTk4LVxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmN1cnJlbnRfdGFzayk7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTk5OlxcdFxcdFxcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMC1cXHRcXHRcXHRpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQxND1zdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDI3LVxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDI4OlxcdCppbnNuKysgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NDMuMzU5MDIzNjEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MjEzMDQxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGlzIGNvbnN0cnVjdCBiZWluZyB1c2VkIGluIGEgZmV3IHBsYWNlczogYHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cGAsIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAsIGFuZCBhbHNvLCBub3RhYmx5LCBpbiBgYnBmX2RvX21pc2NfZml4dXBzYCB3aGVuIGRlYWxpbmcgd2l0aCBgYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkYCBhbmQgYGJwZl9nZXRfY3VycmVudF90YXNrYC4gV2FpdCBhIG1pbnV0ZSwgSSBqdXN0IG5vdGljZWQgc29tZXRoaW5nIC0gYGJwZl9kb19taXNjX2ZpeHVwc2AgYWN0dWFsbHkgdXNlcyBgQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApYC5cblxuVGhhdCdzIHVzaW5nIGBCUEZfUkVHXzBgLCB3aGljaCB0cmFuc2xhdGVzIHRvIFJBWC4gQW5kIFJBWCBpc24ndCBhbiBleHRlbmRlZCByZWdpc3Rlciwgc28gdGhlcmUgaXMgdGhlIHByb2JsZW0sIEkgdGhpbmsuIFRoaXMgYnVnIG9ubHkgYWZmZWN0cyB0aGUgZXh0ZW5kZWQgcmVnaXN0ZXJzIC0gUjggdGhyb3VnaCBSMTUuIFdoZXJlIGlzIGBCUEZfTU9WNjRfUEVSQ1BVX1JFR2AgYWN0dWFsbHkgKnVzZWQqIHdpdGggYW4gZXh0ZW5kZWQgcmVnaXN0ZXI/IEknbSBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLlxuXG5BaCwgaGVyZSBpdCBpcy4gSW4gYGJwZl9kb19taXNjX2ZpeHVwc2A6XG5cbmBgYGNcblx0XHRcdGluc25fYnVmWzBdID0gaW5zblsxXTtcblx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuXHRcdFx0Y250ID0gMjtcbmBgYFxuXG5SaWdodCwgaXQncyBtb2RpZnlpbmcgdGhlIGluc3RydWN0aW9uIGluIHBsYWNlLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgYGJwZl9kb19taXNjX2ZpeHVwc2AgYXJvdW5kIGxpbmUgMTg2MyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NTEuNzgwMzMwMjE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NTA6XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuMTg1MTpcXHRcXG4xODUyOlxcdFxcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdFxcdFxcdC8qXFxuMTg1NTpcXHRcXHRcXHRcXHQgKiBXZSBhcmUgKnNraXBwaW5nKiBmaXJzdCBoYWxmIG9mIGxkX2ltbTY0IGluc25cXG4xODU2OlxcdFxcdFxcdFxcdCAqIHdpdGggJ2krKzsnLCBwYXRjaGluZyBvdmVyIHNlY29uZCBoYWxmIG9mIGl0XFxuMTg1NzpcXHRcXHRcXHRcXHQgKiB3aXRoIHRoYXQgc2FtZSBoYWxmICsgbW92NjRfcGVyY3B1X3JlZyBpbnNuLlxcbjE4NTg6XFx0XFx0XFx0XFx0ICogQWxsIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGNhbiBvbmx5XFxuMTg1OTpcXHRcXHRcXHRcXHQgKiByZXBsYWNlIG9uZSA4LWJ5dGUgaW5zbiwgd2hpY2ggZG9lcyBub3Qgd29ya1xcbjE4NjA6XFx0XFx0XFx0XFx0ICogd2VsbCBmb3IgbGRfaW1tNjQgaW5zbi5cXG4xODYxOlxcdFxcdFxcdFxcdCAqL1xcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRcXHRcXHRpbnNuX2J1ZlswXSA9IGluc25bMV07XFxuMTg2NDpcXHRcXHRcXHRcXHRpbnNuX2J1ZlsxXSA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbjE4NjU6XFx0XFx0XFx0XFx0Y250ID0gMjtcXG4xODY2OlxcdFxcbjE4Njc6XFx0XFx0XFx0XFx0aSsrO1xcbjE4Njg6XFx0XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4xODY5OlxcdFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuMTg3MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODcxOlxcdFxcbjE4NzI6XFx0XFx0XFx0XFx0ZGVsdGEgICAgKz0gY250IC0gMTtcXG4xODczOlxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcXG4xODc0OlxcdFxcdFxcdFxcdGluc24gICAgICA9IG5ld19wcm9nLVxcdTAwM2VpbnNuc2kgKyBpICsgZGVsdGE7XFxuMTg3NTpcXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4xODc2OlxcdFxcdFxcdH1cXG4xODc3OlxcdFxcbjE4Nzg6XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkpXFxuMTg3OTpcXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NTEuNzgwNDY5NzE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjMxNzk4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBCbG9jaydzIExvZ2ljKipcblxuQWxyaWdodCwgSSBzZWUgdGhpcyBjb25kaXRpb25hbCBibG9jaywgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IGl0cyBjb3JlIGxvZ2ljLiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgXCJXaGF0J3MgdGhlICpleGFjdCogY29uZGl0aW9uIHRoYXQgdHJpZ2dlcnMgdGhpcyB0aGluZz9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgJ3doeScgYmVoaW5kIGl0cyBleGVjdXRpb24uIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIEknbSBnb2luZyB0byBzdGFydCBieSBzZXR0aW5nIGEgdGVtcG9yYWwgYW5jaG9yLiBBbnl0aGluZyBiZWZvcmUgMTg1MCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gYXNzZXNzIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBibG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb250ZXh0IHRvIGJldHRlciBldmFsdWF0ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQwOjU3LjE0MzY1MzgxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9maXh1cHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODMwOlxcdFxcbjE4MzE6XFx0XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4xODMyOlxcdFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuMTgzMzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODM0OlxcdFxcbjE4MzU6XFx0XFx0XFx0XFx0ZGVsdGEgKz0gY250IC0gMTtcXG4xODM2OlxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcXG4xODM3OlxcdFxcdFxcdFxcdGluc24gPSBuZXdfcHJvZy1cXHUwMDNlaW5zbnNpICsgaSArIGRlbHRhO1xcbjE4Mzg6XFx0XFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuMTgzOTpcXHRcXHRcXHR9XFxuMTg0MDpcXHRcXG4xODQxOlxcdFxcdFxcdGlmIChicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkgXFx1MDAyNlxcdTAwMjZcXG4xODQyOlxcdFxcdFxcdCAgICBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSBcXHUwMDI2XFx1MDAyNlxcbjE4NDM6XFx0XFx0XFx0ICAgIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX1ZBTFVFIHx8XFxuMTg0NDpcXHRcXHRcXHQgICAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYX1ZBTFVFKSkge1xcbjE4NDU6XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4xODQ2OlxcdFxcbjE4NDc6XFx0XFx0XFx0XFx0YXV4ID0gXFx1MDAyNmVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpICsgZGVsdGFdO1xcbjE4NDg6XFx0XFx0XFx0XFx0bWFwID0gZW52LVxcdTAwM2V1c2VkX21hcHNbYXV4LVxcdTAwM2VtYXBfaW5kZXhdO1xcbjE4NDk6XFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcXG4xODUwOlxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dF9pbnNuO1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbjE4NTM6XFx0XFxuMTg1NDpcXHRcXHRcXHRcXHQvKlxcbjE4NTU6XFx0XFx0XFx0XFx0ICogV2UgYXJlICpza2lwcGluZyogZmlyc3QgaGFsZiBvZiBsZF9pbW02NCBpbnNuXFxuMTg1NjpcXHRcXHRcXHRcXHQgKiB3aXRoICdpKys7JywgcGF0Y2hpbmcgb3ZlciBzZWNvbmQgaGFsZiBvZiBpdFxcbjE4NTc6XFx0XFx0XFx0XFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiArIG1vdjY0X3BlcmNwdV9yZWcgaW5zbi5cXG4xODU4OlxcdFxcdFxcdFxcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxcbjE4NTk6XFx0XFx0XFx0XFx0ICogcmVwbGFjZSBvbmUgOC1ieXRlIGluc24sIHdoaWNoIGRvZXMgbm90IHdvcmtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NTcuMTQzODE1MDk2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzA0NTM2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBCUEYgQnVnKipcblxuT2theSwgc28gSSd2ZSBnb3QgaXQuIFRoaXMgaXMgYWJvdXQgYSBuYXN0eSBsaXR0bGUgYnVnIHRyaWdnZXJlZCBieSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwIHZhbHVlcyBiZWluZyBsb2FkZWQgdXNpbmcgYEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFdgIGFuZCBgQlBGX1BTRVVET19NQVBfVkFMVUVgLiBDbGFzc2ljISBJdCdzIGEgdmVyeSBzcGVjaWZpYyBzY2VuYXJpbywgYnV0IGRlZmluaXRlbHkgZXhwbG9pdGFibGUuXG5cbkJhc2ljYWxseSwgd2hlbiBhIEJQRiBwcm9ncmFtIHRyaWVzIHRvIGxvYWQgYSBwZXItY3B1IGFycmF5IG1hcCB2YWx1ZSBkaXJlY3RseSBpbnRvIGEgcmVnaXN0ZXIg4oCTIHNwZWNpZmljYWxseSwgaXQgdXNlcyBgQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpYCDigJMgdGhlcmUncyBhIHByb2JsZW0uIElmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciwgYGluc24tXHUwMDNlZHN0X3JlZ2AsIGhhcHBlbnMgdG8gYmUgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIGxpa2UgUjggb3IgaGlnaGVyLCBpdCBraWNrcyBvZmYgdGhpcyBidWcuXG5cblNvLCBsb2FkaW5nIHRoYXQgcGVyLWNwdSBhcnJheSB2YWx1ZSBpbnRvIGFueSByZWdpc3RlciBiZXR3ZWVuIFI4IGFuZCBSMTUgaXMgdGhlIHRyaWdnZXIuIFRoYXQncyBhIHZlcnkgbmFycm93LCB5ZXQgcXVpdGUgcmVhY2hhYmxlIHBhdGggdGhhdCBtYWtlcyBpdCBhbiBpbW1lZGlhdGUgcHJpb3JpdHkuIFdlJ3JlIGRlZmluaXRlbHkgZnV6emluZyB0aGlzLCBubyBxdWVzdGlvbi5cblxuQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCB3ZSdsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0JQRl9KSVRgLCBhbmQgYENPTkZJR19TTVBgLiBKdXN0IHlvdXIgYmFzaWMgQlBGIHJlcXVpcmVtZW50cy5cblxuSGFuZyBvbi4uLmBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKClgIGlzIHRydWUgb24geDg2LCB3aGljaCBpcyBjcnVjaWFsIGhlcmUuIEFscmlnaHQsIGJlc3QgdG8gZ28gdmVyaWZ5IGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuYC4gV2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGluZ3JlZGllbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM0NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQxOjAzLjI3NDI3MzEzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MjM1NjkyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0zMzEwPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMzMjMtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzMyNDpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMzI1LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTU2PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTcxLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTcyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTczLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MjEzMz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTEtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTUyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE1My17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDE3Nz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MTgxLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MTgyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MTgzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTIzNz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMjM4OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMzktYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MjYyPXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjUtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI2NjpcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjY3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yNzc9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbW0sIHUzMiAqb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI4MS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MjgyOlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yODMtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTI5ND1zdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI5OC1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6Mjk5OlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zMDAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzI3NT1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjc5LVxcbmtlcm5lbC9icGYvY29yZS5jOjMyODA6Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMyODEte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNTAzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0MC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDE6XFx0XFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0Mi1cXHRcXHQgICAgaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0MTQ9c3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2Njk1PWJvb2wgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgczMyIGltbSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjcwMy0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY3MDQ6XFx0XFx0cmV0dXJuIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaml0X3JlcXVlc3RlZCBcXHUwMDI2XFx1MDAyNiBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzA1LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MTowNC44NTY2Mzc1NzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2ODk4MTE1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEpJVCBDb21waWxlciBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbmAgZnVuY3Rpb24g4oCTIEkga25vdyBpdCdzIGRlZmluZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHNvIHRoYXQncyBteSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGJldHRlciwgc28gbGV0J3MgY2hlY2sgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgZG9faml0YC4gTXkgZ3V0IHRlbGxzIG1lIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUga2V5IOKAkyBpdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBjb21waWxpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIHRoZSBKSVQuIEhtbSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBjcml0aWNhbD8gQWgsIHllcywgYGJwZl9kb19taXNjX2ZpeHVwc2AsIHRoYXQncyB3aGVyZSB0aGUgYWN0dWFsIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkISBBbmQsIHdhaXQsIGJvdGggYHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cGAgYW5kIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAgYWxzbyBjb250cmlidXRlIGluc3RydWN0aW9uIGdlbmVyYXRpb24uIEJ1dCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHJlbWFpbnMgdGhlIGNvcmUgZm9jdXMgZm9yIG5vdy5cblxuTGV0IG1lIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgU01QYCBhcmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy5cblxuT2theSwgc28gdGhlIGNoYW5nZSBJJ20gbG9va2luZyBhdCAqaXMqIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCBoaW5nZXMgb24gYENPTkZJR19CUEZfSklUYCwgb2J2aW91c2x5LiBBbmQsIGZyb20gbG9va2luZyBhdCBgZG9faml0YCwgSSBzZWUgYENPTkZJR19TTVBgIGlzIHJlcXVpcmVkIGZvciB0aGUgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBibG9jay4gV2FpdCBhIHNlY29uZC4uLiBpZiBgQ09ORklHX1NNUGAgaXMgKm5vdCogZW5hYmxlZCwgdGhhdCBlbnRpcmUgc2VjdGlvbiBvZiBgZG9faml0YCBlZmZlY3RpdmVseSBkb2VzIG5vdGhpbmc/IEknZCBiZXR0ZXIgcmUtZXhhbWluZSBgZG9faml0YCBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ1NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MToxOC41NDY0NTE5OTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTMwOlxcdFxcdFxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCBBVVhfUkVHLCBkc3RfcmVnLCB0cnVlKTtcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdEVNSVQzKDB4MEYsIDB4NDQsIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIGRzdF9yZWcpKTtcXG4xOTMyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5MzM6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbjE5MzQ6XFx0XFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcbjE5MzU6XFx0XFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuMTkzNjpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbjE5Mzc6XFx0XFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuMTkzODpcXHRcXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XFxuMTkzOTpcXHRcXHRcXHRcXHRcXHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XFxuMTk0MDpcXHRcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuMTk0MTpcXHQjZW5kaWZcXG4xOTQyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NDM6XFx0XFx0XFx0XFx0fVxcbjE5NDQ6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTk0NTpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XFxuMTk0NjpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDApXFxuMTk0NzpcXHRcXHRcXHRcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csXFxuMTk0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXFxuMTk0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MToxOC41NDY2NDI0NzRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNDIxNDQ1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBvdGVudGlhbCBCdWcqKlxuXG5Pa2F5LCBzbyBpZiBgQ09ORklHX1NNUGAgaXMgb2ZmLCB0aGUgY29kZSBwYXRoIGp1c3QgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBgRU1JVF9tb3ZgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGBDT05GSUdfU01QYCBpcyBhIGtleSByZXF1aXJlbWVudCBmb3IgdHJpZ2dlcmluZyB0aGlzIGJ1Zy4gSSdtIGFsc28gc2VlaW5nIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyBuZWNlc3NhcnkgdG8gZXZlbiBjb21waWxlIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCBhbmQsIG9idmlvdXNseSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUgdG8gKnVzZSogQlBGLlxuXG5Ob3csIGhvbGQgb24uIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgcHJpbWFyeSBKSVQgY29tcGlsYXRpb24gZnVuY3Rpb24sIGJ1dCBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhlIG9idmlvdXMuIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGNvbXBpbGF0aW9uIHBpcGVsaW5lIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IEFoLCBoZXJlJ3Mgb25lOiBgYnBmX2RvX21pc2NfZml4dXBzYC4gVGhpcyBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBgQlBGX01PVjY0X1BFUkNQVV9SRUdgIGluc3RydWN0aW9uLiBEZWZpbml0ZWx5IGEgcGxhY2UgdG8gZm9jdXMuIEknbGwgbmVlZCB0byBjaGVjayBgYnBmX2RvX21pc2NfZml4dXBzYCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AgdG8gc2VlIGlmIGl0J3MgdGhlIHNvdXJjZSBvZiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDE6MjguNTg4Nzg5OTA5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkyMDcyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03OC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc5OlxcdC8qIGFkZHJlc3Mgc3BhY2UgY2FzdHMgY29udmVydGVkIHRvIEJQRl9BTFUsIHNlZSBicGZfZG9fbWlzY19maXh1cHMoKSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmMtODAtXFx0aWYgKGlzX2FkZHJfc3BhY2VfY2FzdDMyKHByb2csIGluc24pKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNDc0PXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDItICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNTAzOmludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDQte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMTUzPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzc0LVxcdGlmIChyZXQgPT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzNzU6XFx0XFx0cmV0ID0gYnBmX2RvX21pc2NfZml4dXBzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MToyOS4wMTgwMDI2MTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI1OTg4NTIyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgRml4KipcblxuT2theSwgYGJwZl9kb19taXNjX2ZpeHVwc2AgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbi4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29yZSBpc3N1ZSBoZXJlLlxuXG5SaWdodCwgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIGhhZCBhIGJ1ZyByZWxhdGVkIHRvIGBtb3ZfcGVyY3B1X2FkZHJgLiBJdCBzZWVtcyB0aGUgY29tcGlsZXIgd2FzIGdldHRpbmcgdGhlIFJFWCBwcmVmaXggd3Jvbmcgd2hlbiBkZWFsaW5nIHdpdGggcGVyLUNQVSBtYXAgdmFsdWUgbG9hZHMgYW5kIGV4dGVuZGVkIHJlZ2lzdGVycyAoUjgtUjE1KSBhcyB0aGUgZGVzdGluYXRpb24uIFNwZWNpZmljYWxseSwgdGhleSB3ZXJlIHVzaW5nIGBhZGRfMW1vZGAgd2hlbiB0aGV5IHNob3VsZCBoYXZlIGJlZW4gdXNpbmcgYGFkZF8ybW9kYC4gYGFkZF8xbW9kYCBzZXRzIHRoZSBcIkJcIiBiaXQsIHdoaWxlIGBhZGRfMm1vZGAgY29ycmVjdGx5IHNldHMgdGhlIFwiUlwiIGJpdCBmb3IgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSBgYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gIGluc3RydWN0aW9uLiBUaGlzIHJlc3VsdGVkIGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSwgd2l0aCBwb3RlbnRpYWxseSBuYXN0eSBjb25zZXF1ZW5jZXMgLSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyBpbiBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYFNNUGAuIFN0YW5kYXJkIHN0dWZmLCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSB1c2FnZSBvZiBgYWRkXzJtb2RgIHdpdGhpbiBgZG9faml0YC4gSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGxpa2UgdGhpczpcblxuYGBgY1xuRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuYGBgXG5cbk9rYXksIHNvIGBhZGRfMm1vZGAgdGFrZXMgdGhyZWUgYXJndW1lbnRzOiBgYnl0ZWAsIGByMWAsIGFuZCBgcjJgLiBJbiB0aGlzIGNhc2UsIGByMWAgaXMgMCwgYW5kIGByMmAgaXMgYGRzdF9yZWdgLiBJZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHRoaXMgc2hvdWxkIGNvcnJlY3RseSBzZXQgdGhlIFIgYml0IChiaXQgMikgaW4gdGhlIFJFWCBwcmVmaXguIExvb2tpbmcgY2xvc2VyIHRoZSBtb2RybSBieXRlIGlzIGRldGVybWluZWQgYnkgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYFxuXG5CdXQgd2FpdC4uLiBpc24ndCBgYWRkXzJyZWdgIHRha2luZyB0aGUgYGRzdF9yZWdgIGFzIHRoZSBgc3JjX3JlZ2A/IEl0J3MgdGltZSB0byBkb3VibGUgY2hlY2sgaG93IHRoYXQgYWxsIHBpZWNlcyB3b3JrIHRvZ2V0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBNb2RSTSBieXRlIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTIzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQxOjUxLjYxNjg1Nzk1OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdC8qIEVuY29kZSAnZHN0X3JlZycgYW5kICdzcmNfcmVnJyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICdieXRlJyAqL1xcbiAyODM6XFx0c3RhdGljIHU4IGFkZF8ycmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG4gMjg0OlxcdHtcXG4gMjg1OlxcdFxcdHJldHVybiBieXRlICsgcmVnMmhleFtkc3RfcmVnXSArIChyZWcyaGV4W3NyY19yZWddIFxcdTAwM2NcXHUwMDNjIDMpO1xcbiAyODY6XFx0fVxcbiAyODc6XFx0XFxuIDI4ODpcXHQvKiBTb21lIDEtYnl0ZSBvcGNvZGVzIGZvciBiaW5hcnkgQUxVIG9wZXJhdGlvbnMgKi9cXG4gMjg5OlxcdHN0YXRpYyB1OCBzaW1wbGVfYWx1X29wY29kZXNbXSA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDE6NTEuNjE3MTA4MTM5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjczNjQzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWdpc3RlciBBZGRpdGlvbiBJbnN0cnVjdGlvbioqXG5cbk9rYXksIHNvIGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuLi4gcmlnaHQsIHRoYXQgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCBgZHN0X3JlZ2AgYWN0cyBhcyBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSB0d28tcmVnaXN0ZXIgYWRkaXRpb24uIFRoZSBzaGlmdCBieSB0aHJlZSBoaWdobGlnaHRzIHRoYXQgYGRzdF9yZWdgIGlzIGJlaW5nIHJlZmVyZW5jZWQgdXNpbmcgdGhlIGByZWdgIGZpZWxkIHdpdGhpbiB0aGUgTW9kUk0gYnl0ZS4gQ29uc2VxdWVudGx5LCB0aGlzIHRlbGxzIG1lIHRoZSBSRVggcHJlZml4J3MgUiBiaXQgZGlyZWN0bHkgY29ycmVzcG9uZHMgdG8gdGhhdCBgcmVnYCBmaWVsZC5cblxuTm93LCByZWNhbGwgdGhhdCB0aGUgUiBiaXQgcmVzaWRlcyBhdCBiaXQgcG9zaXRpb24gMiBvZiB0aGUgUkVYIGJ5dGUsIHRodXMgaGF2aW5nIGEgdmFsdWUgb2YgNC4gVGhlcmVmb3JlLCBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgIHdpbGwgc2V0IHRoaXMgYml0IGlmIHRoZSB0YXJnZXQgcmVnaXN0ZXIsIGBkc3RfcmVnYCwgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIg4oCTIEknbSBzZWVpbmcgdGhhdCBgZHN0X3JlZ2AgaXMgdGhlIHNlY29uZCBhcmd1bWVudCwgYHIyYCwgd2l0aGluIGBhZGRfMm1vZGAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaG93IGBhZGRfMm1vZGAgaGFuZGxlcyB0aGlzIHNjZW5hcmlvLiBBIHF1aWNrIHJldmlldyBpcyBpbiBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NzMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MTo1OS44NDQ0NzUwODRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTU6XFx0XFxuIDI1NjpcXHRzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXFxuIDI1NzpcXHR7XFxuIDI1ODpcXHRcXHRpZiAoaXNfZXJlZyhyMSkpXFxuIDI1OTpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI2MDpcXHRcXHRpZiAoaXNfZXJlZyhyMikpXFxuIDI2MTpcXHRcXHRcXHRieXRlIHw9IDQ7XFxuIDI2MjpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjYzOlxcdH1cXG4gMjY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MTo1OS44NDQ2NjcyNzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU2MDc4MDQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJpdHdpc2UgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGByMmAgaXMgZGVmaW5pdGVseSBzZXR0aW5nIGJpdCAyLCB3aGljaCBoYXMgYSB2YWx1ZSBvZiA0LiBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgJ3MgYmVoYXZpb3Igb2Ygc2V0dGluZyB0aGUgUiBiaXQgZm9yIGBkc3RfcmVnYCBzZWVtcyBjb3JyZWN0LiBNeSBjb25jZXJuIGhlcmUgc3RlbXMgZnJvbSBob3cgdGhlIHByaW9yIGNvZGUgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCB3YXMgc2V0dGluZyBiaXQgMCwgZXNzZW50aWFsbHkgdGhlIEIgYml0LiBUaGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBgci9tYCBmaWVsZCB3aXRoaW4gdGhlIE1vZFJNIGJ5dGUsIG9yIHBvdGVudGlhbGx5IHRoZSBgYmFzZWAgaW4gdGhlIFNJQiBieXRlLlxuXG5Mb29raW5nIGF0IHRoZSBNb2RSTSBieXRlIGAweDA0YCwgSSBzZWUgdGhhdCBhIFNJQiBieXRlIGZvbGxvd3MuIFdpdGggYDB4MjVgIGFzIHRoZSBTSUIsIHRoZSBgaW5kZXhgIGlzIDQgKG5vIGluZGV4IHJlZ2lzdGVyKSBhbmQgYGJhc2VgIGlzIGVmZmVjdGl2ZWx5IDUgKHdoaWNoIHJlc29sdmVzIHRvIGEgMzItYml0IGRpc3BsYWNlbWVudCkuIEhvd2V2ZXIsIHdoZW4gdGhlIEIgYml0IGlzIGluYWR2ZXJ0ZW50bHkgc2V0LCB0aGUgYmFzZSBiZWNvbWVzIDEzIChSMTMpLiBUaGF0IHRyYW5zZm9ybXMgdGhlIGluc3RydWN0aW9uIGZyb20gd2hhdCBpdCBzaG91bGQgYmUgdG8gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBvcGVyYXRpb24sIG5hbWVseSwgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltyMTMgKyBcdTAwM2NvZmZcdTAwM2VdYCBpbnN0ZWFkIG9mIGBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAuIEFuZCB0aGF0J3Mgbm90IGFsbC4gQmVjYXVzZSBvZiB0aGUgUjEzIHJlZ2lzdGVyLCBpdCB3b3VsZCBhbHNvIHJlc3VsdCBpbiB0aGUgYGRzdGAgcmVnaXN0ZXIgYmVpbmcgdHJ1bmNhdGVkIChlLmcuLCBpZiBpdCB3YXMgUjgsIGl0IHdvdWxkIGJlY29tZSBSQVgpLiBUaGUgZWZmZWN0IHdvdWxkIGJlIGFuIGluc3RydWN0aW9uIGxpa2UgYGFkZCByYXgsIGdzOltyMTMgKyBcdTAwM2NvZmZcdTAwM2VdYCwgd2hpY2ggaXMgb2J2aW91c2x5IGluY29ycmVjdC5cblxuVGhpcyBpcyBhIGNyaXRpY2FsIGVycm9yISBJdCdzIGdvaW5nIHRvIGxlYWQgdG8gY3Jhc2hlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHJlYWRzIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbi5cblxuR29vZCwgdGhlIGZpeCBzZWVtcyBwZXJmZWN0bHkgcmVhc29uYWJsZSBhbmQgY29ycmVjdC4gSSdtIGNvbmZpZGVudCBpdCBhZGRyZXNzZXMgdGhlIHByb2JsZW0uIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBjb25maXJtIHRoaXMuIEkgdGhpbmsgSSd2ZSBnYXRoZXJlZCBhbGwgdGhlIHJlbGV2YW50IGRldGFpbHMgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNTIsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MDguNDA1NDUxMTQ3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2ODQ1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJTTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgd2hlcmUgdGhlIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9uIChlbWl0dGVkIGZvciBwZXItQ1BVIG1hcCB2YWx1ZSBsb2FkcykgaW5jb3JyZWN0bHkgZW5jb2RlZCB0aGUgUkVYIHByZWZpeCB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciB3YXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIEl0IHVzZWQgYGFkZF8xbW9kYCB3aGljaCBzZXRzIHRoZSBCIGJpdCBpbnN0ZWFkIG9mIGBhZGRfMm1vZGAgd2hpY2ggY29ycmVjdGx5IHNldHMgdGhlIFIgYml0IGZvciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGBhZGQgXFx1MDAzY2RzdFxcdTAwM2UsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV1gIGluc3RydWN0aW9uLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgcmVnaXN0ZXIgdXNhZ2UgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBjb3JydXB0aW9uIG9yIGludmFsaWQgaW5zdHJ1Y3Rpb24gZmF1bHRzIHdoZW4gZXhlY3V0aW5nIEpJVC1jb21waWxlZCBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdHJ1Y3Rpb24uIFRoaXMgd291bGQgcmVzdWx0IGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBmYXVsdHMgd2hlbiBleGVjdXRpbmcgSklULWNvbXBpbGVkIEJQRiBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MDguNDgxMTQyNTY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYyMzE1Mjc3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjowOC40ODE3ODg1NjRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM2MjMwODc4OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBXaGVuIGVtaXR0aW5nIHRoZSBgYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdYCBpbnN0cnVjdGlvbiBmb3IgcGVyLUNQVSBhZGRyZXNzIHJlc29sdXRpb24sIHRoZSBKSVQgaW5jb3JyZWN0bHkgdXNlZCBgYWRkXzFtb2RgLCB3aGljaCBzZXRzIHRoZSBSRVguQiBiaXQgaW5zdGVhZCBvZiB0aGUgUkVYLlIgYml0IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChlLmcuLCBSOC1SMTUpLiBUaGlzIGVuY29kaW5nIGVycm9yIGNhdXNlcyB0aGUgQ1BVIHRvIGludGVycHJldCB0aGUgaW5zdHJ1Y3Rpb24gYXMgYGFkZCByYXgsIGdzOltyMTMgKyBcXHUwMDNjb2ZmXFx1MDAzZV1gIGluc3RlYWQgb2YgYGFkZCByOCwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXWAuXFxuXFxuRXhlY3V0aW5nIHRoaXMgbWFsZm9ybWVkIGluc3RydWN0aW9uIGxlYWRzIHRvIHJlYWRpbmcgbWVtb3J5IGZyb20gYSBzZW1pLWFyYml0cmFyeSBwZXItQ1BVIG9mZnNldCAoY29udHJvbGxlZCBieSBgcjEzYCwgd2hpY2ggbWFwcyB0byBgQlBGX1JFR183YCkgYW5kIGNvcnJ1cHRpbmcgdGhlIGByYXhgIChgQlBGX1JFR18wYCkgcmVnaXN0ZXIuIFRoaXMgcmVzdWx0cyBpbiBlaXRoZXIgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCAoY2F1c2luZyBhIHBhZ2UgZmF1bHQgb3IgdHJpZ2dlcmluZyBLQVNBTikgb3IgYW4gaW5mby1sZWFrIG9mIGFyYml0cmFyeSBwZXItQ1BVIG1lbW9yeS4gXFxuXFxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiwgdXNhZ2UsIG9yIGxlYWtpbmcgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCBpcyBhIHB1cmUgSklUIG1pc2NvbXBpbGF0aW9uIHRoYXQgbGVhZHMgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIHJlZ2lzdGVyIGNvcnJ1cHRpb24uIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJlc3VsdGluZyBwYWdlIGZhdWx0cyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMGI5ZDE2ODhlNTliNmMwYjc0MGFmOGU3MzE2ODFhOWZiY2QzNTI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6Mzk6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGQ5MjA3NzJhZjdkNWYuLjFhOWZiNTMwYWRjM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE5MzUsNyArMTkzNSw3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0XHRFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbi1cdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtcbitcdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcbiBcdFx0XHRcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcbiBcdFx0XHRcdEVNSVQoKHUzMikodW5zaWduZWQgbG9uZylcdTAwMjZ0aGlzX2NwdV9vZmYsIDQpO1xuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MDguNDgxNzg5MjQ0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzU4MzM2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyBhIHJlcGxhY2VtZW50IG9mIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgd2l0aCBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkLiBUaGlzIGlzIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciwgc28gaXQncyBhbGwgYWJvdXQgaG93IHdlIGdlbmVyYXRlIHRoZSBtYWNoaW5lIGNvZGUuXG5cbkkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcuIFRoZXNlIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgZnVuY3Rpb25zIG9yIG1hY3JvcywgdGhleSdyZSByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUgcmlnaHQgeDg2IGluc3RydWN0aW9uIHByZWZpeGVzIOKAkyBpbiB0aGlzIGNhc2UsIHRoZSBSRVggcHJlZml4LiBBbiBlbmNvZGluZyBlcnJvciBoZXJlIGNvdWxkIGFic29sdXRlbHkgbGVhZCB0byBpbmNvcnJlY3QgaW5zdHJ1Y3Rpb25zIGJlaW5nIGV4ZWN1dGVkLCBhbmQgdGhhdCdzIGEgcHJvYmxlbS4gQ3Jhc2hlcyBhcmUgYSBsaWtlbHkgb3V0Y29tZSBvZiBpbmNvcnJlY3QgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgdGhpcyBkb2Vzbid0ICpuZWNlc3NhcmlseSogbWVhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbiBwbGF5IGhlcmUuIFRoZSBmaXggY291bGQgc2ltcGx5IG1lYW4gaXQncyBhbiBpbnN0cnVjdGlvbiBiZWluZyBlbWl0dGVkIGluY29ycmVjdGx5LlxuXG5JIG5lZWQgdG8gY29uZmlybSBieSBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgd2l0aGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgYWRkcmVzc2luZyBtb2RlIGlzIGJlaW5nIHVzZWQgYW5kIHdoeSB0aGlzIGNoYW5nZSBpcyByZXF1aXJlZCwgYmVjYXVzZSB0aGF0J2xsIHRlbGwgbWUgaWYgdGhlcmUgd2FzIGEgc3VidGxlIGJ1ZyBvciBpbnN0cnVjdGlvbiBpbmNvbXBhdGliaWxpdHkgdGhhdCB0aGlzIGNoYW5nZSBmaXhlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQyOjE2LjkxNzYyNzM2MVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNzI1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRkXzFtb2RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0yNDM9c3RhdGljIGJvb2wgaXNfYXhyZWcodTMyIHJlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDgtLyogQWRkIG1vZGlmaWVycyBpZiAncmVnJyBtYXBzIHRvIHg4Ni02NCByZWdpc3RlcnMgUjguLlIxNSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNDk6c3RhdGljIHU4IGFkZF8xbW9kKHU4IGJ5dGUsIHUzMiByZWcpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1MC17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTQ5LVxcdFxcdC8qICdtb3YgJXJheCwgaW1tMzInIHNpZ24gZXh0ZW5kcyBpbW0zMiAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NTA6XFx0XFx0YjEgPSBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTUxLVxcdFxcdGIyID0gMHhDNztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NzEtXFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk3MjpcXHRcXHRFTUlUMShhZGRfMW1vZCgweDQwLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk3My1cXHRFTUlUMV9vZmYzMihhZGRfMXJlZygweEI4LCBkc3RfcmVnKSwgaW1tMzIpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTk3OD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW02NCh1OCAqKnBwcm9nLCB1MzIgZHN0X3JlZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05OTUtXFx0XFx0LyogbW92YWJzcSByYXgsIGltbTY0ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk5NjpcXHRcXHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgYWRkXzFyZWcoMHhCOCwgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05OTctXFx0XFx0RU1JVChpbW0zMl9sbywgNCk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTEwMj1zdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMDYtXFx0aWYgKGlzNjQpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMDc6XFx0XFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMDgtXFx0ZWxzZSBpZiAoaXNfZXJlZyhyZWcpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTA5OlxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDAsIHJlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTEwLVxcdCpwcHJvZyA9IHByb2c7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIyMS1cXHRcXHRcXHRcXHQvKiBFbWl0ICdic3dhcCByYXgnIHRvIHN3YXAgOCBieXRlcyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjIyOlxcdFxcdFxcdFxcdEVNSVQzKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweDBGLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjIzLVxcdFxcdFxcdFxcdCAgICAgIGFkZF8xcmVnKDB4QzgsIGRzdF9yZWcpKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjgyLVxcdFxcdFxcdH1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI4MzpcXHRcXHRcXHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODQtXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzgzMz1zdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg0Mi1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzg0MzpcXHRcXHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcXHQvKiBjbXAgcmR4LGZ1bmMgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg0NC1cXHRcXHRpZiAoIWlzX3NpbW0zMihwcm9nc1thXSkpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg2My1cXHRwaXZvdCA9IChiIC0gYSkgLyAyO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODY0OlxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdFxcdC8qIGNtcCByZHgsZnVuYyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODY1LVxcdGlmICghaXNfc2ltbTMyKHByb2dzW2EgKyBwaXZvdF0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjoxNi45NjQ5MDYxMDlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0OTQ0NzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFzc2VtYmx5IENvZGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGNoYW5nZSB0byBgRU1JVDJgIGNhdGNoZXMgbXkgZXllLiBXZSd2ZSBnb25lIGZyb20gdXNpbmcgYGFkZF8xbW9kYCB0byBgYWRkXzJtb2RgLiBUaGUgaW5pdGlhbCBjb2RlIHVzZWQgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYC4gSXQgc2V0cyB0aGUgUkVYLkIgYml0IGlmIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gQnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbiBpcyBgYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gLiBBbmQgdGhlbiwgdGhlIG5leHQgbGluZSBgRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO2AuLi4gVGhhdCBtYWtlcyBtZSB0aGluayBhIGJpdC5cblxuVGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVwZGF0ZSB0aGUgY29kZSB0byBhbGxvdyBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXJzLiBUaGUgZmlyc3QgY2hhbmdlLCBub3cgdXNpbmcgYGFkZF8ybW9kYCwgc3VnZ2VzdHMgdGhlIGludGVudCB0byBkZWFsIHdpdGggZXh0ZW5kZWQgcmVnaXN0ZXJzLiBJIGtub3cgYDB4MDNgIGlzIHRoZSBgYWRkYCBvcGNvZGUuIFNvLCB0aGUgUkVYIHByZWZpeCBoYXMgdG8gZ28gKmJlZm9yZSogdGhlIGAweDAzYCBvcGNvZGUuIEFuZCB0aGUgcHJlZml4IGlzIGAweDQ4YCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgUkVYLlcgcHJlZml4LiBCdXQgaWYgd2UgYXJlIGV4dGVuZGluZyB0aGUgcmVnaXN0ZXIsIHNwZWNpZmljYWxseSBgZHN0X3JlZ2AsIHRoZSBSRVggcHJlZml4ICpzaG91bGQqIGJlIHNldHRpbmcgdGhlIFJFWC5SIGJpdC4gVGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGVuY29kZWQgaW4gdGhlIE1vZFIvTSBieXRlLiBJdCBpcyBlbmNvZGVkIGluIHRoZSBgcmVnYCBmaWVsZCAoYml0cyAzLTUpLCAqbm90KiB0aGUgYHIvbWAgZmllbGQgKGJpdHMgMC0yKS4gVGhpcyBpbmRpY2F0ZXMgdGhlIHByb2JsZW0uXG5cbk5vdywgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBzZWVtcyB0byBiZSB0aGUgY3J1Y2lhbCBiaXQuIEl0IGxvb2tzIGxpa2UgaXQgKnNob3VsZCogYmUgcHV0dGluZyBgZHN0X3JlZ2AgaW4gdGhlIGByZWdgIGZpZWxkIG9mIHRoZSBNb2RSL00gYnl0ZSwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHZlcmlmeSBleGFjdGx5IGhvdyBgYWRkXzJyZWdgIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdHJhY2UgdGhlIHJlZ2lzdGVyIGVuY29kaW5nIHRvIGNvbmZpcm0gdGhhdCB0aGUgcGF0Y2ggaXMgY29ycmVjdGx5IGVuY29kaW5nIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYHJlZ2AgZmllbGQgYW5kIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIFJFWCBiaXRzLiBPdGhlcndpc2UsIHdlIHdpbGwgaGF2ZSBhIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjoyMy43MTQzNTk5OTdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzEwMDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZF8ycmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTI2PXN0YXRpYyBib29sIGlzX3VpbW0zMih1NjQgdmFsdWUpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM0LVxcdFxcdGlmIChEU1QgIT0gU1JDKVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFxcXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEzNTpcXHRcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBEU1QsIFNSQyksIDB4ODksIGFkZF8ycmVnKDB4QzAsIERTVCwgU1JDKSk7IFxcXFxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM2LVxcdH0gd2hpbGUgKDApXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mjc3PXN0YXRpYyB1OCBhZGRfMXJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yODItLyogRW5jb2RlICdkc3RfcmVnJyBhbmQgJ3NyY19yZWcnIHJlZ2lzdGVycyBpbnRvIHg4Ni02NCBvcGNvZGUgJ2J5dGUnICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI4MzpzdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yODQte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTkzOD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW0zMih1OCAqKnBwcm9nLCBib29sIHNpZ25fcHJvcGFnYXRlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk2NS1cXHRcXHRiMyA9IDB4QzA7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk2NjpcXHRcXHRFTUlUMihiMiwgYWRkXzJyZWcoYjMsIGRzdF9yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTY3LVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMDA0PXN0YXRpYyB2b2lkIGVtaXRfbW92X3JlZyh1OCAqKnBwcm9nLCBib29sIGlzNjQsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDE0LVxcdFxcdFxcdEVNSVQxKGFkZF8ybW9kKDB4NDAsIGRzdF9yZWcsIHNyY19yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAxNTpcXHRcXHRFTUlUMigweDg5LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTYtXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwMjE9c3RhdGljIHZvaWQgZW1pdF9tb3ZzeF9yZWcodTggKipwcHJvZywgaW50IG51bV9iaXRzLCBib29sIGlzNjQsIHUzMiBkc3RfcmVnLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjktXFx0XFx0XFx0RU1JVDQoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MGYsIDB4YmUsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzA6XFx0XFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDMxLVxcdFxcdGVsc2UgaWYgKG51bV9iaXRzID09IDE2KVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDMyLVxcdFxcdFxcdEVNSVQ0KGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBmLCAweGJmLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDMzOlxcdFxcdFxcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzNC1cXHRcXHRlbHNlIGlmIChudW1fYml0cyA9PSAzMilcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzNS1cXHRcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHg2MyxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAzNjpcXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzctXFx0fSBlbHNlIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDQwLVxcdFxcdFxcdEVNSVQ0KGFkZF8ybW9kKDB4NDAsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBmLCAweGJlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDQxOlxcdFxcdFxcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0Mi1cXHRcXHR9IGVsc2UgaWYgKG51bV9iaXRzID09IDE2KSB7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0NS1cXHRcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDBmLCBzcmNfcmVnLCBkc3RfcmVnKSwgMHhiZixcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA0NjpcXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDctXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwNTQ9c3RhdGljIHZvaWQgZW1pdF9pbnNuX3N1ZmZpeCh1OCAqKnBwcm9nLCB1MzIgcHRyX3JlZywgdTMyIHZhbF9yZWcsIGludCBvZmYpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA2NC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA2NTpcXHRcXHRFTUlUMihhZGRfMnJlZygweDQwLCBwdHJfcmVnLCB2YWxfcmVnKSwgb2ZmKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA2Ni1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDY3LVxcdFxcdC8qIDQtYnl0ZSBzaWduZWQgZGlzcGxhY2VtZW50ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNjg6XFx0XFx0RU1JVDFfb2ZmMzIoYWRkXzJyZWcoMHg4MCwgcHRyX3JlZywgdmFsX3JlZyksIG9mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNjktXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwNzM9c3RhdGljIHZvaWQgZW1pdF9pbnNuX3N1ZmZpeF9TSUIodTggKipwcHJvZywgdTMyIHB0cl9yZWcsIHUzMiB2YWxfcmVnLCB1MzIgaW5kZXhfcmVnLCBpbnQgb2ZmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNzctXFx0aWYgKGlzX2ltbTgob2ZmKSkge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDc4OlxcdFxcdEVNSVQzKGFkZF8ycmVnKDB4NDQsIEJQRl9SRUdfMCwgdmFsX3JlZyksIGFkZF8ycmVnKDAsIHB0cl9yZWcsIGluZGV4X3JlZykgLyogU0lCICovLCBvZmYpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDc5LVxcdH0gZWxzZSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwODA6XFx0XFx0RU1JVDJfb2ZmMzIoYWRkXzJyZWcoMHg4NCwgQlBGX1JFR18wLCB2YWxfcmVnKSwgYWRkXzJyZWcoMCwgcHRyX3JlZywgaW5kZXhfcmVnKSAvKiBTSUIgKi8sIG9mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwODEtXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2MDI9c3RhdGljIHZvaWQgZW1pdF9zaGlmdHgodTggKipwcHJvZywgdTMyIGRzdF9yZWcsIHU4IHNyY19yZWcsIGJvb2wgaXM2NCwgdTggb3ApXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYwOC1cXHRlbWl0XzN2ZXgoXFx1MDAyNnByb2csIHIsIGZhbHNlLCByLCBtLCBpczY0LCBzcmNfcmVnLCBmYWxzZSwgb3ApO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjA5OlxcdEVNSVQyKDB4ZjcsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYxMC1cXHQqcHByb2cgPSBwcm9nO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2OTE9c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzE2LVxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzE3OlxcdFxcdFxcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTgtXFx0XFx0XFx0RU1JVDIoWDg2X0pFLCAzKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzIxLVxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTcyMjpcXHRcXHRFTUlUMigweDAxLCBhZGRfMnJlZygweEMwLCByZWcsIFg4Nl9SRUdfUjEyKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjMtXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE4OTctXFx0XFx0XFx0YjIgPSBzaW1wbGVfYWx1X29wY29kZXNbQlBGX09QKGluc24tXFx1MDAzZWNvZGUpXTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTg5ODpcXHRcXHRcXHRFTUlUMihiMiwgYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgc3JjX3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xODk5LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MjUtXFx0XFx0XFx0XFx0bWF5YmVfZW1pdF9tb2QoXFx1MDAyNnByb2csIGRzdF9yZWcsIGRzdF9yZWcsIGZhbHNlKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkyNjpcXHRcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MjctXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMC1cXHRcXHRcXHRcXHRtYXliZV9lbWl0X21vZChcXHUwMDI2cHJvZywgQVVYX1JFRywgZHN0X3JlZywgdHJ1ZSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MzE6XFx0XFx0XFx0XFx0RU1JVDMoMHgwRiwgMHg0NCwgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzgtXFx0XFx0XFx0XFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTM5OlxcdFxcdFxcdFxcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTk0MC1cXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMC1cXHRcXHRcXHRcXHQvKiBpbXVsIGRzdF9yZWcsIGRzdF9yZWcsIGltbTggKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMTpcXHRcXHRcXHRcXHRFTUlUMygweDZCLCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMi1cXHRcXHRcXHRcXHQgICAgICBpbW0zMik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjEwNS1cXHRcXHRcXHRcXHRFTUlUMl9vZmYzMigweDY5LFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMTA2OlxcdFxcdFxcdFxcdFxcdCAgICBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjEwNy1cXHRcXHRcXHRcXHRcXHQgICAgaW1tMzIpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIxMTUtXFx0XFx0XFx0LyogaW11bCBkc3RfcmVnLCBzcmNfcmVnICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIxMTY6XFx0XFx0XFx0RU1JVDMoMHgwRiwgMHhBRiwgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMTE3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMDktXFx0XFx0XFx0XFx0XFx0RU1JVDIoMHgwRiwgMHhCNyk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMTA6XFx0XFx0XFx0XFx0RU1JVDEoYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjExLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMzgtXFx0XFx0XFx0XFx0XFx0RU1JVDIoMHgwRiwgMHhCNyk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMzk6XFx0XFx0XFx0XFx0RU1JVDEoYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjQwLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyNDQtXFx0XFx0XFx0XFx0XFx0RU1JVDEoMHg0NSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyNDU6XFx0XFx0XFx0XFx0RU1JVDIoMHg4OSwgYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjQ2LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTIyODU9c3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ3Ni1cXHRcXHRcXHRcXHRtYXliZV9lbWl0X21vZChcXHUwMDI2cHJvZywgQVVYX1JFRywgQlBGX1JFR19BWCwgdHJ1ZSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0Nzc6XFx0XFx0XFx0XFx0RU1JVDIoMHgyOSwgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgQlBGX1JFR19BWCkpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDc4LVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0ODQtXFx0XFx0XFx0XFx0bWF5YmVfZW1pdF9tb2QoXFx1MDAyNnByb2csIEFVWF9SRUcsIEJQRl9SRUdfQVgsIHRydWUpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNDg1OlxcdFxcdFxcdFxcdEVNSVQyKDB4MzksIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIEJQRl9SRUdfQVgpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4Ni1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTkxLVxcdFxcdFxcdFxcdEVNSVQyKHNpbXBsZV9hbHVfb3Bjb2Rlc1tCUEZfT1AoaW5zbi1cXHUwMDNlaW1tKV0sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI1OTI6XFx0XFx0XFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgcmVhbF9zcmNfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1OTMtXFx0XFx0XFx0XFx0LyogQXR0ZW1wdCB0byBzd2FwIGluIG5ldyB2YWx1ZSAqL1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3MTMtXFx0XFx0XFx0XFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjcxNDpcXHRcXHRcXHRFTUlUMigweDM5LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3MTUtXFx0XFx0XFx0Z290byBlbWl0X2NvbmRfam1wO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3MjEtXFx0XFx0XFx0XFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjcyMjpcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3MjMtXFx0XFx0XFx0Z290byBlbWl0X2NvbmRfam1wO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3NTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mjc1NzpcXHRcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3NTgtXFx0XFx0XFx0XFx0Z290byBlbWl0X2NvbmRfam1wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjoyMy43NjA2NzUwNzVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4Mzk5MTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvZGluZyB0aGUgSW5zdHJ1Y3Rpb246IGBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAqKlxuXG5Pa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gSSdtIGxvb2tpbmcgYXQgaXMgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYC4gVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCBnaXZlcyB1cyB0aGUgYmFzaWMgYXNzZW1ibHksIGJ1dCBJIG5lZWQgdG8gYnJlYWsgZG93biAqZXhhY3RseSogaG93IHRoaXMgaXMgYmVpbmcgdHJhbnNsYXRlZCBpbnRvIG1hY2hpbmUgY29kZS4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGVtaXRzIGAweDY1YCB3aGljaCBJIGtub3cgcmVwcmVzZW50cyB0aGUgYGdzOmAgcHJlZml4LiBUaGVuLCBgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZylgIGdvZXMgbmV4dC4gVGhlIG5leHQgbGluZSBlbWl0cyBgRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO2AgSG1tLCBpbnRlcmVzdGluZy4gSSByZWNvZ25pemUgdGhlIGAweDAzYCBhcyBwYXJ0IG9mIHRoZSBgYWRkYCBvcGNvZGUsIHJpZ2h0P1xuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHdoZXJlIHRoZSBNb2RSL00gYnl0ZSBhbmQgbWF5YmUgYSBTSUIgYnl0ZSBjb21lIGludG8gcGxheS4gKkFoYSEqIFRoYXQgYDB4MDRgIGluIGBhZGRfMnJlZ2AgaXMgdGhlIGtleS4gVGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYHIvbWAgZmllbGQgKHRoZSBib3R0b20gMyBiaXRzKSB3aWxsIGJlIHNldCB0byBgMHgwNGAsIG1lYW5pbmcgYSBTSUIgYnl0ZSB3aWxsIGZvbGxvdy4gQW5kIGhlcmUncyB0aGUga2lja2VyOiBgZHN0X3JlZ2AgaXMgYmVpbmcgcHV0IGludG8gdGhlIGByZWdgIGZpZWxkIChiaXRzIDMtNSkgb2YgdGhlIE1vZFIvTSBieXRlLiBOb3csIGhvdyBkb2VzIHRoYXQgd29yayBvdXQ/IFRoYXQgbWVhbnMgdGhlIE1vZFIvTSBieXRlIGl0c2VsZiB3aWxsIGJlIGVzc2VudGlhbGx5IGAweDA0IHwgKGRzdF9yZWcgXHUwMDNjXHUwMDNjIDMpYC4gV2UgYWxzbyBzZWUgdGhlIFNJQiBieXRlIGVtaXR0ZWQgYXMgYDB4MjVgIChubyBpbmRleCwgbm8gYmFzZSwgZGlzcDMyKS4gU28gdGhlIGByL21gIGlzIGAweDA0YCB3aXRoIGEgZGlzcDMyIGFuZCB0aGUgcmVnIGZpZWxkIGlzIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci5cblxuTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBhZGRfMnJlZyhieXRlLCBkc3RfcmVnLCBzcmNfcmVnKWAgLSB0aGlzIGFsc28gZW5jb2RlcyB0aGUgYHNyY19yZWdgIGJ1dCBJIG9ubHkgc2VlIGBkc3RfcmVnYD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhZGRfMnJlZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIEknbSBjbGVhciBvbiBob3cgdGhlIGBzcmNfcmVnYCBpcyBnZXR0aW5nIGhhbmRsZWQuIExldCdzIGdvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgaW1wbGVtZW50YXRpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyMywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjoyOS45NDQ2NzAwMloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5OTcyMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyB1OCBhZGRfMnJlZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI3Nz1zdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjgyLS8qIEVuY29kZSAnZHN0X3JlZycgYW5kICdzcmNfcmVnJyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICdieXRlJyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyODM6c3RhdGljIHU4IGFkZF8ycmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjg0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MzAuMjA0NjQ3NTMyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjkyOTAzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhZGRfMnJlZ2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBlYWNoIGxpbmUsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCByZXNvdXJjZSB1c2FnZSwgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBncmFzcCB0aGUgY29yZSBsb2dpYzogd2hhdCByZWdpc3RlcnMgYXJlIGludm9sdmVkLCB3aGF0IHRoZSBvcGVyYXRpb25zIGFyZSwgYW5kIHRoZSBleHBlY3RlZCBvdXRjb21lLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIHBpdGZhbGxzIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMuIEtub3dpbmcgbXkgZmllbGQsIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIG92ZXJhbGwgc3lzdGVtJ3MgYmVoYXZpb3IuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGV0aGVyIGFueSBlZGdlIGNhc2VzIGFyZSBoYW5kbGVkLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvZGUgd29ya3MgZWZmaWNpZW50bHkgYW5kIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjozNS40NzM5NDA2OTRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHQvKiBFbmNvZGUgJ2RzdF9yZWcnIGFuZCAnc3JjX3JlZycgcmVnaXN0ZXJzIGludG8geDg2LTY0IG9wY29kZSAnYnl0ZScgKi9cXG4gMjgzOlxcdHN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXFxuIDI4NDpcXHR7XFxuIDI4NTpcXHRcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ10gKyAocmVnMmhleFtzcmNfcmVnXSBcXHUwMDNjXFx1MDAzYyAzKTtcXG4gMjg2OlxcdH1cXG4gMjg3OlxcdFxcbiAyODg6XFx0LyogU29tZSAxLWJ5dGUgb3Bjb2RlcyBmb3IgYmluYXJ5IEFMVSBvcGVyYXRpb25zICovXFxuIDI4OTpcXHRzdGF0aWMgdTggc2ltcGxlX2FsdV9vcGNvZGVzW10gPSB7XFxuIDI5MDpcXHRcXHRbQlBGX0FERF0gPSAweDAxLFxcbiAyOTE6XFx0XFx0W0JQRl9TVUJdID0gMHgyOSxcXG4gMjkyOlxcdFxcdFtCUEZfQU5EXSA9IDB4MjEsXFxuIDI5MzpcXHRcXHRbQlBGX09SXSA9IDB4MDksXFxuIDI5NDpcXHRcXHRbQlBGX1hPUl0gPSAweDMxLFxcbiAyOTU6XFx0XFx0W0JQRl9MU0hdID0gMHhFMCxcXG4gMjk2OlxcdFxcdFtCUEZfUlNIXSA9IDB4RTgsXFxuIDI5NzpcXHRcXHRbQlBGX0FSU0hdID0gMHhGOCxcXG4gMjk4OlxcdH07XFxuIDI5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MzUuNDc0MjA4MzgzWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3Mjg1MDQzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBhZGRfMnJlZ2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGFkZF8ycmVnKGJ5dGUsIGRzdF9yZWcsIHNyY19yZWcpYCBmdW5jdGlvbi4gVGhlIGNvcmUgY2FsY3VsYXRpb24gaXM6IGBieXRlICsgcmVnMmhleFtkc3RfcmVnXSArIChyZWcyaGV4W3NyY19yZWddIFx1MDAzY1x1MDAzYyAzKWAuIFNvLCBpZiBJIGNhbGwgaXQgd2l0aCwgc2F5LCBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgLCB0aGF0IGJlY29tZXMgYDB4MDQgKyByZWcyaGV4WzBdICsgKHJlZzJoZXhbZHN0X3JlZ10gXHUwMDNjXHUwMDNjIDMpYC4gUmlnaHQsIGAwYCByZXByZXNlbnRzIGBCUEZfUkVHXzBgLCB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCBtYXBzIGRpcmVjdGx5IHRvIHRoZSBgUkFYYCByZWdpc3Rlci5cblxuVGhlcmVmb3JlLCB3ZSBoYXZlIGBzcmNfcmVnYCBhcyBgZHN0X3JlZ2AsIHdpdGggdGhlIHZhbHVlIGxlZnQgc2hpZnRlZCBieSB0aHJlZSAoaXRzIHZhbHVlIGlzIGxvY2F0ZWQgaW4gdGhlIE1vZFIvTSBieXRlIGByZWdgIGZpZWxkKS4gQW5kIHRoZSBNb2RSL00gYnl0ZSBoYXMgYDBgIGluIHRoZSBgci9tYCBmaWVsZC5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIFJFWCBwcmVmaXguIFRoYXQncyBgMHg0OCB8IFJFWC5SIHwgUkVYLkJgLiBJZiB0aGUgYGRzdF9yZWdgIGlzIGluIHRoZSBgcmVnYCBmaWVsZCwgdGhlbiBJIG11c3Qgc2V0IFJFWC5SIGlmIGBkc3RfcmVnYCByZXByZXNlbnRzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGUgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCBmdW5jdGlvbiBzZXRzIFJFWC5CIGlmIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciBhcyB3ZWxsLiBUaW1lIHRvIGdvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBmdW5jdGlvbnMgdG8gY29uZmlybSB0aGUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzEwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6NDUuMjAyNzE3NTMxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdHJldHVybiByZWcgPT0gQlBGX1JFR18wO1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHQvKiBBZGQgbW9kaWZpZXJzIGlmICdyZWcnIG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXFxuIDI0OTpcXHRzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcXG4gMjUwOlxcdHtcXG4gMjUxOlxcdFxcdGlmIChpc19lcmVnKHJlZykpXFxuIDI1MjpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI1MzpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjU0OlxcdH1cXG4gMjU1OlxcdFxcbiAyNTY6XFx0c3RhdGljIHU4IGFkZF8ybW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyKVxcbiAyNTc6XFx0e1xcbiAyNTg6XFx0XFx0aWYgKGlzX2VyZWcocjEpKVxcbiAyNTk6XFx0XFx0XFx0Ynl0ZSB8PSAxO1xcbiAyNjA6XFx0XFx0aWYgKGlzX2VyZWcocjIpKVxcbiAyNjE6XFx0XFx0XFx0Ynl0ZSB8PSA0O1xcbiAyNjI6XFx0XFx0cmV0dXJuIGJ5dGU7XFxuIDI2MzpcXHR9XFxuIDI2NDpcXHRcXG4gMjY1OlxcdHN0YXRpYyB1OCBhZGRfM21vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMiwgdTMyIGluZGV4KVxcbiAyNjY6XFx0e1xcbiAyNjc6XFx0XFx0aWYgKGlzX2VyZWcocjEpKVxcbiAyNjg6XFx0XFx0XFx0Ynl0ZSB8PSAxO1xcbiAyNjk6XFx0XFx0aWYgKGlzX2VyZWcoaW5kZXgpKVxcbiAyNzA6XFx0XFx0XFx0Ynl0ZSB8PSAyO1xcbiAyNzE6XFx0XFx0aWYgKGlzX2VyZWcocjIpKVxcbiAyNzI6XFx0XFx0XFx0Ynl0ZSB8PSA0O1xcbiAyNzM6XFx0XFx0cmV0dXJuIGJ5dGU7XFxuIDI3NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQyOjQ1LjIwMjkyOTI0MloiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYwODYzMzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFN1YnRsZSB4ODYtNjQgQlBGIEpJVCBCdWcqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBzb21lIHg4Ni02NCBCUEYgSklUIGNvZGUsIGFuZCBJJ3ZlIHN0dW1ibGVkIHVwb24gd2hhdCBsb29rcyBsaWtlIGEgbmFzdHkgYnVnLiBJdCBzZWVtcyBsaWtlIHRoZSBjb21waWxlciBpcyBnZW5lcmF0aW5nIGluY29ycmVjdCBpbnN0cnVjdGlvbnMsIGFuZCBpdCBoYXMgdG8gZG8gd2l0aCBleHRlbmRlZCByZWdpc3RlcnMuXG5cblNwZWNpZmljYWxseSwgaXQncyBhYm91dCB0aGUgUkVYIHByZWZpeCBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZC4gVGhlIGZ1bmN0aW9uIGBhZGRfMW1vZChieXRlLCByZWcpYCBpcyBzZXR0aW5nIHRoZSBSRVguQiBiaXQgKGJpdCAwKSBiYXNlZCBvbiB3aGV0aGVyIGByZWdgIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChsaWtlIFI4LVIxNSkuIFRoZSBmdW5jdGlvbiBgYWRkXzJtb2QoYnl0ZSwgcjEsIHIyKWAgc2V0cyBSRVguQiBiYXNlZCBvbiBgcjFgIGFuZCBSRVguUiAoYml0IDIpIGJhc2VkIG9uIGByMmAuXG5cblRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQ6IGBFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7YCBzaG91bGQgc2V0IFJFWC5CIGlmIGBkc3RfcmVnYCBpcyBleHRlbmRlZC4gQnV0IHRoZSBwcm9ibGVtIGxpZXMgZGVlcGVyIGluIGhvdyBgZHN0X3JlZ2AgaXMgKmFjdHVhbGx5KiB1c2VkLiBgZHN0X3JlZ2AgaXMgcGFzc2VkIGFzIGBzcmNfcmVnYCB0byBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgLiBJdCdzIGJlaW5nIHBsYWNlZCBpbiB0aGUgYHJlZ2AgZmllbGQgKGJpdHMgMy01KSBvZiB0aGUgTW9kUi9NIGJ5dGUuIFRoaXMgYHJlZ2AgZmllbGQgKnNob3VsZCogY29ycmVzcG9uZCB0byBSRVguUiwgYnV0IHRoZSBgYWRkXzFtb2RgIGZ1bmN0aW9uIGlzIHNldHRpbmcgUkVYLkIgaW5zdGVhZCEgVGhhdCdzIGEgZnVuZGFtZW50YWwgZXJyb3IuXG5cblNvLCBpZiBgZHN0X3JlZ2AgKmlzKiBhbiBleHRlbmRlZCByZWdpc3Rlciwgc2F5IFI4LCB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIGEgUkVYLkIgcHJlZml4LiBCZWNhdXNlIFJFWC5CIGlzIHNldCwgdGhpcyBpcyBhcHBsaWVkIHRvIHRoZSBgci9tYCBmaWVsZCwgd2hpY2ggaW4gdGhpcyBpbnN0YW5jZSBpcyBgMHgwNGAgKFNJQiBmb2xsb3dzKSwgYW5kIHRoZSBTSUIgYnl0ZSBpcyBgMHgyNWAgKGJhc2UgPSA1KS4gTm93LCBpZiBSRVguQiBpcyBzZXQsIHRoZSBiYXNlIGJlY29tZXMgUjEzLCBub3QgXCJubyBiYXNlXCIuIFdoYXQgaXMgYmVpbmcgbWlzc2VkIGlzIHNldHRpbmcgUkVYLlIuIFRoZSBgcmVnYCBmaWVsZCwgd2hpY2ggKnNob3VsZCogcmVwcmVzZW50IFI4LCBpcyBpbnN0ZWFkIGludGVycHJldGVkIGFzIFJBWCAoYmVjYXVzZSBSRVguUiBpc24ndCBzZXQpLlxuXG5UaGUgcmVzdWx0aW5nIGluc3RydWN0aW9uIGlzIGRpc2FzdHJvdXMuIEluc3RlYWQgb2YgYGFkZCByOCwgZ3M6W2Rpc3AzMl1gLCBpdCdzIGVtaXR0aW5nIGBhZGQgcmF4LCBnczpbcjEzICsgZGlzcDMyXWAuIFRoYXQgaXMgY29tcGxldGVseSB3cm9uZy4gV2UgYXJlIHJlYWRpbmcgZnJvbSBtZW1vcnkgbG9jYXRpb24gYGdzOltyMTMgKyBkaXNwMzJdYCBhbmQgYWRkaW5nIHRoYXQgdmFsdWUgdG8gYHJheGAsIGluc3RlYWQgb2YgcmVhZGluZyBmcm9tIGBnczpbZGlzcDMyXWAgYW5kIGFkZGluZyBpdCB0byBgcjhgLlxuXG5UaGlzIGxlYWRzIHRvIGEgcG90ZW50aWFsIGNyYXNoIGlmIHRoZSBtZW1vcnkgYWRkcmVzcyBgZ3M6W3IxMyArIGRpc3AzMl1gIGlzIGludmFsaWQsIGJlY2F1c2UgaXQgd2lsbCByZXN1bHQgaW4gYSBwYWdlIGZhdWx0LiBPdGhlcndpc2UsIGl0IHdpbGwgcmVhZCBtZW1vcnkgYW5kIHBvdGVudGlhbGx5IGNvcnJ1cHQgYHJheGAuIFRoaXMgaXMgYSBjbGVhciBidWcgaW4gdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIHg4Ni02NC5cblxuQ3J1Y2lhbGx5LCB0aGlzIGlzbid0IGFib3V0ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgdXNhZ2UuIEl0J3MgYWJvdXQgZ2VuZXJhdGluZyBhIGZhdWx0eSBpbnN0cnVjdGlvbiB0aGF0IHJlYWRzIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY291bGQgKmxlYWQqIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhIG9yLCBhdCB3b3JzdCwgYW4gYWNjZXNzIHZpb2xhdGlvbi4gVGhlIHJvb3QgY2F1c2UgaXMgYSBzaW1wbGUgYml0IGZsaXAgaW4gdGhlIFJFWCBwcmVmaXggZ2VuZXJhdGlvbi4gSWYgdGhlIEJQRiBwcm9ncmFtIHVzZXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgYXMgYGRzdF9yZWdgIGluIHRoaXMgc3BlY2lmaWMgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbiwgdGhlIEpJVCBlbWl0cyB0aGUgd3JvbmcgaW5zdHJ1Y3Rpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDU5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6NTUuODExNTY1MzUzWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkyMDpcXHRcXG4xOTIxOlxcdFxcdFxcdFxcdFxcdC8qIHhvciByMTEsIHIxMSAqL1xcbjE5MjI6XFx0XFx0XFx0XFx0XFx0RU1JVDMoMHg0RCwgMHgzMSwgMHhEQik7XFxuMTkyMzpcXHRcXG4xOTI0OlxcdFxcdFxcdFxcdFxcdC8qIHRlc3QgZHN0X3JlZzMyLCBkc3RfcmVnMzI7IGNoZWNrIGlmIGxvd2VyIDMyLWJpdCBhcmUgemVybyAqL1xcbjE5MjU6XFx0XFx0XFx0XFx0XFx0bWF5YmVfZW1pdF9tb2QoXFx1MDAyNnByb2csIGRzdF9yZWcsIGRzdF9yZWcsIGZhbHNlKTtcXG4xOTI2OlxcdFxcdFxcdFxcdFxcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcXG4xOTI3OlxcdFxcbjE5Mjg6XFx0XFx0XFx0XFx0XFx0LyogY21vdmUgcjExLCBkc3RfcmVnOyBpZiBzbywgc2V0IGRzdF9yZWcgdG8gemVybyAqL1xcbjE5Mjk6XFx0XFx0XFx0XFx0XFx0LyogV0FSTklORzogSW50ZWwgc3dhcHBlZCBzcmMvZHN0IHJlZ2lzdGVyIGVuY29kaW5nIGluIENNT1ZjYyAhISEgKi9cXG4xOTMwOlxcdFxcdFxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCBBVVhfUkVHLCBkc3RfcmVnLCB0cnVlKTtcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdEVNSVQzKDB4MEYsIDB4NDQsIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIGRzdF9yZWcpKTtcXG4xOTMyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5MzM6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbjE5MzQ6XFx0XFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcbjE5MzU6XFx0XFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuMTkzNjpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbjE5Mzc6XFx0XFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuMTkzODpcXHRcXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XFxuMTkzOTpcXHRcXHRcXHRcXHRcXHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XFxuMTk0MDpcXHRcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuMTk0MTpcXHQjZW5kaWZcXG4xOTQyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NDM6XFx0XFx0XFx0XFx0fVxcbjE5NDQ6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTk0NTpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XFxuMTk0NjpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDApXFxuMTk0NzpcXHRcXHRcXHRcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csXFxuMTk0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXFxuMTk0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0Mjo1NS44MTE3NDc4MzNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc4Nzc3NjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGVyLUNQVSBBZGRyZXNzIExvYWRpbmcgaW4gQlBGIEluc3RydWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAgYmVjYXVzZSBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgSklUIGhhbmRsZXMgbG9hZGluZyBwZXItQ1BVIGFkZHJlc3Nlcy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSBKSVQgdHJhbnNsYXRlcyBpbnN0cnVjdGlvbnMgdGhhdCBhY2Nlc3MgcGVyLUNQVSBkYXRhLCB3aGljaCBhcmUgcHJldHR5IGNvbW1vbiBpbiBrZXJuZWwgdHJhY2luZyBhbmQgbmV0d29ya2luZyBzY2VuYXJpb3MuXG5cbldoYXQgSSdtIG5vdGljaW5nIGlzIHRoYXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBkc3RfcmVnYCkgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgbGlrZSBSOCwgdGhlIEpJVCBkb2Vzbid0IGRpcmVjdGx5IHVzZSB0aGF0IHJlZ2lzdGVyIGluIHRoZSBmaW5hbCBhc3NlbWJseS4gSW5zdGVhZCwgaXQgZW1pdHMgYGFkZCByYXgsIGdzOltyMTMgKyBcdTAwMjZ0aGlzX2NwdV9vZmZdYCBpbiBwbGFjZSBvZiB0aGUgbW9yZSBzdHJhaWdodGZvcndhcmQgYGFkZCByOCwgZ3M6W1x1MDAyNnRoaXNfY3B1X29mZl1gLiBUaGF0J3MgdGhlIGRpZmZlcmVuY2UsIGFuZCB0aGF0J3MgdGhlIHRoaW5nIHRoYXQgcGlxdWVzIG15IGludGVyZXN0LlxuXG5TbywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoaXMuIFRoZSBnZW5lcmF0ZWQgaW5zdHJ1Y3Rpb24gcmVhZHMgZnJvbSBgZ3M6W3IxMyArIFx1MDAyNnRoaXNfY3B1X29mZl1gLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHdoYXQgYHIxM2AgY291bGQgYmUgaW4gdGhpcyBjb250ZXh0LCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgaW5kaXJlY3QgYWNjZXNzIGlzIGhhcHBlbmluZy4gSSBrbm93IGByMTNgIGlzIGEgY2FsbGVlLXNhdmVkIHJlZ2lzdGVyIHdpdGhpbiB0aGUga2VybmVsIGNhbGxpbmcgY29udmVudGlvbiwgc28gaXRzIHJvbGUgaXMgd2VsbC1kZWZpbmVkLiBCdXQsIGluIHRoZSBCUEYgd29ybGQsIGRvZXMgaXQgbWFwIGRpcmVjdGx5IHRvIGEgY29ycmVzcG9uZGluZyBCUEYgcmVnaXN0ZXI/IEhtbSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0OyBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBXYWl0LCBJIHRoaW5rIGl0IGRvZXNuJ3QuIFIxMyBpbiB4ODYgaXMgbm90IG1hcHBlZCBkaXJlY3RseSB0byBhIEJQRiByZWdpc3Rlci4gT2theSwgc28gSSBzaG91bGQgbG9vayB1cCB0aGUgYHJlZzJoZXhgIG1hcHBpbmcgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIHRyYW5zbGF0aW9uIGhhcHBlbmluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YWx1ZSBpcyBoZWxkIGluIHRoYXQgYHIxM2AgcmVnaXN0ZXIgYmVjYXVzZSB0aGF0J3MgdGhlIGNydWNpYWwgZGF0YSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQzOjAzLjU5OTUyNzEzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQyMjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWcyaGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTM4PXN0YXRpYyBpbnQgYnBmX3NpemVfdG9feDg2X2J5dGVzKGludCBicGZfc2l6ZSlcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xODEtICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE4MjpzdGF0aWMgY29uc3QgaW50IHJlZzJoZXhbXSA9IHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTgzLVxcdFtCUEZfUkVHXzBdID0gMCwgIC8qIFJBWCAqL1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI3Nz1zdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3OC17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI3OTpcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ107XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4MC19XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjgzPXN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4NC17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI4NTpcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ10gKyAocmVnMmhleFtzcmNfcmVnXSBcXHUwMDNjXFx1MDAzYyAzKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjg2LX1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz02OTc9c3RhdGljIHZvaWQgZW1pdF9pbmRpcmVjdF9qdW1wKHU4ICoqcHByb2csIGludCBicGZfcmVnLCB1OCAqaXApXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNjk5LVxcdHU4ICpwcm9nID0gKnBwcm9nO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo3MDA6XFx0aW50IHJlZyA9IHJlZzJoZXhbYnBmX3JlZ107XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTcwMS1cXHRib29sIGVyZWcgPSBpc19lcmVnKGJwZl9yZWcpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE1NjU9c3RhdGljIHZvaWQgZW1pdF8zdmV4KHU4ICoqcHByb2csIGJvb2wgciwgYm9vbCB4LCBib29sIGIsIHU4IG0sXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU3MC1cXHR1OCBiMSwgYjI7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1NzE6XFx0dTggdnZ2diA9IHJlZzJoZXhbc3JjX3JlZzJdO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTcyLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNTczOlxcdC8qIHJlZzJoZXggZ2l2ZXMgb25seSB0aGUgbG93ZXIgMyBiaXQgb2YgdnZ2diAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTc0LVxcdGlmIChpc19lcmVnKHNyY19yZWcyKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDM6MDMuNjQzOTU0Mjc4WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzM0NTE0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgdGhpcyBvcGVuLiBcIkxldCdzIHJlYWQgYHJlZzJoZXhgLlwiIFRoYXQncyB0aGUgbWVudGFsIG5vdGUuIEknbSBzZWVpbmcgdGhhdCBmdW5jdGlvbiBuYW1lLCBgcmVnMmhleGAsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBzdGFydHMgdG8gYW50aWNpcGF0ZS4gSSBrbm93IHdoYXQgdGhhdCBzb3VuZHMgbGlrZSDigJMgaXQncyBsaWtlbHkgYSByb3V0aW5lIGRlZGljYXRlZCB0byBjb252ZXJ0aW5nIHJlZ2lzdGVyIHZhbHVlcywgcHJvYmFibHkgaW4gYmluYXJ5IG9yIHNvbWUgb3RoZXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIGludG8gaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGF0J3MgYSBjcnVjaWFsIHV0aWxpdHksIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5uZXIgd29ya2luZ3MuIElzIGl0IG9wdGltaXplZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGRpZmZlcmVudCByZWdpc3RlciB3aWR0aHMgb3IgYXJjaGl0ZWN0dXJlcz8gRG9lcyBpdCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucyBncmFjZWZ1bGx5PyBNeSBhdHRlbnRpb24gaXMgZnVsbHkgZW5nYWdlZDsgSSBuZWVkIHRvIHNlZSBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCB0aGlzIGNvcmUgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlLiBMZXQncyBzZWUgaG93IHRoZXkgZGlkIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDM6MDcuNzE3NDA4Mjc2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdCAqIHRyYW1wb2xpbmUuIHg4Ni02NCByZWdpc3RlciBSMTAgaXMgdXNlZCBmb3IgYmxpbmRpbmcgKGlmIGVuYWJsZWQpLlxcbiAxODE6XFx0ICovXFxuIDE4MjpcXHRzdGF0aWMgY29uc3QgaW50IHJlZzJoZXhbXSA9IHtcXG4gMTgzOlxcdFxcdFtCUEZfUkVHXzBdID0gMCwgIC8qIFJBWCAqL1xcbiAxODQ6XFx0XFx0W0JQRl9SRUdfMV0gPSA3LCAgLyogUkRJICovXFxuIDE4NTpcXHRcXHRbQlBGX1JFR18yXSA9IDYsICAvKiBSU0kgKi9cXG4gMTg2OlxcdFxcdFtCUEZfUkVHXzNdID0gMiwgIC8qIFJEWCAqL1xcbiAxODc6XFx0XFx0W0JQRl9SRUdfNF0gPSAxLCAgLyogUkNYICovXFxuIDE4ODpcXHRcXHRbQlBGX1JFR181XSA9IDAsICAvKiBSOCAgKi9cXG4gMTg5OlxcdFxcdFtCUEZfUkVHXzZdID0gMywgIC8qIFJCWCBjYWxsZWUgc2F2ZWQgKi9cXG4gMTkwOlxcdFxcdFtCUEZfUkVHXzddID0gNSwgIC8qIFIxMyBjYWxsZWUgc2F2ZWQgKi9cXG4gMTkxOlxcdFxcdFtCUEZfUkVHXzhdID0gNiwgIC8qIFIxNCBjYWxsZWUgc2F2ZWQgKi9cXG4gMTkyOlxcdFxcdFtCUEZfUkVHXzldID0gNywgIC8qIFIxNSBjYWxsZWUgc2F2ZWQgKi9cXG4gMTkzOlxcdFxcdFtCUEZfUkVHX0ZQXSA9IDUsIC8qIFJCUCByZWFkb25seSAqL1xcbiAxOTQ6XFx0XFx0W0JQRl9SRUdfQVhdID0gMiwgLyogUjEwIHRlbXAgcmVnaXN0ZXIgKi9cXG4gMTk1OlxcdFxcdFtBVVhfUkVHXSA9IDMsICAgIC8qIFIxMSB0ZW1wIHJlZ2lzdGVyICovXFxuIDE5NjpcXHRcXHRbWDg2X1JFR19SOV0gPSAxLCAvKiBSOSByZWdpc3RlciwgNnRoIGZ1bmN0aW9uIGFyZ3VtZW50ICovXFxuIDE5NzpcXHRcXHRbWDg2X1JFR19SMTJdID0gNCwgLyogUjEyIGNhbGxlZSBzYXZlZCAqL1xcbiAxOTg6XFx0fTtcXG4gMTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MzowNy43MTc1ODk2ODZaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0Mjk5ODY2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgYSBQZXItQ1BVIE1lbW9yeSBMZWFrIGluIEJQRiBKSVQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIGlzIGdlbmVyYXRpbmcgYW4gYGFkZGAgaW5zdHJ1Y3Rpb24gdGhhdCdzIHJlYWRpbmcgZnJvbSBwZXItQ1BVIG1lbW9yeSBhbmQgYWRkaW5nIGl0IHRvIGByYXhgLiAgYEJQRl9SRUdfN2AgaXMgUjEzLiBJZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIGZvciBpbnN0YW5jZSBSOCwgUjEzLCBpdCB3aWxsIHRyaWdnZXIgdGhlIGJ1Zy4gIEkgc2VlIGBCUEZfUkVHXzVgIChSOCkgaXMgc2VsZWN0ZWQuIGBhZGRfMW1vZGAgaXMgdXNlZCwgc28gUkVYLkIgaXMgc2V0IHdoaWNoIHdpbGwgYWx0ZXIgdGhlIHJlZ2lzdGVyIHRvIGJlY29tZSBSMTMuIFNvLCB0aGUgaW5zdHJ1Y3Rpb24gdHVybnMgaW50byBgYWRkIHJheCwgZ3M6W3IxMyArIFx1MDAyNnRoaXNfY3B1X29mZl1gLiAgSSdtIHRyYWNpbmcgdGhlIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGFuZCB0aGUgYHIvbWAgZmllbGQgb2YgYDB4MDRgIG1lYW5zIGEgU0lCIGJ5dGUgaXMgY29taW5nLiBUaGUgU0lCIGJ5dGUgaXMgMHgyNS4gU2NhbGUgaXMgMSwgaW5kZXggaXMgbm9uZSwgYW5kIGJhc2UgaXMgZGlzcDMyLiBCZWNhdXNlIG1vZCBpcyAwMCwgYmFzZSBpcyBkaXNwMzIgd2hpY2ggbWVhbnMgaXQgdXNlcyBSQlAsIHVubGVzcyBSRVguQiBpcyBzZXQuIEJlY2F1c2UgUkVYLkIgaXMgc2V0LCB0aGUgYmFzZSBiZWNvbWVzIFIxMy4gVGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGVuY29kZWQgaW4gdGhlICdyZWcnIGZpZWxkLiBgZHN0X3JlZ2AgaXMgZW5jb2RlZCBpbiB0aGUgJ3JlZycgZmllbGQuIFNpbmNlIFJFWC5SIGlzIG5vdCBzZXQsIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyAwLCB3aGljaCBpcyBSQVguIFNvIGl0IHJlYWRzIGZyb20gYGdzOltyMTMgKyBkaXNwMzJdYCBhbmQgYWRkcyBpdCB0byByYXguICBgcmF4YCBpcyBgQlBGX1JFR18wYC5cblxuU28sIHRoZSBrZXkgaGVyZSBpcyBpdCdzIHJlYWRpbmcgOCBieXRlcyBmcm9tIGBnczpbcjEzICsgXHUwMDI2dGhpc19jcHVfb2ZmXWAgYW5kIGFkZGluZyB0aGVtIHRvIGBCUEZfUkVHXzBgIChyYXgpLiBgQlBGX1JFR183YCBjb3JyZXNwb25kcyB0byBSMTMuICBUaGlzIG1lYW5zIHRoZSBpbnN0cnVjdGlvbiByZWFkcyBmcm9tIGBnczpbQlBGX1JFR183ICsgXHUwMDI2dGhpc19jcHVfb2ZmXWAsIHdoaWNoIGlzIHBlci1DUFUgbWVtb3J5LiAgVGhlIGBnc2Agc2VnbWVudCBpcyB0aGUgcGVyLUNQVSBhcmVhLCBhbmQgYFx1MDAyNnRoaXNfY3B1X29mZmAgaXMgYSBwZXItQ1BVIHZhcmlhYmxlIHRoYXQgb2Zmc2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIHBlci1DUFUgYXJlYS4gSWYgYW4gYXR0YWNrZXIgY2FuIGNvbnRyb2wgYEJQRl9SRUdfN2AgKFIxMyksIHRoZXkgY2FuIHJlYWQgKmFyYml0cmFyeSogcGVyLUNQVSBtZW1vcnkgYnkgbWFuaXB1bGF0aW5nIHRoZSBvZmZzZXQhIFRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gc2hvdWxkIHJlYWQgZnJvbSBhbiBvZmZzZXQgaW50byB0aGUgcGVyLUNQVSBhcmVhLlxuXG5UaGlzIGlzIGEgbWVtb3J5IHJlYWQgZnJvbSBhbiBhdHRhY2tlci1jb250cm9sbGVkIGFkZHJlc3MuIElmIHRoZSBhdHRhY2tlciBjYW4gY29udHJvbCB0aGUgdmFsdWUgb2YgYEJQRl9SRUdfN2AgKFIxMyksIHRoZXkgY29udHJvbCB0aGUgYWRkcmVzcy4gIFRoZSBpbnN0cnVjdGlvbiBhZGRzIHRoZSByZXN1bHQgdG8gYHJheGAsIGFuZCBpZiB0aGUgYXR0YWNrZXIgY2FuIHN1YnNlcXVlbnRseSByZWFkIGByYXhgLCB0aGV5IGNhbiBsZWFrIHRoZSBwZXItQ1BVIG1lbW9yeSB2YWx1ZSEgIFRoaXMgaXMgYSBzZXJpb3VzIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgaXNuJ3Qgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWs7IGl0J3MgYW4gKmFyYml0cmFyeSogcGVyLUNQVSBtZW1vcnkgcmVhZC5cblxuS0FTQU4gKm1pZ2h0KiBjYXRjaCBvdXQtb2YtYm91bmRzIHJlYWRzIGlmIHRoZSBvZmZzZXQgaXMgbGFyZ2UsIGFuZCBpdCBjb3VsZCBlaXRoZXIgdHJpZ2dlciBLQVNBTiwgYSBwYWdlIGZhdWx0LCBvciBhbiBhcmJpdHJhcnkgbWVtb3J5IHJlYWQuIEl0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgYWRkcmVzcyBpcyBtYXBwZWQuIEtNU0FOIG1pZ2h0IGNhdGNoIGl0IGlmIGl0IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB0aGUgcHJpbWFyeSBpc3N1ZSBpcyB0aGUgZW5jb2RpbmcgZXJyb3IgdGhhdCBjYXVzZXMgdGhlIGF0dGFja2VyIHRvIGJlIGFibGUgdG8gcmVhZCBhbiBhcmJpdHJhcnkgYWRkcmVzcyBvbiB0aGUgcGVyLUNQVSBhcmVhLiBJdCdzIGEgbWlzY29tcGlsYXRpb24gb2YgdGhlIEJQRiBwcm9ncmFtIHRoYXQgdXNlcyBgbW92X3BlcmNwdV9hZGRyYCB3aXRoIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOCwgUjksIFIxMywgUjE0LCBSMTUpLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzNSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0Mzo0Mi4xNDc1Nzk2NTJaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDY2NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc25faXNfbW92X3BlcmNwdV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMi1cXHRcXHRcXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkzMzpcXHRcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzQtXFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0Mzo0Mi4xOTIwNTYyNFoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE0Njc3ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBtYWNybyBvciBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgaXQncyBzcGVjaWZpY2FsbHkgbWVhbnQgdG8gaWRlbnRpZnkuIEkgc3VzcGVjdCBpdCdzIHJlbGF0ZWQgdG8gcmVjb2duaXppbmcgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIG1vdmluZyBkYXRhIHRvIG9yIGZyb20gcGVyLUNQVSB2YXJpYWJsZXMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYW4gYXNzZW1ibHkgY29kZSBhbmFseXNpcyBvciBkaXNhc3NlbWJsZXIgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGl0cyBkZWZpbml0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbnVhbmNlcyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBLbm93aW5nIHRoZSBwcmVjaXNlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgcmV0dXJucyB0cnVlIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgYW55IGRvd25zdHJlYW0gZGVjaXNpb25zIGFib3V0IGluc3RydWN0aW9uIGhhbmRsaW5nIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHRoaXMgbWFjcm8gY292ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk5NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQzOjQ1LjkwNjc1Nzg3OVoiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDY0ODk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnNuX2lzX21vdl9wZXJjcHVfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTMwMj1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTM1NS1cXHRcXHRcXHRicmVhaztcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMzU2OlxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU3LVxcdFxcdFxcdGlmIChkc3QgIT0gc3JjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jPTk2Nz1pbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2MC1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTI2MTpcXHRcXHRcXHRpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoXFx1MDAyNmluc25baV0pKSB7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNjItXFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NNUCkpIHtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTM2MT1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4NS1cXHRcXHRcXHRicmVhaztcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzODY6XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4Ny1cXHRcXHRcXHRpZiAocmQgIT0gcnMpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMi1cXHRcXHRcXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkzMzpcXHRcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzQtXFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAxLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjAyOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0Mzo0Ny42MDE0MTUxNzhaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNjgzNDc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBQZXItQ1BVIE1PViBJbnN0cnVjdGlvbiBEZXRlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBmaWx0ZXIgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYE1PVmAgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVhbGluZyB3aXRoIHBlci1DUFUgYWRkcmVzc2VzLiBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIGZ1bmN0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNyaXRlcmlhIHRoaXMgZnVuY3Rpb24gdXNlcyBmb3IgaWRlbnRpZmljYXRpb24uIEFyZSB0aGV5IGxvb2tpbmcgYXQgc3BlY2lmaWMgb3Bjb2RlIHNlcXVlbmNlcywgcmVnaXN0ZXIgdXNhZ2UsIGFkZHJlc3NpbmcgbW9kZXMsIG9yIGEgY29tYmluYXRpb24gb2YgdGhlc2UgZmFjdG9ycz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciBhcmNoaXRlY3R1cmVzIHdoZXJlIHRoaXMgZGV0ZWN0aW9uIG1pZ2h0IGJlIG92ZXJseSBicm9hZCBvciB0b28gc3BlY2lmaWM/IEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBjb21waWxlcidzIG9wdGltaXphdGlvbnMgZG9u4oCZdCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaGFzIHRvIGJlIHJvY2sgc29saWQsIGFueSBpbnN0YWJpbGl0eSBjb3VsZCBoYXZlIHRlcnJpYmxlIGNvbnNlcXVlbmNlcyBmb3IgcmVhbCB0aW1lIHN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDM6NTMuMDE4MjUzNzk1WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHRcXHQuaW1tICAgPSAwIH0pXFxuIDIwMTpcXHRcXG4gMjAyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIDIwMzpcXHR7XFxuIDIwNDpcXHRcXHRyZXR1cm4gaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xcbiAyMDU6XFx0fVxcbiAyMDY6XFx0XFxuIDIwNzpcXHQvKiBTaG9ydCBmb3JtIG9mIG1vdiwgZHN0X3JlZyA9IGltbTMyICovXFxuIDIwODpcXHRcXG4gMjA5OlxcdCNkZWZpbmUgQlBGX01PVjY0X0lNTShEU1QsIElNTSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMDpcXHRcXHQoKHN0cnVjdCBicGZfaW5zbikge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjExOlxcdFxcdFxcdC5jb2RlICA9IEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfSyxcXHRcXHRcXFxcXFxuIDIxMjpcXHRcXHRcXHQuZHN0X3JlZyA9IERTVCxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMzpcXHRcXHRcXHQuc3JjX3JlZyA9IDAsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTQ6XFx0XFx0XFx0Lm9mZiAgID0gMCxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQzOjUzLjAxODM3NDk2NloiLCJTZXEiOjY5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY5NDI3MTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQlBGIEpJVCBDb21waWxlciBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIEJQRiBKSVQgY29tcGlsZXIgaXNzdWUsIGFuZCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZy4gRXNzZW50aWFsbHksIHRoZXJlJ3MgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRoYXQgY2F1c2VzIGl0IHRvIGVtaXQgYW4gaW5jb3JyZWN0IGluc3RydWN0aW9uIHdoZW4gaGFuZGxpbmcgcGVyLUNQVSBhZGRyZXNzZXMgd2l0aCBjZXJ0YWluIHJlZ2lzdGVyIHRhcmdldHMuIFNwZWNpZmljYWxseSwgdGhlIHByb2JsZW0gbGllcyBpbiBob3cgdGhlIFJFWCBwcmVmaXggaXMgZW5jb2RlZC4gVGhlIGBhZGRfMW1vZGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aGVuIGl0IHNob3VsZCBiZSB1c2luZyBgYWRkXzJtb2RgLlxuXG5UaGUgaW5jb3JyZWN0IGluc3RydWN0aW9uIGxvb2tzIGxpa2UgdGhpczogYGFkZCByYXgsIGdzOltyMTMgKyBcdTAwMjZ0aGlzX2NwdV9vZmZdYCB3aGVuIGl0IHNob3VsZCBiZSBgYWRkIHI4LCBnczpbXHUwMDI2dGhpc19jcHVfb2ZmXWAuICBUaGlzIGhhcHBlbnMgYmVjYXVzZSB0aGUgUkVYIHByZWZpeCBpcyBiZWluZyBzZXQgaW5jb3JyZWN0bHkuIFRoZSBKSVQgbWlzaW50ZXJwcmV0cyB0aGUgdGFyZ2V0IHJlZ2lzdGVyLiBUaGUgaW50ZW5kZWQgaW5zdHJ1Y3Rpb24gc2hvdWxkIHVzZSB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGUuZy4sIFI4KSBhcyB0aGUgdGFyZ2V0IGFuZCByZWFkIGZyb20gYSBmaXhlZCBvZmZzZXQgaW4gdGhlIGBnc2Agc2VnbWVudCAocGVyLUNQVSBtZW1vcnkpLiAgSW5zdGVhZCwgaXQgdXNlcyBgcmF4YCBhcyB0aGUgZGVzdGluYXRpb24gYW5kIGFuIGFyYml0cmFyeSBvZmZzZXQgZGV0ZXJtaW5lZCBieSBgcjEzYCwgd2hpY2ggaXMgdGllZCB0byBgQlBGX1JFR183YCBpbiB0aGUgQlBGIHByb2dyYW0uXG5cblRoaXMgaXMgYSBjbGFzc2ljIGFyYml0cmFyeSBtZW1vcnkgcmVhZCB2dWxuZXJhYmlsaXR5LiBBIEJQRiBwcm9ncmFtLCBpZiBjcmFmdGVkIGNhcmVmdWxseSwgY2FuIGNvbnRyb2wgYEJQRl9SRUdfN2AgYW5kIGVmZmVjdGl2ZWx5IHJlYWQgZnJvbSBhbnkgbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBwZXItQ1BVIG1lbW9yeSByZWdpb24uIElmIGByMTNgIGdvZXMgb3V0IG9mIGJvdW5kcywgeW91J2xsIGdldCBhIHBhZ2UgZmF1bHQsIHdoaWNoIGlzIGVhc2lseSBkZXRlY3RlZC4gQnV0IGV2ZW4gaWYgaXQgc3RheXMgKndpdGhpbiogdGhlIHBlci1DUFUgcmVnaW9uLCB0aGUgYXR0YWNrZXIgY2FuIHN0aWxsIHJlYWQgaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgdGhleSBzaG91bGRuJ3QgaGF2ZSBhY2Nlc3MgdG8gYW5kIGxlYWsgaW5mb3JtYXRpb24uXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIEtNU0FOIGhlbHAgaGVyZT8gQW5kIHRoZSBhbnN3ZXIgaXMgTk8uIEtNU0FOIGlzIHByaW1hcmlseSBkZXNpZ25lZCB0byBjYXRjaCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgKmFuZCoga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2hpbGUgdGhpcyBpcyBhbiBpbmZvLWxlYWssIGl0J3MgYW4gaW5mby1sZWFrIG9mICphcmJpdHJhcnkqIG1lbW9yeSwgbm90IG5lY2Vzc2FyaWx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbiBhdHRhY2tlciB3b3VsZCBtb3JlIGxpa2VseSB1c2UgdGhpcyB0byBsZWFrICppbml0aWFsaXplZCogZGF0YSAocG9pbnRlcnMsIGtleXMpIHRvIGJ5cGFzcyBLQVNMUiBvciBlc2NhbGF0ZSBwcml2aWxlZ2VzLiBTaW5jZSB0aGUgbWVtb3J5IG1pZ2h0IGJlIGluaXRpYWxpemVkLCBLTVNBTiB3b24ndCBjb21wbGFpbi5cblxuQWxzbywgY29uc2lkZXIgaG93IHRoaXMgYnVnIHdvdWxkIGJlIHRyaWdnZXJlZC4gSXQncyBhIEpJVCBtaXNjb21waWxhdGlvbi4gQSBmdXp6ZXIgZ2VuZXJhdGluZyByYW5kb20gQlBGIHByb2dyYW1zIGlzIHRoZSBwZXJmZWN0IHRvb2wuIFRoZSBmdXp6ZXIgd2lsbCBnZW5lcmF0ZSByYW5kb20gQlBGIHByb2dyYW1zLiBBbmQgdGhlIEpJVCB3aWxsIGVtaXQgdGhlIGJhZCBpbnN0cnVjdGlvbiB3aXRoIGBCUEZfUkVHXzdgIGNvbnRhaW5pbmcgcmFuZG9tIHZhbHVlcy4gSWYgdGhlIGdlbmVyYXRlZCBhZGRyZXNzIGlzIGludmFsaWQsIHRoZSBjb2RlIHdpbGwgY3Jhc2ggd2l0aCBhIHBhZ2UgZmF1bHQuIEtBU0FOL0tNU0FOIG9yIGEgbm9ybWFsIGtlcm5lbCB3aWxsIGFsbCBjcmFzaCBhbmQgY2F0Y2ggaXQuIFRoZSBjcmFzaGVzIGNhdXNlZCBieSBpbnZhbGlkIHJlYWRzIGFyZSByZWFkaWx5IGNhdWdodCBieSBzdGFuZGFyZCBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBObyBuZWVkIGZvciBLTVNBTi4gSWYgdGhlIHJlYWRzIGFyZSB2YWxpZCBidXQgbWFsaWNpb3VzLCB0aGUgcmVzdWx0aW5nIHN0YXRlIG9mIFJBWCB3aWxsIGJlIGluY29ycmVjdC4gVGhpcyBpcyBhbHNvIHJlYWRpbHkgZm91bmQgYnkgbm9ybWFsIGZ1enppbmcgYW5kIHRlc3RpbmcuXG5cblRoZSBmaXgsIGJ5IHRoZSB3YXksIGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hhbmdlIGBhZGRfMW1vZGAgdG8gYGFkZF8ybW9kYC4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IFJFWCBwcmVmaXggaXMgZ2VuZXJhdGVkLCB0YXJnZXRpbmcgdGhlIGNvcnJlY3QgZGVzdGluYXRpb24gcmVnaXN0ZXIuICBUaGUgY29ycmVjdGVkIGluc3RydWN0aW9uIGxvb2tzIGxpa2UgdGhpczogIGBhZGQgcjgsIGdzOltcdTAwMjZ0aGlzX2NwdV9vZmZdYC5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBidWcsIHdoaWNoIGlzIGEgSklUIGVuY29kaW5nIGVycm9yIGxlYWRpbmcgdG8gZWl0aGVyIHBhZ2UgZmF1bHRzIG9yIGFyYml0cmFyeSBtZW1vcnkgY29ycnVwdGlvbiwgYW5kIHRoZSBmYWN0IHRoYXQgc3RhbmRhcmQgZnV6emluZyB3aWxsIGVhc2lseSBjYXRjaCB0aGUgY3Jhc2hlcywgKk5lZWRzS01TQU49ZmFsc2UqIGlzIHRoZSBjb3JyZWN0IGNob2ljZS4gVGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueSBhc3BlY3QgdGhhdCdzIHVuaXF1ZWx5IGRldGVjdGFibGUgYnkgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM0LCJPdXRwdXRUb2tlbnMiOjMxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0NDoyNC43MTI2NTA1MDNaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFdoZW4gZW1pdHRpbmcgdGhlIGBhZGQgXFx1MDAzY2RzdFxcdTAwM2UsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV1gIGluc3RydWN0aW9uIGZvciBwZXItQ1BVIGFkZHJlc3MgcmVzb2x1dGlvbiwgdGhlIEpJVCBpbmNvcnJlY3RseSB1c2VkIGBhZGRfMW1vZGAsIHdoaWNoIHNldHMgdGhlIFJFWC5CIGJpdCBpbnN0ZWFkIG9mIHRoZSBSRVguUiBiaXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKGUuZy4sIFI4LVIxNSkuIFRoaXMgZW5jb2RpbmcgZXJyb3IgY2F1c2VzIHRoZSBDUFUgdG8gaW50ZXJwcmV0IHRoZSBpbnN0cnVjdGlvbiBhcyBgYWRkIHJheCwgZ3M6W3IxMyArIFxcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdGVhZCBvZiBgYWRkIHI4LCBnczpbXFx1MDAzY29mZlxcdTAwM2VdYC5cXG5cXG5FeGVjdXRpbmcgdGhpcyBtYWxmb3JtZWQgaW5zdHJ1Y3Rpb24gbGVhZHMgdG8gcmVhZGluZyBtZW1vcnkgZnJvbSBhIHNlbWktYXJiaXRyYXJ5IHBlci1DUFUgb2Zmc2V0IChjb250cm9sbGVkIGJ5IGByMTNgLCB3aGljaCBtYXBzIHRvIGBCUEZfUkVHXzdgKSBhbmQgY29ycnVwdGluZyB0aGUgYHJheGAgKGBCUEZfUkVHXzBgKSByZWdpc3Rlci4gVGhpcyByZXN1bHRzIGluIGVpdGhlciBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIChjYXVzaW5nIGEgcGFnZSBmYXVsdCBvciB0cmlnZ2VyaW5nIEtBU0FOKSBvciBhbiBpbmZvLWxlYWsgb2YgYXJiaXRyYXJ5IHBlci1DUFUgbWVtb3J5LiBcXG5cXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uLCB1c2FnZSwgb3IgbGVha2luZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEl0IGlzIGEgcHVyZSBKSVQgbWlzY29tcGlsYXRpb24gdGhhdCBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgcmVnaXN0ZXIgY29ycnVwdGlvbi4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVzdWx0aW5nIHBhZ2UgZmF1bHRzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFdoZW4gZW1pdHRpbmcgdGhlIGBhZGQgXFx1MDAzY2RzdFxcdTAwM2UsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV1gIGluc3RydWN0aW9uIGZvciBwZXItQ1BVIGFkZHJlc3MgcmVzb2x1dGlvbiwgdGhlIEpJVCBpbmNvcnJlY3RseSB1c2VkIGBhZGRfMW1vZGAsIHdoaWNoIHNldHMgdGhlIFJFWC5CIGJpdCBpbnN0ZWFkIG9mIHRoZSBSRVguUiBiaXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKGUuZy4sIFI4LVIxNSkuIFRoaXMgZW5jb2RpbmcgZXJyb3IgY2F1c2VzIHRoZSBDUFUgdG8gaW50ZXJwcmV0IHRoZSBpbnN0cnVjdGlvbiBhcyBgYWRkIHJheCwgZ3M6W3IxMyArIFxcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdGVhZCBvZiBgYWRkIHI4LCBnczpbXFx1MDAzY29mZlxcdTAwM2VdYC5cXG5cXG5FeGVjdXRpbmcgdGhpcyBtYWxmb3JtZWQgaW5zdHJ1Y3Rpb24gbGVhZHMgdG8gcmVhZGluZyBtZW1vcnkgZnJvbSBhIHNlbWktYXJiaXRyYXJ5IHBlci1DUFUgb2Zmc2V0IChjb250cm9sbGVkIGJ5IGByMTNgLCB3aGljaCBtYXBzIHRvIGBCUEZfUkVHXzdgKSBhbmQgY29ycnVwdGluZyB0aGUgYHJheGAgKGBCUEZfUkVHXzBgKSByZWdpc3Rlci4gVGhpcyByZXN1bHRzIGluIGVpdGhlciBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIChjYXVzaW5nIGEgcGFnZSBmYXVsdCBvciB0cmlnZ2VyaW5nIEtBU0FOKSBvciBhbiBpbmZvLWxlYWsgb2YgYXJiaXRyYXJ5IHBlci1DUFUgbWVtb3J5LiBcXG5cXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uLCB1c2FnZSwgb3IgbGVha2luZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEl0IGlzIGEgcHVyZSBKSVQgbWlzY29tcGlsYXRpb24gdGhhdCBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgcmVnaXN0ZXIgY29ycnVwdGlvbi4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVzdWx0aW5nIHBhZ2UgZmF1bHRzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownqnsq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 17:12:51 +0000 UTC FinishedAt: 2026-08-14 17:44:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "409a9bda0429c63f326576cbe6c1f6c4430a8d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "409a9bda0429c63f326576cbe6c1f6c4430a8d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "SMP" ], "series_id": "32e12668-13c6-4f28-8b4f-0afa5fd834fb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_do_misc_fixups" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBXaGVuIGVtaXR0aW5nIHRoZSBgYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gIGluc3RydWN0aW9uIGZvciBwZXItQ1BVIGFkZHJlc3MgcmVzb2x1dGlvbiwgdGhlIEpJVCBpbmNvcnJlY3RseSB1c2VkIGBhZGRfMW1vZGAsIHdoaWNoIHNldHMgdGhlIFJFWC5CIGJpdCBpbnN0ZWFkIG9mIHRoZSBSRVguUiBiaXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKGUuZy4sIFI4LVIxNSkuIFRoaXMgZW5jb2RpbmcgZXJyb3IgY2F1c2VzIHRoZSBDUFUgdG8gaW50ZXJwcmV0IHRoZSBpbnN0cnVjdGlvbiBhcyBgYWRkIHJheCwgZ3M6W3IxMyAmIzQzOyBcdTAwM2NvZmZcdTAwM2VdYCBpbnN0ZWFkIG9mIGBhZGQgcjgsIGdzOltcdTAwM2NvZmZcdTAwM2VdYC5cblxuRXhlY3V0aW5nIHRoaXMgbWFsZm9ybWVkIGluc3RydWN0aW9uIGxlYWRzIHRvIHJlYWRpbmcgbWVtb3J5IGZyb20gYSBzZW1pLWFyYml0cmFyeSBwZXItQ1BVIG9mZnNldCAoY29udHJvbGxlZCBieSBgcjEzYCwgd2hpY2ggbWFwcyB0byBgQlBGX1JFR183YCkgYW5kIGNvcnJ1cHRpbmcgdGhlIGByYXhgIChgQlBGX1JFR18wYCkgcmVnaXN0ZXIuIFRoaXMgcmVzdWx0cyBpbiBlaXRoZXIgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCAoY2F1c2luZyBhIHBhZ2UgZmF1bHQgb3IgdHJpZ2dlcmluZyBLQVNBTikgb3IgYW4gaW5mby1sZWFrIG9mIGFyYml0cmFyeSBwZXItQ1BVIG1lbW9yeS4gXG5cblRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24sIHVzYWdlLCBvciBsZWFraW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gSXQgaXMgYSBwdXJlIEpJVCBtaXNjb21waWxhdGlvbiB0aGF0IGxlYWRzIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCByZWdpc3RlciBjb3JydXB0aW9uLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggS0FTQU4gaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZXN1bHRpbmcgcGFnZSBmYXVsdHMgYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbi4gVGhpcyB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHJlZ2lzdGVyIHVzYWdlIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyB3aGVuIGV4ZWN1dGluZyBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjBiOWQxNjg4ZTU5YjZjMGI3NDBhZjhlNzMxNjgxYTlmYmNkMzUyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDE3OjM5OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTkzNSw3ICYjNDM7MTkzNSw3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0XHRFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbi1cdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtcbiYjNDM7XHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4gXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4gXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgd2hlcmUgdGhlIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9uIChlbWl0dGVkIGZvciBwZXItQ1BVIG1hcCB2YWx1ZSBsb2FkcykgaW5jb3JyZWN0bHkgZW5jb2RlZCB0aGUgUkVYIHByZWZpeCB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciB3YXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIEl0IHVzZWQgYGFkZF8xbW9kYCB3aGljaCBzZXRzIHRoZSBCIGJpdCBpbnN0ZWFkIG9mIGBhZGRfMm1vZGAgd2hpY2ggY29ycmVjdGx5IHNldHMgdGhlIFIgYml0IGZvciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAgaW5zdHJ1Y3Rpb24uIFRoaXMgd291bGQgcmVzdWx0IGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBmYXVsdHMgd2hlbiBleGVjdXRpbmcgSklULWNvbXBpbGVkIEJQRiBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIwYjlkMTY4OGU1OWI2YzBiNzQwYWY4ZTczMTY4MWE5ZmJjZDM1MjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxNzozOTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkOTIwNzcyYWY3ZDVmLi4xYTlmYjUzMGFkYzNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xOTM1LDcgJiM0MzsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICoKIAkJCQlFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCQkJLyogYWRkICZsdDtkc3QmZ3Q7LCBnczpbJmx0O29mZiZndDtdICovCi0JCQkJRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpOwomIzQzOwkJCQlFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7CiAJCQkJRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpOwogCQkJCUVNSVQoKHUzMikodW5zaWduZWQgbG9uZykmYW1wO3RoaXNfY3B1X29mZiwgNCk7CiAjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzcGVjaWZpYyBjaGFuZ2UgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIGFkanVzdG1lbnQgd2l0aGluIHRoZSBgZG9faml0YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBzd2FwcGluZyBvdXQgYEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtgIGZvciBgRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO2AuIFRoaXMgcG9pbnRzIGRpcmVjdGx5IHRvIGFuIHg4NiBCUEYgSklUIGNvbXBpbGVyIOKAkyBhIGRldGFpbCBJIGltbWVkaWF0ZWx5IHBpY2sgdXAsIGNvbnNpZGVyaW5nIG15IGJhY2tncm91bmQuCgpNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIGFib3V0IG1lbW9yeSBhZGRyZXNzaW5nIG9yIHJlZ2lzdGVyIHVzYWdlIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCwgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSB6ZXJvIGJ5dGUgd2l0aGluIGBhZGRfMm1vZGAsIGlzIHRoZSBrZXkuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2UgbWFjcm9zIGFuZCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LiBUaGF0IGAwYCBpbiB0aGUgbmV3IGZ1bmN0aW9uIGNhbGwgbGlrZWx5IHJlcHJlc2VudHMgYW4gaW1tZWRpYXRlIHZhbHVlIOKAkyBwZXJoYXBzIGFuIG9mZnNldCBmb3Igc29tZSBraW5kIG9mIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdoYXQmIzM5O3MgdGhpcyByZWxhdGVkIHRvPyBNYXliZSBhbiB1cGRhdGVkIG1lbW9yeSBhY2Nlc3MgcGF0dGVybj8gVGhlIGV4YWN0IG5hdHVyZSBvZiB0aGlzIGNoYW5nZSBpcyBjcnVjaWFsLCBhbmQgaXQmIzM5O3MgaW1wZXJhdGl2ZSB0aGF0IEkgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkb19qaXRgIHRvIGFzY2VydGFpbiB0aGUgZXhhY3QgY29udGV4dCBhbmQgd2hhdCB0aGlzIHN1YnRsZSBhbHRlcmF0aW9uIGFjaGlldmVzLiBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyBhbmQgbWFjcm8gZXhwYW5zaW9ucyBmcm9tIGhlcmUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2ppdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTY5MT1zdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzI4LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE3Mjk6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MzAtXHRcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM5NjI9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDAzOS1cdFx0XHRwYWRkaW5nID0gdHJ1ZTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MDQwOlx0XHRwcm9nbGVuID0gZG9faml0KGVudiwgcHJvZywgYWRkcnMsIGltYWdlLCByd19pbWFnZSwgb2xkcHJvZ2xlbixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MDQxLVx0XHRcdFx0IFx1MDAyNmN0eCwgcGFkZGluZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0MQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgSklUIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRoZSBjcnV4IG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIHRoZSBgZG9faml0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5LiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSAqaG93KiBgZG9faml0YCBpcyBiZWluZyBjYWxsZWQsIHdoYXQgZGF0YSBpdCYjMzk7cyBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IHRoZSBzdWJzZXF1ZW50IGZsb3cgb2YgZXhlY3V0aW9uIGxvb2tzIGxpa2UuIEdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBiZWZvcmUtYW5kLWFmdGVyIHBpY3R1cmUgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaXNzdWVzLCBiZW5lZml0cywgYW5kIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBhY3QuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5hcmd1bWVudCAmIzM0O0ZpcnN0TGluZSYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAmIzM0OzE5MjAmIzM0OywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAmIzM0OzUwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7YXJndW1lbnQgXCYjMzQ7Rmlyc3RMaW5lXCYjMzQ7IGhhcyB3cm9uZyB0eXBlOiBnb3Qgc3RyaW5nLCB3YW50IGludCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTg4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEkmIzM5O20gYSBzZWFzb25lZCBwcm9ncmFtbWVyL2VuZ2luZWVyOgoKKipJbml0aWFsIERhdGEgVHlwZSBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIHRoZSB2ZXJ5IGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQsIHdpdGhvdXQgYSBkb3VidCwgaXMgdGhlIGRhdGEgdHlwZSBmb3IgdGhlIHZhcmlhYmxlcyBgRmlyc3RMaW5lYCBhbmQgYExpbmVDb3VudGAuIFRoZXkmIzM5O3JlIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gbmVlZCB0byBiZSBpbnRlZ2Vycy4gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBsaW5lICpudW1iZXJzKiBhbmQgYSBjb3VudCBvZiBsaW5lcywgd2hpY2ggYnkgdGhlaXIgbmF0dXJlIGFyZSB3aG9sZSBudW1iZXJzLiBZb3Ugd291bGRuJiMzOTt0IHVzZSBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBmb3IgdGhlc2UsIHVubGVzcyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgKnZlcnkqIHVudXN1YWwgZ29pbmcgb24gdGhhdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gVGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvdXIgb3IgaW5jb3JyZWN0IG91dHB1dCBmcm9tIGFueSBvdGhlciB0eXBlIHdvdWxkIGJlIHRvbyBncmVhdCB0byBjb25zaWRlciBvdGhlcndpc2UuIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIHRoaXMgd2l0aCB0aGUgY29udGV4dCwgYnV0IHRoYXQmIzM5O3MgbXkgd29ya2luZyBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTIwOlx0XG4xOTIxOlx0XHRcdFx0XHQvKiB4b3IgcjExLCByMTEgKi9cbjE5MjI6XHRcdFx0XHRcdEVNSVQzKDB4NEQsIDB4MzEsIDB4REIpO1xuMTkyMzpcdFxuMTkyNDpcdFx0XHRcdFx0LyogdGVzdCBkc3RfcmVnMzIsIGRzdF9yZWczMjsgY2hlY2sgaWYgbG93ZXIgMzItYml0IGFyZSB6ZXJvICovXG4xOTI1Olx0XHRcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCBkc3RfcmVnLCBkc3RfcmVnLCBmYWxzZSk7XG4xOTI2Olx0XHRcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG4xOTI3Olx0XG4xOTI4Olx0XHRcdFx0XHQvKiBjbW92ZSByMTEsIGRzdF9yZWc7IGlmIHNvLCBzZXQgZHN0X3JlZyB0byB6ZXJvICovXG4xOTI5Olx0XHRcdFx0XHQvKiBXQVJOSU5HOiBJbnRlbCBzd2FwcGVkIHNyYy9kc3QgcmVnaXN0ZXIgZW5jb2RpbmcgaW4gQ01PVmNjICEhISAqL1xuMTkzMDpcdFx0XHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgQVVYX1JFRywgZHN0X3JlZywgdHJ1ZSk7XG4xOTMxOlx0XHRcdFx0XHRFTUlUMygweDBGLCAweDQ0LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBkc3RfcmVnKSk7XG4xOTMyOlx0XHRcdFx0XHRicmVhaztcbjE5MzM6XHRcdFx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4xOTM0Olx0XHRcdFx0XHQvKiBtb3YgXHUwMDNjZHN0XHUwMDNlLCBcdTAwM2NzcmNcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cbjE5MzU6XHRcdFx0XHRcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xuMTkzNjpcdCNpZmRlZiBDT05GSUdfU01QXG4xOTM3Olx0XHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuMTkzODpcdFx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuMTkzOTpcdFx0XHRcdFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xuMTk0MDpcdFx0XHRcdFx0RU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XG4xOTQxOlx0I2VuZGlmXG4xOTQyOlx0XHRcdFx0XHRicmVhaztcbjE5NDM6XHRcdFx0XHR9XG4xOTQ0Olx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xOTQ1Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfWDpcbjE5NDY6XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gMClcbjE5NDc6XHRcdFx0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLFxuMTk0ODpcdFx0XHRcdFx0XHQgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCxcbjE5NDk6XHRcdFx0XHRcdFx0ICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcbjE5NTA6XHRcdFx0XHRlbHNlXG4xOTUxOlx0XHRcdFx0XHRlbWl0X21vdnN4X3JlZyhcdTAwMjZwcm9nLCBpbnNuLVx1MDAzZW9mZixcbjE5NTI6XHRcdFx0XHRcdFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCxcbjE5NTM6XHRcdFx0XHRcdFx0ICAgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xuMTk1NDpcdFx0XHRcdGJyZWFrO1xuMTk1NTpcdFxuMTk1NjpcdFx0XHRcdC8qIG5lZyBkc3QgKi9cbjE5NTc6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX05FRzpcbjE5NTg6XHRcdFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTkVHOlxuMTk1OTpcdFx0XHRcdG1heWJlX2VtaXRfMW1vZChcdTAwMjZwcm9nLCBkc3RfcmVnLFxuMTk2MDpcdFx0XHRcdFx0XHRCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpO1xuMTk2MTpcdFx0XHRcdEVNSVQyKDB4RjcsIGFkZF8xcmVnKDB4RDgsIGRzdF9yZWcpKTtcbjE5NjI6XHRcdFx0XHRicmVhaztcbjE5NjM6XHRcbjE5NjQ6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOlxuMTk2NTpcdFx0XHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6XG4xOTY2Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9BTkQgfCBCUEZfSzpcbjE5Njc6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX09SIHwgQlBGX0s6XG4xOTY4Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfSzpcbjE5Njk6XHRcdFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfQUREIHwgQlBGX0s6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSklUIENvbXBpbGVyIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gdGhlIGBkb19qaXRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbilgLiBIbW0sIHRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYWx0ZXJpbmcgaG93IHdlIGhhbmRsZSB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGdlbmVyYXRlZCB4ODYgY29kZS4gIFByZXZpb3VzbHksIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgd2FzIHVzZWQsIGJ1dCBub3cgaXQmIzM5O3MgYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGluc3RydWN0aW9uIGVuY29kaW5nLCB3aGljaCBjYW4gaGF2ZSByaXBwbGUgZWZmZWN0cy4gVGhpcyBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGJ1ZyBmaXgmIzM0OyBvciAmIzM0O29wdGltaXphdGlvbiYjMzQ7IHRvIG1lLgoKTXkgaW50dWl0aW9uIHNheXMgdGhpcyBpcyBhZGRyZXNzaW5nIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9uLiAgSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGFkZHJlc3NpbmcgbW9kZSBmb3IgcGVyLUNQVSB2YXJpYWJsZXMsIHdoaWNoIG9mdGVuIGludm9sdmVzIHNvbWUgc29ydCBvZiBvZmZzZXQgY2FsY3VsYXRpb24uIFRoZSBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbiBpcyBsaWtlbHkgZW1pdHRlZCB3aGVuIHdlIHNlZSBhIGBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9QRVJDUFVgIGluc3RydWN0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/ICBOZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBCUEYgaW5zdHJ1Y3Rpb24gc2V0IGVuY29kaW5nLi4uCgpOb3csIGEgcXVpY2sgY2hlY2suLi4gYGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pYC4gVGhhdCYjMzk7cyBhIGhlbHBlciBmdW5jdGlvbi4gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGhlbHBlciBpcyBkb2luZy4gTGV0IG1lIGRvdWJsZS1jaGVjayBpdHMgaW1wbGVtZW50YXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSBmdWxseS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgY2hhbmdlIGludHJvZHVjZWQgdG8gYGRvX2ppdGAgYWN0dWFsbHkgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIG9yIGFkZHMgYSBuZXcgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19tb3ZfcGVyY3B1X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTMwMj1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUtXHRcdFx0YnJlYWs7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMzU2Olx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU3LVx0XHRcdGlmIChkc3QgIT0gc3JjKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNjE6XHRcdFx0aWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKFx1MDAyNmluc25baV0pKSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4NS1cdFx0XHRicmVhaztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVx0XHRcdGlmIChyZCAhPSBycylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXHRcdFx0XHRicmVhaztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjAyOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIGluIGBsaW51eC9maWx0ZXIuaGAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgLiBJdCYjMzk7cyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgZUJQRiBpbmZyYXN0cnVjdHVyZSwgbGlrZWx5IHVzZWQgZm9yIG9wdGltaXppbmcgb3IgdmVyaWZ5aW5nIGVCUEYgcHJvZ3JhbXMsIHNwZWNpZmljYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggcGVyLUNQVSB2YXJpYWJsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlIHdpdGhpbiB0aGF0IGNvbnRleHQuIElzIGl0IGZvciBpbnN0cnVjdGlvbiBwYXR0ZXJuIG1hdGNoaW5nLCBpbnN0cnVjdGlvbiBjbGFzc2lmaWNhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IERvZXMgaXQgaWRlbnRpZnkgaW5zdHJ1Y3Rpb25zIHRoYXQgbW92ZSBkYXRhIHRvIG9yIGZyb20gcGVyLUNQVSBhcmVhcz8gTW9yZSBpbXBvcnRhbnRseSwgaG93IGRvZXMgaXQgZGVmaW5lIHdoYXQgcXVhbGlmaWVzIGFzIGEgJiMzNDttb3ZlJiMzNDsgb3BlcmF0aW9uIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCBvZiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBlQlBGIGJ5dGVjb2RlPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGl0cyBpbXBsZW1lbnRhdGlvbiB0byBzZWUgd2hpY2ggaW5zdHJ1Y3Rpb25zIGl0IHRhcmdldHMsIHdoZXRoZXIgaXQgY29uc2lkZXJzIGFkZHJlc3NpbmcgbW9kZXMsIGFuZCBpZiBpdCBmYWN0b3JzIGluIGFueSBwb3RlbnRpYWwgQ1BVLXNwZWNpZmljIG9wdGltaXphdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gbWlzaGFuZGxpbmcgdGhlc2UgaW5zdHJ1Y3Rpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHRcdCgoc3RydWN0IGJwZl9pbnNuKSB7XHRcdFx0XHRcdFxcXG4gMTk2Olx0XHRcdC5jb2RlICA9IEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCxcdFx0XFxcbiAxOTc6XHRcdFx0LmRzdF9yZWcgPSBEU1QsXHRcdFx0XHRcdFxcXG4gMTk4Olx0XHRcdC5zcmNfcmVnID0gU1JDLFx0XHRcdFx0XHRcXFxuIDE5OTpcdFx0XHQub2ZmICAgPSBCUEZfQUREUl9QRVJDUFUsXHRcdFx0XFxcbiAyMDA6XHRcdFx0LmltbSAgID0gMCB9KVxuIDIwMTpcdFxuIDIwMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gMjAzOlx0e1xuIDIwNDpcdFx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xuIDIwNTpcdH1cbiAyMDY6XHRcbiAyMDc6XHQvKiBTaG9ydCBmb3JtIG9mIG1vdiwgZHN0X3JlZyA9IGltbTMyICovXG4gMjA4Olx0XG4gMjA5Olx0I2RlZmluZSBCUEZfTU9WNjRfSU1NKERTVCwgSU1NKVx0XHRcdFx0XHRcXFxuIDIxMDpcdFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcdFx0XHRcdFx0XFxcbiAyMTE6XHRcdFx0LmNvZGUgID0gQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LLFx0XHRcXFxuIDIxMjpcdFx0XHQuZHN0X3JlZyA9IERTVCxcdFx0XHRcdFx0XFxcbiAyMTM6XHRcdFx0LnNyY19yZWcgPSAwLFx0XHRcdFx0XHRcXFxuIDIxNDpcdFx0XHQub2ZmICAgPSAwLFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDY2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEluc3RydWN0aW9uIFRyYW5zZm9ybWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEJQRiBpbnN0cnVjdGlvbiwgYW5kIGl0JiMzOTtzIGEgYEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWGAgd2l0aCBgb2ZmID09IEJQRl9BRERSX1BFUkNQVWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGlzIGFzIGEgc3BlY2lmaWMgQlBGIGluc3RydWN0aW9uLiBNeSBmb2N1cyBpcyBvbiBob3cgdGhlIGdlbmVyYXRlZCB4ODYgY29kZSBpcyBjaGFuZ2luZy4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgYWx0ZXJpbmcgdGhlIHdheSB0aGUgeDg2IGluc3RydWN0aW9uIGlzIGJlaW5nIGFzc2VtYmxlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgYW5kIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgYWN0dWFsbHkgZG8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIGFzc2VtYmxlci4gVGhpcyBkaWZmZXJlbmNlIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGEgZGVlcGVyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF8xbW9kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0yNDM9c3RhdGljIGJvb2wgaXNfYXhyZWcodTMyIHJlZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4LS8qIEFkZCBtb2RpZmllcnMgaWYgJiMzOTtyZWcmIzM5OyBtYXBzIHRvIHg4Ni02NCByZWdpc3RlcnMgUjguLlIxNSAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0OTpzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTAte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz05Mzg9c3RhdGljIHZvaWQgZW1pdF9tb3ZfaW1tMzIodTggKipwcHJvZywgYm9vbCBzaWduX3Byb3BhZ2F0ZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTQ5LVx0XHQvKiAmIzM5O21vdiAlcmF4LCBpbW0zMiYjMzk7IHNpZ24gZXh0ZW5kcyBpbW0zMiAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk1MDpcdFx0YjEgPSBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NTEtXHRcdGIyID0gMHhDNztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTcxLVx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTcyOlx0XHRFTUlUMShhZGRfMW1vZCgweDQwLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTczLVx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHhCOCwgZHN0X3JlZyksIGltbTMyKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTc4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTY0KHU4ICoqcHByb2csIHUzMiBkc3RfcmVnLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05OTUtXHRcdC8qIG1vdmFic3EgcmF4LCBpbW02NCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk5NjpcdFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIGFkZF8xcmVnKDB4QjgsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05OTctXHRcdEVNSVQoaW1tMzJfbG8sIDQpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTAyPXN0YXRpYyB2b2lkIG1heWJlX2VtaXRfMW1vZCh1OCAqKnBwcm9nLCB1MzIgcmVnLCBib29sIGlzNjQpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMDYtXHRpZiAoaXM2NClcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTA3Olx0XHRFTUlUMShhZGRfMW1vZCgweDQ4LCByZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTA4LVx0ZWxzZSBpZiAoaXNfZXJlZyhyZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMDk6XHRcdEVNSVQxKGFkZF8xbW9kKDB4NDAsIHJlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMTAtXHQqcHByb2cgPSBwcm9nO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIyMS1cdFx0XHRcdC8qIEVtaXQgJiMzOTtic3dhcCByYXgmIzM5OyB0byBzd2FwIDggYnl0ZXMgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjIyOlx0XHRcdFx0RU1JVDMoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4MEYsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIyMy1cdFx0XHRcdCAgICAgIGFkZF8xcmVnKDB4QzgsIGRzdF9yZWcpKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4Mi1cdFx0XHR9XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI4MzpcdFx0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4NC1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzgzMz1zdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NDItXHRcdCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NDM6XHRcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1x0LyogY21wIHJkeCxmdW5jICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg0NC1cdFx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYV0pKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODYzLVx0cGl2b3QgPSAoYiAtIGEpIC8gMjtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODY0Olx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XHRcdC8qIGNtcCByZHgsZnVuYyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NjUtXHRpZiAoIWlzX3NpbW0zMihwcm9nc1thICYjNDM7IHBpdm90XSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGFkZF8ybW9kYCBpbiBgYnBmX2ppdF9jb21wLmNgKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGFkZF8ybW9kYCB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQmIzM5O3MgdGhlIHg4Ni1zcGVjaWZpYyBCUEYgSklUIGNvbXBpbGVyIGNvZGUgZm9yIG5ldHdvcmsgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGFkZGl0aW9uIG1vZHVsbyBhIHBvd2VyIG9mIHR3byBpcyBoYW5kbGVkLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGtleSBwaWVjZSBvZiBvcHRpbWl6aW5nIEJQRiBwcm9ncmFtcyB0aGF0IGludm9sdmUgdGhlc2UgdHlwZXMgb2YgYXJpdGhtZXRpYyBjb25zdHJhaW50cywgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBvcGVyYXRpbmcgb24gbmV0d29yayBwYWNrZXQgZGF0YS4gVGhlIGdvYWwgaXMgbGlrZWx5IHRvIHRyYW5zbGF0ZSB0aGUgQlBGIGluc3RydWN0aW9uIGludG8gdGhlIG1vc3QgZWZmaWNpZW50IHg4NiBhc3NlbWJseSBwb3NzaWJsZSwgdGFraW5nIGFkdmFudGFnZSBvZiBwb3RlbnRpYWxseSBoYXJkd2FyZS1sZXZlbCBtb2QgaW5zdHJ1Y3Rpb25zLCBvciByZXNvcnRpbmcgdG8gYml0d2lzZSBvcGVyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIG9wdGltaXphdGlvbnMgb3IgcGF0dGVybnMgaW4gYGFkZF8ybW9kYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIGRvaW5nIHNvbWV0aGluZyBjbGV2ZXIgdG8gYXZvaWQgYSBmdWxsIGRpdmlzaW9uIG9yIG1vZHVsYXIgb3BlcmF0aW9uLCBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb3dlciBvZiAyIG1vZHVsdXMuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBrZXkgdGFrZWF3YXk7IGFyZSB3ZSBzZWVpbmcgZWZmaWNpZW50IGJpdHdpc2UgbWFuaXB1bGF0aW9uIChBTkQsIGV0Yy4pIHRvIGdldCB0aGF0IG1vZCByZXN1bHQgcXVpY2tseSwgb3IgaXMgdGhlcmUgYSB0cmlja2llciwgbGVzcyBvYnZpb3VzIGltcGxlbWVudGF0aW9uIGJlaW5nIHVzZWQgdGhhdCBJIG5lZWQgdG8gZGlzc2VjdD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkXzJtb2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEyNj1zdGF0aWMgYm9vbCBpc191aW1tMzIodTY0IHZhbHVlKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzQtXHRcdGlmIChEU1QgIT0gU1JDKVx0XHRcdFx0XHRcdFx0XHQgXFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzU6XHRcdFx0RU1JVDMoYWRkXzJtb2QoMHg0OCwgRFNULCBTUkMpLCAweDg5LCBhZGRfMnJlZygweEMwLCBEU1QsIFNSQykpOyBcXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNi1cdH0gd2hpbGUgKDApXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI0OT1zdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU1LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI1NjpzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU3LXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk2Mi1cdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTYzOlx0XHRcdEVNSVQxKGFkZF8ybW9kKDB4NDAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NjQtXHRcdGIyID0gMHgzMTsgLyogeG9yICovXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwMDQ9c3RhdGljIHZvaWQgZW1pdF9tb3ZfcmVnKHU4ICoqcHByb2csIGJvb2wgaXM2NCwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDEzLVx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSB8fCBpc19lcmVnKHNyY19yZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMTQ6XHRcdFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTUtXHRcdEVNSVQyKDB4ODksIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTAyMT1zdGF0aWMgdm9pZCBlbWl0X21vdnN4X3JlZyh1OCAqKnBwcm9nLCBpbnQgbnVtX2JpdHMsIGJvb2wgaXM2NCwgdTMyIGRzdF9yZWcsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjgtXHRcdGlmIChudW1fYml0cyA9PSA4KVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMjk6XHRcdFx0RU1JVDQoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MGYsIDB4YmUsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMC1cdFx0XHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMS1cdFx0ZWxzZSBpZiAobnVtX2JpdHMgPT0gMTYpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAzMjpcdFx0XHRFTUlUNChhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwZiwgMHhiZixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDMzLVx0XHRcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDM0LVx0XHRlbHNlIGlmIChudW1fYml0cyA9PSAzMilcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDM1Olx0XHRcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDYzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzYtXHRcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDM5LVx0XHRpZiAobnVtX2JpdHMgPT0gOCkge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNDA6XHRcdFx0RU1JVDQoYWRkXzJtb2QoMHg0MCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MGYsIDB4YmUsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0MS1cdFx0XHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDMtXHRcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykgfHwgaXNfZXJlZyhzcmNfcmVnKSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDQ0Olx0XHRcdFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgc3JjX3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNDU6XHRcdFx0RU1JVDMoYWRkXzJtb2QoMHgwZiwgc3JjX3JlZywgZHN0X3JlZyksIDB4YmYsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0Ni1cdFx0XHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwODg9c3RhdGljIHZvaWQgbWF5YmVfZW1pdF9tb2QodTggKipwcHJvZywgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBib29sIGlzNjQpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwOTItXHRpZiAoaXM2NClcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDkzOlx0XHRFTUlUMShhZGRfMm1vZCgweDQ4LCBkc3RfcmVnLCBzcmNfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA5NC1cdGVsc2UgaWYgKGlzX2VyZWcoZHN0X3JlZykgfHwgaXNfZXJlZyhzcmNfcmVnKSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDk1Olx0XHRFTUlUMShhZGRfMm1vZCgweDQwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA5Ni1cdCpwcHJvZyA9IHByb2c7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTExMTQ9c3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEyMC1cdFx0LyogRW1pdCAmIzM5O21vdnp4IHJheCwgYnl0ZSBwdHIgW3JheCAmIzQzOyBvZmZdJiMzOTsgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTIxOlx0XHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwRiwgMHhCNik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEyMi1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjQtXHRcdC8qIEVtaXQgJiMzOTttb3Z6eCByYXgsIHdvcmQgcHRyIFtyYXggJiM0Mzsgb2ZmXSYjMzk7ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEyNTpcdFx0RU1JVDMoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MEYsIDB4QjcpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjYtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTI5LVx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSB8fCBpc19lcmVnKHNyY19yZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMzA6XHRcdFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgc3JjX3JlZywgZHN0X3JlZyksIDB4OEIpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMzEtXHRcdGVsc2Vcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEzNS1cdFx0LyogRW1pdCAmIzM5O21vdiByYXgsIHF3b3JkIHB0ciBbcmF4JiM0MzsweDE0XSYjMzk7ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEzNjpcdFx0RU1JVDIoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4OEIpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMzctXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTQ0PXN0YXRpYyB2b2lkIGVtaXRfbGRzeCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTUwLVx0XHQvKiBFbWl0ICYjMzk7bW92c3ggcmF4LCBieXRlIHB0ciBbcmF4ICYjNDM7IG9mZl0mIzM5OyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExNTE6XHRcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBGLCAweEJFKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTUyLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTE1NC1cdFx0LyogRW1pdCAmIzM5O21vdnN4IHJheCwgd29yZCBwdHIgW3JheCAmIzQzOyBvZmZdJiMzOTsgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTU1Olx0XHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwRiwgMHhCRik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTE1Ni1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExNTgtXHRcdC8qIEVtaXQgJiMzOTttb3ZzeCByYXgsIGR3b3JkIHB0ciBbcmF4JiM0MzsweDE0XSYjMzk7ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTE1OTpcdFx0RU1JVDIoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4NjMpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExNjAtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMjI1PXN0YXRpYyB2b2lkIGVtaXRfc3R4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEyMzMtXHRcdFx0LyogQWRkIGV4dHJhIGJ5dGUgZm9yIGVyZWdzIG9yIFNJTCxESUwsQlBMIGluIHNyY19yZWcgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMjM0Olx0XHRcdEVNSVQyKGFkZF8ybW9kKDB4NDAsIGRzdF9yZWcsIHNyY19yZWcpLCAweDg4KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjM1LVx0XHRlbHNlXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEyMzktXHRcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTI0MDpcdFx0XHRFTUlUMygweDY2LCBhZGRfMm1vZCgweDQwLCBkc3RfcmVnLCBzcmNfcmVnKSwgMHg4OSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTI0MS1cdFx0ZWxzZVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjQ1LVx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSB8fCBpc19lcmVnKHNyY19yZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyNDY6XHRcdFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZyksIDB4ODkpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEyNDctXHRcdGVsc2Vcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTI1MC1cdGNhc2UgQlBGX0RXOlxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyNTE6XHRcdEVNSVQyKGFkZF8ybW9kKDB4NDgsIGRzdF9yZWcsIHNyY19yZWcpLCAweDg5KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjUyLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzctXHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5Mzg6XHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzOS1cdFx0XHRcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBgYWRkYCBJbnN0cnVjdGlvbiBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBIbW0sIHRoZSBwcmVjZWRpbmcgY29kZSBzbmlwcGV0IHVzZWQgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYC4gIFRoYXQmIzM5O3MgYSBzbGlnaHQgdmFyaWF0aW9uLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVuY2UuIExldCBtZSBxdWlja2x5IGp1bXAgb3ZlciB0byB0aGUgZGVmaW5pdGlvbnMgZm9yIGJvdGggYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCBvbmUgbWlnaHQgYmUgYSBzaW1wbGVyIGFkZGl0aW9uIHdpdGggYSBzaW5nbGUgb3BlcmFuZCwgYW5kIHRoZSBvdGhlciBhIHR3by1vcGVyYW5kIGFkZGl0aW9uIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlLCBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgb3BlcmFuZCB0eXBlcyBhbmQgdGhlaXIgaW1wbGljYXRpb25zIGZvciBob3cgdGhpcyBhZGRpdGlvbiBnZXRzIGV4ZWN1dGVkLiBJJiMzOTtsbCBjaGVjayBpZiB0aGUgMCBpbiBgYWRkXzJtb2RgIGlzIGEgZGlyZWN0IG9wZXJhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHRcdFx0XHQgIEJJVChCUEZfUkVHX0ZQKSk7XG4gMjQxOlx0fVxuIDI0MjpcdFxuIDI0MzpcdHN0YXRpYyBib29sIGlzX2F4cmVnKHUzMiByZWcpXG4gMjQ0Olx0e1xuIDI0NTpcdFx0cmV0dXJuIHJlZyA9PSBCUEZfUkVHXzA7XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdC8qIEFkZCBtb2RpZmllcnMgaWYgJiMzOTtyZWcmIzM5OyBtYXBzIHRvIHg4Ni02NCByZWdpc3RlcnMgUjguLlIxNSAqL1xuIDI0OTpcdHN0YXRpYyB1OCBhZGRfMW1vZCh1OCBieXRlLCB1MzIgcmVnKVxuIDI1MDpcdHtcbiAyNTE6XHRcdGlmIChpc19lcmVnKHJlZykpXG4gMjUyOlx0XHRcdGJ5dGUgfD0gMTtcbiAyNTM6XHRcdHJldHVybiBieXRlO1xuIDI1NDpcdH1cbiAyNTU6XHRcbiAyNTY6XHRzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXG4gMjU3Olx0e1xuIDI1ODpcdFx0aWYgKGlzX2VyZWcocjEpKVxuIDI1OTpcdFx0XHRieXRlIHw9IDE7XG4gMjYwOlx0XHRpZiAoaXNfZXJlZyhyMikpXG4gMjYxOlx0XHRcdGJ5dGUgfD0gNDtcbiAyNjI6XHRcdHJldHVybiBieXRlO1xuIDI2MzpcdH1cbiAyNjQ6XHRcbiAyNjU6XHRzdGF0aWMgdTggYWRkXzNtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIsIHUzMiBpbmRleClcbiAyNjY6XHR7XG4gMjY3Olx0XHRpZiAoaXNfZXJlZyhyMSkpXG4gMjY4Olx0XHRcdGJ5dGUgfD0gMTtcbiAyNjk6XHRcdGlmIChpc19lcmVnKGluZGV4KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MzkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlzc2VjdGluZyB0aGUgUkVYIFByZWZpeCBhbmQgSW5zdHJ1Y3Rpb24gRW5jb2RpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgSSYjMzk7bSBkZWFsaW5nIHdpdGggaG93IFJFWCBwcmVmaXhlcyBpbnRlcmFjdCB3aXRoIGV4dGVuZGVkIHJlZ2lzdGVycyBpbiB4ODYtNjQgYXNzZW1ibHkuIFRoZSBgYWRkXzFtb2RgIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKEIgYml0KSBvZiB0aGUgUkVYIHByZWZpeCB3aGVuIHRoZSB0YXJnZXQgcmVnaXN0ZXIgKGByZWdgIGluIHRoaXMgY2FzZSkgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgbGlrZSBSOC1SMTUuIFNpbWlsYXJseSwgYGFkZF8ybW9kYCBhbHRlcnMgYm90aCB0aGUgQiBiaXQgKGZvciBgcjFgIGV4dGVuZGVkKSBhbmQgdGhlIFIgYml0IChiaXQgMikgaWYgYHIyYCBpcyBleHRlbmRlZC4KCkhhbmcgb24sIGxldCYjMzk7cyBjb25zaWRlciBhIHNwZWNpZmljIGNhc2U6IGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIEhlcmUsIGByMWAgaXMgMCwgd2hpY2ggaXMgUkFYLCBub3QgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIuIEJ1dCBgcjJgIGlzIGBkc3RfcmVnYC4gU28sIGlmIGBkc3RfcmVnYCAqaXMqIGFuIGV4dGVuZGVkIHJlZ2lzdGVyLCBgYWRkXzJtb2RgIHdpbGwgc2V0IHRoZSBSIGJpdCAodmFsdWUgNCkgaW4gdGhlIFJFWCBwcmVmaXguCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBSRVggcHJlZml4IGZvcm1hdDogSXQmIzM5O3MgMHg0MCBPUiYjMzk7ZCB3aXRoIHRoZSBXLCBSLCBYLCBhbmQgQiBiaXRzLiBXIGNvbnRyb2xzIG9wZXJhbmQgc2l6ZSwgUiByZWZlcnMgdG8gdGhlIE1vZFJNIHJlZyBmaWVsZCwgWCByZWZlcnMgdG8gdGhlIFNJQiBpbmRleCBmaWVsZCwgYW5kIEIgY29udHJvbHMgdGhlIE1vZFJNIHIvbSBmaWVsZCwgU0lCIGJhc2UgZmllbGQsIG9yIG9wY29kZSByZWdpc3RlciBmaWVsZC4KCkxvb2tpbmcgYXQgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDoKCmBgYGMKRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpOwpFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7CmBgYAoKYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCBzZXRzIHRoZSBCIGJpdCBpZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHdoaWNoIGlzIGNsZWFyLiBCdXQsIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gaXMgYGFkZCAmbHQ7ZHN0Jmd0OywgZ3M6WyZsdDtvZmYmZ3Q7XWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIE1vZFJNIGJ5dGU6IGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuIE9rYXksIG5vdyBsZXQmIzM5O3MgcmVmZXIgdG8gdGhlIGRlZmluaXRpb24gb2YgYGFkZF8ycmVnYC4gSXQgbG9va3MgbGlrZSB0aGF0IGlzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdFx0Ynl0ZSB8PSAyO1xuIDI3MTpcdFx0aWYgKGlzX2VyZWcocjIpKVxuIDI3MjpcdFx0XHRieXRlIHw9IDQ7XG4gMjczOlx0XHRyZXR1cm4gYnl0ZTtcbiAyNzQ6XHR9XG4gMjc1Olx0XG4gMjc2Olx0LyogRW5jb2RlICYjMzk7ZHN0X3JlZyYjMzk7IHJlZ2lzdGVyIGludG8geDg2LTY0IG9wY29kZSAmIzM5O2J5dGUmIzM5OyAqL1xuIDI3NzpcdHN0YXRpYyB1OCBhZGRfMXJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZylcbiAyNzg6XHR7XG4gMjc5Olx0XHRyZXR1cm4gYnl0ZSAmIzQzOyByZWcyaGV4W2RzdF9yZWddO1xuIDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHQvKiBFbmNvZGUgJiMzOTtkc3RfcmVnJiMzOTsgYW5kICYjMzk7c3JjX3JlZyYjMzk7IHJlZ2lzdGVycyBpbnRvIHg4Ni02NCBvcGNvZGUgJiMzOTtieXRlJiMzOTsgKi9cbiAyODM6XHRzdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuIDI4NDpcdHtcbiAyODU6XHRcdHJldHVybiBieXRlICYjNDM7IHJlZzJoZXhbZHN0X3JlZ10gJiM0MzsgKHJlZzJoZXhbc3JjX3JlZ10gXHUwMDNjXHUwMDNjIDMpO1xuIDI4NjpcdH1cbiAyODc6XHRcbiAyODg6XHQvKiBTb21lIDEtYnl0ZSBvcGNvZGVzIGZvciBiaW5hcnkgQUxVIG9wZXJhdGlvbnMgKi9cbiAyODk6XHRzdGF0aWMgdTggc2ltcGxlX2FsdV9vcGNvZGVzW10gPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTk3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkEgQ3JpdGljYWwgWDg2IEJQRiBKSVQgQnVnIGFuZCBpdHMgUmVzb2x1dGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIEkgd2FzIGxvb2tpbmcgYXQgdGhpcyBgYWRkXzJyZWdgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcgd2FzbiYjMzk7dCByaWdodC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBwbGFjZWQgYGRzdF9yZWdgIGluIHRoZSBgc3JjX3JlZ2AgcG9zaXRpb24gKHNoaWZ0ZWQgYnkgMyksIG1lYW5pbmcgdGhlIGByZWdgIGZpZWxkIG9mIHRoZSBNb2RSTSBieXRlLiBCdXQgdGhlbiBJIGxvb2tlZCBhZ2FpbiwgYW5kIGBhZGRfMnJlZyhieXRlLCBkc3RfcmVnLCBzcmNfcmVnKWAgZG9lcyBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSwgYWRkaW5nIGBieXRlYCwgYHJlZzJoZXhbZHN0X3JlZ11gIGFuZCBgcmVnMmhleFtzcmNfcmVnXWAgbGVmdC1zaGlmdGVkIGJ5IDMuCgpJdCBzdGFydGVkIHRvIGNsaWNrLiBgMHgwNGAgaXMgdGhlIE1vZFJNIGJ5dGUsIGFuZCBgcmVnMmhleFswXWAgaXMganVzdCBgMGAgKFJBWCkuIFRoZSBgcmVnYCBmaWVsZCBvZiBNb2RSTSBzaG91bGQgYmUgYGRzdF9yZWdgIC0gYnV0IHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoICpob3cqIHRoYXQgZW5jb2RpbmcgaXMgaGFwcGVuaW5nLiBgcmVnMmhleFtkc3RfcmVnXWAgaXMgYWRkZWQgZGlyZWN0bHksIHdoaWNoIHNldHMgdGhlIGxvd2VyIDMgYml0cyBmb3IgdGhlIHIvbSBmaWVsZCBhbmQgbm90IHRoZSByZWcgZmllbGQuCgpUaGVuLCBJIGZvY3VzZWQgb24gdGhlIFJFWCBwcmVmaXguIFdoZW4gYGRzdF9yZWdgIGlzIGV4dGVuZGVkIChSOC1SMTUpLCBpdCYjMzk7cyBzdXBwb3NlZCB0byBzZXQgdGhlIFIgYml0IChiaXQgMiwgdmFsdWUgNCkuIEJ1dCwgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCB3YXMgc2V0dGluZyB0aGUgQiBiaXQgKGJpdCAwLCB2YWx1ZSAxKSBpbnN0ZWFkISBUaGlzIG1lYW5zIGBhZGRfMW1vZGAgd2FzIHNldHRpbmcgdGhlICp3cm9uZyogYml0IGluIHRoZSBSRVggcHJlZml4LgoKVGhpcyBtZWFucyB0aGF0IGlmIGBkc3RfcmVnYCB3YXMgUjgsIHRoZSBpbnN0cnVjdGlvbiB3YXMgdXNpbmcgUkFYIGZvciB0aGUgYHJlZ2AgZmllbGQgYW5kIFI4IGZvciB0aGUgYHIvbWAgZmllbGQsIHdoaWNoIHNob3VsZCBub3QgaGF2ZSBiZWVuIHRoZSBjYXNlLiBUaGUgYHIvbWAgZmllbGQgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIFNJQiBieXRlIGluZGljYXRvciAoMHgwNCBtZWFucyBTSUIgZm9sbG93cykuCgpUaGUgcm9vdCBjYXVzZTogdGhlIGZ1bmN0aW9uIHdhc24mIzM5O3QgcHJvcGVybHkgc2V0dGluZyB0aGUgUiBiaXQhIFRoaXMgcmVzdWx0ZWQgaW4gYSBjb21wbGV0ZSBtaXNpbnRlcnByZXRhdGlvbiBvZiBleHRlbmRlZCByZWdpc3RlcnMsIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGluc3RydWN0aW9uIGVuY29kaW5nLiAgSWYgYGRzdF9yZWdgIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciwgdGhlIGluc3RydWN0aW9uIHdhcyBlbmNvZGluZyBzb21ldGhpbmcgbGlrZSBgYWRkIHI4LCBnczpbJmx0O29mZiZndDtdYCB3aGVuIGl0IHNob3VsZG4mIzM5O3QuIFRoaXMgaXMgYSBwcmV0dHkgbWFqb3IgYnVnIGluIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciB4ODYuCgpUaGUgZml4PyBJIG5lZWQgdG8gY2hhbmdlIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgdG8gYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gIEkgcmVjaGVja2VkIGBhZGRfMm1vZGA6CmBgYGMKc3RhdGljIHU4IGFkZF8ybW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyKQp7CglpZiAoaXNfZXJlZyhyMSkpCgkJYnl0ZSB8PSAxOwoJaWYgKGlzX2VyZWcocjIpKQoJCWJ5dGUgfD0gNDsKCXJldHVybiBieXRlOwp9CmBgYAoKTm93LCBgcjJgIGNvcnJlY3RseSBzZXRzIGJpdCAyICh0aGUgUiBiaXQpIHdoZW4gYGRzdF9yZWdgIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyISBUaGlzIGNvcnJlY3RseSBzZXRzIHRoZSBSIGJpdCBpbiB0aGUgUkVYIHByZWZpeC4KClRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHRlc3QgaXQgYW5kIGZ1enogaXQuICBJIG5lZWQgdG8gZnV6eiBCUEYgcHJvZ3JhbXMgdGhhdCB1c2UgYG1vdl9wZXJjcHVfYWRkcmAgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMgb24geDg2LiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGJlY2F1c2UgYGRvX2ppdGAgaXMgc3RhdGljLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBicGZfaW50X2ppdF9jb21waWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk1MD1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2MS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTYyOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODE2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFg4NiBCUEYgSklUIENvbXBpbGF0aW9uIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb247IHRoYXQmIzM5O3MgdGhlIGNvcmUgSklUIGNvbXBpbGVyIGZvciB4ODYsIHJpZ2h0PyBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiBvYnZpb3VzbHkgYENPTkZJR19CUEZfSklUYCBpcyBhIG11c3QuIEJ1dCB0aGVyZSYjMzk7cyBtb3JlLiBXYWl0LCBJIHNlZSB0aGlzIGAjaWZkZWYgQ09ORklHX1NNUGAgYmxvY2suLi4gYW5kIGl0JiMzOTtzIGVtaXR0aW5nIHNvbWUgaW5saW5lIGFzc2VtYmx5IGZvciB3aGF0IGxvb2tzIGxpa2UgQ1BVLXNwZWNpZmljIG9mZnNldCBoYW5kbGluZy4gT2theSwgc28gdGhhdCBtZWFucyBgQ09ORklHX1NNUGAgaXMgYWxzbyBlc3NlbnRpYWwuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhhdCBibG9jay4gSXQgbG9va3MgbGlrZSBpdCBpcyBnZW5lcmF0aW5nIGFuIGBhZGRgIGluc3RydWN0aW9uIHRvIGhhbmRsZSBzb21lIHNvcnQgb2YgcGVyLUNQVSBvZmZzZXQuCgpgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBwcm9iYWJseSBhbHNvIGEgcmVxdWlyZW1lbnQuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9jb21wXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L01ha2VmaWxlPTg9ZWxzZVxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjk6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtMTAtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzOTEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uIGZpbGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgYENPTkZJR19CUEZfSklUYCDigJMgeWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgaGFyZCByZXF1aXJlbWVudC4gTm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiBgQ09ORklHX1NNUGAgaXMgcHJhY3RpY2FsbHkgYSBnaXZlbiB0aGVzZSBkYXlzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBpbmNsdWRlIGl0IGV4cGxpY2l0bHkuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZz8gR290dGEgYmUgZGlsaWdlbnQuCgpMZXQgbWUgc2Vl4oCmIEnigJlsbCBkbyBhIHF1aWNrIGNoZWNrIG9mIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAuIFRoYXQgZnVuY3Rpb27igJlzIHJlbGF0ZWQgdG8gYEJQRl9BRERSX1BFUkNQVWAsIHdoaWNoIGlzIGEga2V5IGNvbXBvbmVudCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGluZ3MgYXJlIHNldCB1cC4gQWgsIGFuZCBoZXJlIHdlIGFyZSwgbm93LCB3aGVyZSBkb2VzIGBCUEZfQUREUl9QRVJDUFVgIGNvbWUgZnJvbSBhZ2Fpbj8gV2hlcmUgaXMgdGhhdCB2YWx1ZSBnZW5lcmF0ZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4gdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgbGluZWQgdXAgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQUREUl9QRVJDUFUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE4OS0gKiBkc3RfcmVnID0gc3JjX3JlZyAmIzQzOyBcdTAwM2NwZXJjcHVfYmFzZV9vZmZcdTAwM2VcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTkwOiAqIEJQRl9BRERSX1BFUkNQVSBpcyB1c2VkIGFzIGEgc3BlY2lhbCBpbnNuLVx1MDAzZW9mZiB2YWx1ZS5cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTkxLSAqL1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxOTI6I2RlZmluZSBCUEZfQUREUl9QRVJDUFVcdCgtMSlcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTkzLVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTk4LVx0XHQuc3JjX3JlZyA9IFNSQyxcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTk5Olx0XHQub2ZmICAgPSBCUEZfQUREUl9QRVJDUFUsXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAwLVx0XHQuaW1tICAgPSAwIH0pXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yMDI9c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAzLXtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjA0Olx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDUtfVxuLS1cbmtlcm5lbC9icGYvZGlzYXNtLmM9MTY5PXN0YXRpYyBib29sIGlzX2FkZHJfc3BhY2VfY2FzdChjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi9kaXNhc20uYy0xNzYtICogZHN0X3JlZyA9IHNyY19yZWcgJiM0MzsgXHUwMDNjcGVyY3B1X2Jhc2Vfb2ZmXHUwMDNlXG5rZXJuZWwvYnBmL2Rpc2FzbS5jOjE3NzogKiBCUEZfQUREUl9QRVJDUFUgaXMgdXNlZCBhcyBhIHNwZWNpYWwgaW5zbi1cdTAwM2VvZmYgdmFsdWUuXG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTE3OC0gKi9cbmtlcm5lbC9icGYvZGlzYXNtLmM6MTc5OiNkZWZpbmUgQlBGX0FERFJfUEVSQ1BVXHQoLTEpXG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTE4MC1cbmtlcm5lbC9icGYvZGlzYXNtLmM9MTgxPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi9kaXNhc20uYy0xODIte1xua2VybmVsL2JwZi9kaXNhc20uYzoxODM6XHRyZXR1cm4gaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XG5rZXJuZWwvYnBmL2Rpc2FzbS5jLTE4NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQ1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBJbnN0cnVjdGlvbiBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIEJQRiBpbnN0cnVjdGlvbnMuIE15IHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBvciB0aGUgYnJvYWRlciBjb250ZXh0IHdoZXJlIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAgaXMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBCUEYgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiB0aGUgYC9rZXJuZWwvYnBmL2AgZGlyZWN0b3J5LiBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciB1c2VzIG9mIHRob3NlIG1hY3JvcyBvciBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgcGVyLUNQVSByZWdpc3RlcnMgYW5kIG1lbW9yeSBhZGRyZXNzaW5nIGFyZSBoYW5kbGVkIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIEkmIzM5O20gcHJvYmFibHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHJlZ2lzdGVycyBiZWhhdmUsIHdoYXQmIzM5O3MgZG9uZSB3aXRoIHRoZW0sIGFuZCBtYXliZSB0byBkZWJ1ZyBzb21lIG9ic2VydmVkIGJlaGF2aW9yLiBPciwgSSBtaWdodCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJ1Z3MuIE15IGZvY3VzIGlzIHJlYWxseSBvbiB3aGVyZSBhbmQgaG93IHRoZXNlIGNvbmNlcHRzIGFyZSB1dGlsaXplZCBpbiB0aGF0IHNwZWNpZmljIGtlcm5lbCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTU9WNjRfUEVSQ1BVX1JFRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJyYXltYXAuYz0yOTQ9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzE4LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MzE5Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTMyMC1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTAzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjMtXHRcdFx0aW5zbl9idWZbMF0gPSBpbnNuWzFdO1xua2VybmVsL2JwZi9maXh1cHMuYzoxODY0Olx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVx0XHRcdGNudCA9IDI7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTc2LVx0XHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3B1X251bWJlcik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxNzc6XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNzgtXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE5OC1cdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmN1cnJlbnRfdGFzayk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxOTk6XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMDAtXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDE0PXN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDI3LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDI4Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjQyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoaXMgY29uc3RydWN0IGJlaW5nIHVzZWQgaW4gYSBmZXcgcGxhY2VzOiBgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwYCwgYGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwYCwgYW5kIGFsc28sIG5vdGFibHksIGluIGBicGZfZG9fbWlzY19maXh1cHNgIHdoZW4gZGVhbGluZyB3aXRoIGBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRgIGFuZCBgYnBmX2dldF9jdXJyZW50X3Rhc2tgLiBXYWl0IGEgbWludXRlLCBJIGp1c3Qgbm90aWNlZCBzb21ldGhpbmcgLSBgYnBmX2RvX21pc2NfZml4dXBzYCBhY3R1YWxseSB1c2VzIGBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMClgLgoKVGhhdCYjMzk7cyB1c2luZyBgQlBGX1JFR18wYCwgd2hpY2ggdHJhbnNsYXRlcyB0byBSQVguIEFuZCBSQVggaXNuJiMzOTt0IGFuIGV4dGVuZGVkIHJlZ2lzdGVyLCBzbyB0aGVyZSBpcyB0aGUgcHJvYmxlbSwgSSB0aGluay4gVGhpcyBidWcgb25seSBhZmZlY3RzIHRoZSBleHRlbmRlZCByZWdpc3RlcnMgLSBSOCB0aHJvdWdoIFIxNS4gV2hlcmUgaXMgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBhY3R1YWxseSAqdXNlZCogd2l0aCBhbiBleHRlbmRlZCByZWdpc3Rlcj8gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLgoKQWgsIGhlcmUgaXQgaXMuIEluIGBicGZfZG9fbWlzY19maXh1cHNgOgoKYGBgYwoJCQlpbnNuX2J1ZlswXSA9IGluc25bMV07CgkJCWluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi0mZ3Q7ZHN0X3JlZywgaW5zbi0mZ3Q7ZHN0X3JlZyk7CgkJCWNudCA9IDI7CmBgYAoKUmlnaHQsIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgaW5zdHJ1Y3Rpb24gaW4gcGxhY2UuIE9rYXksIEkgbmVlZCB0byBjaGVjayBgYnBmX2RvX21pc2NfZml4dXBzYCBhcm91bmQgbGluZSAxODYzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTA6XHRcdFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuMTg1MTpcdFxuMTg1MjpcdFx0XHRcdHByb2ctXHUwMDNlaml0X3JlcXVpcmVkID0gdHJ1ZTtcbjE4NTM6XHRcbjE4NTQ6XHRcdFx0XHQvKlxuMTg1NTpcdFx0XHRcdCAqIFdlIGFyZSAqc2tpcHBpbmcqIGZpcnN0IGhhbGYgb2YgbGRfaW1tNjQgaW5zblxuMTg1NjpcdFx0XHRcdCAqIHdpdGggJiMzOTtpJiM0MzsmIzQzOzsmIzM5OywgcGF0Y2hpbmcgb3ZlciBzZWNvbmQgaGFsZiBvZiBpdFxuMTg1NzpcdFx0XHRcdCAqIHdpdGggdGhhdCBzYW1lIGhhbGYgJiM0MzsgbW92NjRfcGVyY3B1X3JlZyBpbnNuLlxuMTg1ODpcdFx0XHRcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxuMTg1OTpcdFx0XHRcdCAqIHJlcGxhY2Ugb25lIDgtYnl0ZSBpbnNuLCB3aGljaCBkb2VzIG5vdCB3b3JrXG4xODYwOlx0XHRcdFx0ICogd2VsbCBmb3IgbGRfaW1tNjQgaW5zbi5cbjE4NjE6XHRcdFx0XHQgKi9cbjE4NjI6XHRcbjE4NjM6XHRcdFx0XHRpbnNuX2J1ZlswXSA9IGluc25bMV07XG4xODY0Olx0XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlZHN0X3JlZyk7XG4xODY1Olx0XHRcdFx0Y250ID0gMjtcbjE4NjY6XHRcbjE4Njc6XHRcdFx0XHRpJiM0MzsmIzQzOztcbjE4Njg6XHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbjE4Njk6XHRcdFx0XHRpZiAoIW5ld19wcm9nKVxuMTg3MDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODcxOlx0XG4xODcyOlx0XHRcdFx0ZGVsdGEgICAgJiM0Mzs9IGNudCAtIDE7XG4xODczOlx0XHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nID0gbmV3X3Byb2c7XG4xODc0Olx0XHRcdFx0aW5zbiAgICAgID0gbmV3X3Byb2ctXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgZGVsdGE7XG4xODc1Olx0XHRcdFx0Z290byBuZXh0X2luc247XG4xODc2Olx0XHRcdH1cbjE4Nzc6XHRcbjE4Nzg6XHRcdFx0aWYgKGluc24tXHUwMDNlY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9DQUxMKSlcbjE4Nzk6XHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2MjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQmxvY2smIzM5O3MgTG9naWMqKgoKQWxyaWdodCwgSSBzZWUgdGhpcyBjb25kaXRpb25hbCBibG9jaywgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IGl0cyBjb3JlIGxvZ2ljLiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSAqZXhhY3QqIGNvbmRpdGlvbiB0aGF0IHRyaWdnZXJzIHRoaXMgdGhpbmc/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICYjMzk7d2h5JiMzOTsgYmVoaW5kIGl0cyBleGVjdXRpb24uIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgc2V0dGluZyBhIHRlbXBvcmFsIGFuY2hvci4gQW55dGhpbmcgYmVmb3JlIDE4NTAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGFzc2VzcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgYmxvY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCB0byBiZXR0ZXIgZXZhbHVhdGUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzMDpcdFxuMTgzMTpcdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuMTgzMjpcdFx0XHRcdGlmICghbmV3X3Byb2cpXG4xODMzOlx0XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4MzQ6XHRcbjE4MzU6XHRcdFx0XHRkZWx0YSAmIzQzOz0gY250IC0gMTtcbjE4MzY6XHRcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcbjE4Mzc6XHRcdFx0XHRpbnNuID0gbmV3X3Byb2ctXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgZGVsdGE7XG4xODM4Olx0XHRcdFx0Z290byBuZXh0X2luc247XG4xODM5Olx0XHRcdH1cbjE4NDA6XHRcbjE4NDE6XHRcdFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcdTAwMjZcdTAwMjZcbjE4NDI6XHRcdFx0ICAgIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXHUwMDI2XHUwMDI2XG4xODQzOlx0XHRcdCAgICAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX1ZBTFVFIHx8XG4xODQ0Olx0XHRcdCAgICAgaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX0lEWF9WQUxVRSkpIHtcbjE4NDU6XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuMTg0NjpcdFxuMTg0NzpcdFx0XHRcdGF1eCA9IFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2kgJiM0MzsgZGVsdGFdO1xuMTg0ODpcdFx0XHRcdG1hcCA9IGVudi1cdTAwM2V1c2VkX21hcHNbYXV4LVx1MDAzZW1hcF9pbmRleF07XG4xODQ5Olx0XHRcdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKVxuMTg1MDpcdFx0XHRcdFx0Z290byBuZXh0X2luc247XG4xODUxOlx0XG4xODUyOlx0XHRcdFx0cHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xuMTg1MzpcdFxuMTg1NDpcdFx0XHRcdC8qXG4xODU1Olx0XHRcdFx0ICogV2UgYXJlICpza2lwcGluZyogZmlyc3QgaGFsZiBvZiBsZF9pbW02NCBpbnNuXG4xODU2Olx0XHRcdFx0ICogd2l0aCAmIzM5O2kmIzQzOyYjNDM7OyYjMzk7LCBwYXRjaGluZyBvdmVyIHNlY29uZCBoYWxmIG9mIGl0XG4xODU3Olx0XHRcdFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiAmIzQzOyBtb3Y2NF9wZXJjcHVfcmVnIGluc24uXG4xODU4Olx0XHRcdFx0ICogQWxsIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGNhbiBvbmx5XG4xODU5Olx0XHRcdFx0ICogcmVwbGFjZSBvbmUgOC1ieXRlIGluc24sIHdoaWNoIGRvZXMgbm90IHdvcmtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBCUEYgQnVnKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBpdC4gVGhpcyBpcyBhYm91dCBhIG5hc3R5IGxpdHRsZSBidWcgdHJpZ2dlcmVkIGJ5IGBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZYCBtYXAgdmFsdWVzIGJlaW5nIGxvYWRlZCB1c2luZyBgQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EV2AgYW5kIGBCUEZfUFNFVURPX01BUF9WQUxVRWAuIENsYXNzaWMhIEl0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBzY2VuYXJpbywgYnV0IGRlZmluaXRlbHkgZXhwbG9pdGFibGUuCgpCYXNpY2FsbHksIHdoZW4gYSBCUEYgcHJvZ3JhbSB0cmllcyB0byBsb2FkIGEgcGVyLWNwdSBhcnJheSBtYXAgdmFsdWUgZGlyZWN0bHkgaW50byBhIHJlZ2lzdGVyIOKAkyBzcGVjaWZpY2FsbHksIGl0IHVzZXMgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHKGluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O2RzdF9yZWcpYCDigJMgdGhlcmUmIzM5O3MgYSBwcm9ibGVtLiBJZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIsIGBpbnNuLSZndDtkc3RfcmVnYCwgaGFwcGVucyB0byBiZSBhbiBleHRlbmRlZCByZWdpc3RlciwgbGlrZSBSOCBvciBoaWdoZXIsIGl0IGtpY2tzIG9mZiB0aGlzIGJ1Zy4KClNvLCBsb2FkaW5nIHRoYXQgcGVyLWNwdSBhcnJheSB2YWx1ZSBpbnRvIGFueSByZWdpc3RlciBiZXR3ZWVuIFI4IGFuZCBSMTUgaXMgdGhlIHRyaWdnZXIuIFRoYXQmIzM5O3MgYSB2ZXJ5IG5hcnJvdywgeWV0IHF1aXRlIHJlYWNoYWJsZSBwYXRoIHRoYXQgbWFrZXMgaXQgYW4gaW1tZWRpYXRlIHByaW9yaXR5LiBXZSYjMzk7cmUgZGVmaW5pdGVseSBmdXp6aW5nIHRoaXMsIG5vIHF1ZXN0aW9uLgoKQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19CUEZfSklUYCwgYW5kIGBDT05GSUdfU01QYC4gSnVzdCB5b3VyIGJhc2ljIEJQRiByZXF1aXJlbWVudHMuCgpIYW5nIG9uLi4uYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKWAgaXMgdHJ1ZSBvbiB4ODYsIHdoaWNoIGlzIGNydWNpYWwgaGVyZS4gQWxyaWdodCwgYmVzdCB0byBnbyB2ZXJpZnkgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuYC4gV2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGluZ3JlZGllbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTMzMTA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMzMjMtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzozMzI0OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMzMyNS17XG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz01NTY9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTcxLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo1NzI6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTU3My17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMTMzPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTEtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxNTI6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTMte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MTc3PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MTgxLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQxODI6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDE4My17XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMjM3PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTIzODpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMzktYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTI2Mj1zdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI2NS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYzoyNjY6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjc3PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfbWV0YShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgaW1tLCB1MzIgKm9mZilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjgxLVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI4MjpcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI4My1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yOTQ9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjk4LVxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI5OTpcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTMwMC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTMyNzU9Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyNzktXG5rZXJuZWwvYnBmL2NvcmUuYzozMjgwOmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMyODEte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwMz1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODQwLVxua2VybmVsL2JwZi9maXh1cHMuYzoxODQxOlx0XHRpZiAoYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9maXh1cHMuYy0xODQyLVx0XHQgICAgaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDE0PXN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDE3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjQxODpcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxOS1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjY5NT1ib29sIGJwZl92ZXJpZmllcl9pbmxpbmVzX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHMzMiBpbW0pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzAzLSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2NzA0Olx0XHRyZXR1cm4gZW52LVx1MDAzZXByb2ctXHUwMDNlaml0X3JlcXVlc3RlZCBcdTAwMjZcdTAwMjYgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzA1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ1NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgSklUIENvbXBpbGVyIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc25gIGZ1bmN0aW9uIOKAkyBJIGtub3cgaXQmIzM5O3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgc28gdGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGJldHRlciwgc28gbGV0JiMzOTtzIGNoZWNrIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGRvX2ppdGAuIE15IGd1dCB0ZWxscyBtZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGtleSDigJMgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGNvbXBpbGluZyBhIEJQRiBwcm9ncmFtIHdpdGggdGhlIEpJVC4gSG1tLCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIGNyaXRpY2FsPyBBaCwgeWVzLCBgYnBmX2RvX21pc2NfZml4dXBzYCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkISBBbmQsIHdhaXQsIGJvdGggYHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cGAgYW5kIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAgYWxzbyBjb250cmlidXRlIGluc3RydWN0aW9uIGdlbmVyYXRpb24uIEJ1dCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHJlbWFpbnMgdGhlIGNvcmUgZm9jdXMgZm9yIG5vdy4KCkxldCBtZSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYFNNUGAgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLgoKT2theSwgc28gdGhlIGNoYW5nZSBJJiMzOTttIGxvb2tpbmcgYXQgKmlzKiBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQgaGluZ2VzIG9uIGBDT05GSUdfQlBGX0pJVGAsIG9idmlvdXNseS4gQW5kLCBmcm9tIGxvb2tpbmcgYXQgYGRvX2ppdGAsIEkgc2VlIGBDT05GSUdfU01QYCBpcyByZXF1aXJlZCBmb3IgdGhlIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAgYmxvY2suIFdhaXQgYSBzZWNvbmQuLi4gaWYgYENPTkZJR19TTVBgIGlzICpub3QqIGVuYWJsZWQsIHRoYXQgZW50aXJlIHNlY3Rpb24gb2YgYGRvX2ppdGAgZWZmZWN0aXZlbHkgZG9lcyBub3RoaW5nPyBJJiMzOTtkIGJldHRlciByZS1leGFtaW5lIGBkb19qaXRgIGNsb3NlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTMwOlx0XHRcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCBBVVhfUkVHLCBkc3RfcmVnLCB0cnVlKTtcbjE5MzE6XHRcdFx0XHRcdEVNSVQzKDB4MEYsIDB4NDQsIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIGRzdF9yZWcpKTtcbjE5MzI6XHRcdFx0XHRcdGJyZWFrO1xuMTkzMzpcdFx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbjE5MzQ6XHRcdFx0XHRcdC8qIG1vdiBcdTAwM2Nkc3RcdTAwM2UsIFx1MDAzY3NyY1x1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xuMTkzNTpcdFx0XHRcdFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XG4xOTM2Olx0I2lmZGVmIENPTkZJR19TTVBcbjE5Mzc6XHRcdFx0XHRcdC8qIGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG4xOTM4Olx0XHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4xOTM5Olx0XHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4xOTQwOlx0XHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbjE5NDE6XHQjZW5kaWZcbjE5NDI6XHRcdFx0XHRcdGJyZWFrO1xuMTk0MzpcdFx0XHRcdH1cbjE5NDQ6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjE5NDU6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YOlxuMTk0NjpcdFx0XHRcdGlmIChpbnNuLVx1MDAzZW9mZiA9PSAwKVxuMTk0NzpcdFx0XHRcdFx0ZW1pdF9tb3ZfcmVnKFx1MDAyNnByb2csXG4xOTQ4Olx0XHRcdFx0XHRcdCAgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0LFxuMTk0OTpcdFx0XHRcdFx0XHQgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUG90ZW50aWFsIEJ1ZyoqCgpPa2F5LCBzbyBpZiBgQ09ORklHX1NNUGAgaXMgb2ZmLCB0aGUgY29kZSBwYXRoIGp1c3QgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBgRU1JVF9tb3ZgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGBDT05GSUdfU01QYCBpcyBhIGtleSByZXF1aXJlbWVudCBmb3IgdHJpZ2dlcmluZyB0aGlzIGJ1Zy4gSSYjMzk7bSBhbHNvIHNlZWluZyB0aGF0IGBDT05GSUdfQlBGX0pJVGAgaXMgbmVjZXNzYXJ5IHRvIGV2ZW4gY29tcGlsZSBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgYW5kLCBvYnZpb3VzbHksIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlIHRvICp1c2UqIEJQRi4KCk5vdywgaG9sZCBvbi4gYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHRoZSBwcmltYXJ5IEpJVCBjb21waWxhdGlvbiBmdW5jdGlvbiwgYnV0IEkgbmVlZCB0byBsb29rIGJleW9uZCB0aGUgb2J2aW91cy4gQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgY29tcGlsYXRpb24gcGlwZWxpbmUgdGhhdCBtaWdodCBiZSByZWxldmFudD8gQWgsIGhlcmUmIzM5O3Mgb25lOiBgYnBmX2RvX21pc2NfZml4dXBzYC4gVGhpcyBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBpbnN0cnVjdGlvbi4gRGVmaW5pdGVseSBhIHBsYWNlIHRvIGZvY3VzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBicGZfZG9fbWlzY19maXh1cHNgIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCB0byBzZWUgaWYgaXQmIzM5O3MgdGhlIHNvdXJjZSBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc5Olx0LyogYWRkcmVzcyBzcGFjZSBjYXN0cyBjb252ZXJ0ZWQgdG8gQlBGX0FMVSwgc2VlIGJwZl9kb19taXNjX2ZpeHVwcygpICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwLVx0aWYgKGlzX2FkZHJfc3BhY2VfY2FzdDMyKHByb2csIGluc24pKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ3ND1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwMi0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwMzppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDE1Mz1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNzQtXHRpZiAocmV0ID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzNzU6XHRcdHJldCA9IGJwZl9kb19taXNjX2ZpeHVwcyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDUyMwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIEpJVCBDb21waWxlciBGaXgqKgoKT2theSwgYGJwZl9kb19taXNjX2ZpeHVwc2AgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvcmUgaXNzdWUgaGVyZS4KClJpZ2h0LCB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgaGFkIGEgYnVnIHJlbGF0ZWQgdG8gYG1vdl9wZXJjcHVfYWRkcmAuIEl0IHNlZW1zIHRoZSBjb21waWxlciB3YXMgZ2V0dGluZyB0aGUgUkVYIHByZWZpeCB3cm9uZyB3aGVuIGRlYWxpbmcgd2l0aCBwZXItQ1BVIG1hcCB2YWx1ZSBsb2FkcyBhbmQgZXh0ZW5kZWQgcmVnaXN0ZXJzIChSOC1SMTUpIGFzIHRoZSBkZXN0aW5hdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGV5IHdlcmUgdXNpbmcgYGFkZF8xbW9kYCB3aGVuIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiB1c2luZyBgYWRkXzJtb2RgLiBgYWRkXzFtb2RgIHNldHMgdGhlICYjMzQ7QiYjMzQ7IGJpdCwgd2hpbGUgYGFkZF8ybW9kYCBjb3JyZWN0bHkgc2V0cyB0aGUgJiMzNDtSJiMzNDsgYml0IGZvciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGBhZGQgJmx0O2RzdCZndDssIGdzOlsmbHQ7b2ZmJmd0O11gIGluc3RydWN0aW9uLiBUaGlzIHJlc3VsdGVkIGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSwgd2l0aCBwb3RlbnRpYWxseSBuYXN0eSBjb25zZXF1ZW5jZXMgLSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyBpbiBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBTTVBgLiBTdGFuZGFyZCBzdHVmZiwgbm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZSB1c2FnZSBvZiBgYWRkXzJtb2RgIHdpdGhpbiBgZG9faml0YC4gSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGxpa2UgdGhpczoKCmBgYGMKRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpOwpgYGAKCk9rYXksIHNvIGBhZGRfMm1vZGAgdGFrZXMgdGhyZWUgYXJndW1lbnRzOiBgYnl0ZWAsIGByMWAsIGFuZCBgcjJgLiBJbiB0aGlzIGNhc2UsIGByMWAgaXMgMCwgYW5kIGByMmAgaXMgYGRzdF9yZWdgLiBJZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHRoaXMgc2hvdWxkIGNvcnJlY3RseSBzZXQgdGhlIFIgYml0IChiaXQgMikgaW4gdGhlIFJFWCBwcmVmaXguIExvb2tpbmcgY2xvc2VyIHRoZSBtb2RybSBieXRlIGlzIGRldGVybWluZWQgYnkgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYAoKQnV0IHdhaXQuLi4gaXNuJiMzOTt0IGBhZGRfMnJlZ2AgdGFraW5nIHRoZSBgZHN0X3JlZ2AgYXMgdGhlIGBzcmNfcmVnYD8gSXQmIzM5O3MgdGltZSB0byBkb3VibGUgY2hlY2sgaG93IHRoYXQgYWxsIHBpZWNlcyB3b3JrIHRvZ2V0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBNb2RSTSBieXRlIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHR9XG4gMjgxOlx0XG4gMjgyOlx0LyogRW5jb2RlICYjMzk7ZHN0X3JlZyYjMzk7IGFuZCAmIzM5O3NyY19yZWcmIzM5OyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICYjMzk7Ynl0ZSYjMzk7ICovXG4gMjgzOlx0c3RhdGljIHU4IGFkZF8ycmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcbiAyODQ6XHR7XG4gMjg1Olx0XHRyZXR1cm4gYnl0ZSAmIzQzOyByZWcyaGV4W2RzdF9yZWddICYjNDM7IChyZWcyaGV4W3NyY19yZWddIFx1MDAzY1x1MDAzYyAzKTtcbiAyODY6XHR9XG4gMjg3Olx0XG4gMjg4Olx0LyogU29tZSAxLWJ5dGUgb3Bjb2RlcyBmb3IgYmluYXJ5IEFMVSBvcGVyYXRpb25zICovXG4gMjg5Olx0c3RhdGljIHU4IHNpbXBsZV9hbHVfb3Bjb2Rlc1tdID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY3MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlZ2lzdGVyIEFkZGl0aW9uIEluc3RydWN0aW9uKioKCk9rYXksIHNvIGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuLi4gcmlnaHQsIHRoYXQgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCBgZHN0X3JlZ2AgYWN0cyBhcyBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSB0d28tcmVnaXN0ZXIgYWRkaXRpb24uIFRoZSBzaGlmdCBieSB0aHJlZSBoaWdobGlnaHRzIHRoYXQgYGRzdF9yZWdgIGlzIGJlaW5nIHJlZmVyZW5jZWQgdXNpbmcgdGhlIGByZWdgIGZpZWxkIHdpdGhpbiB0aGUgTW9kUk0gYnl0ZS4gQ29uc2VxdWVudGx5LCB0aGlzIHRlbGxzIG1lIHRoZSBSRVggcHJlZml4JiMzOTtzIFIgYml0IGRpcmVjdGx5IGNvcnJlc3BvbmRzIHRvIHRoYXQgYHJlZ2AgZmllbGQuCgpOb3csIHJlY2FsbCB0aGF0IHRoZSBSIGJpdCByZXNpZGVzIGF0IGJpdCBwb3NpdGlvbiAyIG9mIHRoZSBSRVggYnl0ZSwgdGh1cyBoYXZpbmcgYSB2YWx1ZSBvZiA0LiBUaGVyZWZvcmUsIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAgd2lsbCBzZXQgdGhpcyBiaXQgaWYgdGhlIHRhcmdldCByZWdpc3RlciwgYGRzdF9yZWdgLCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciDigJMgSSYjMzk7bSBzZWVpbmcgdGhhdCBgZHN0X3JlZ2AgaXMgdGhlIHNlY29uZCBhcmd1bWVudCwgYHIyYCwgd2l0aGluIGBhZGRfMm1vZGAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaG93IGBhZGRfMm1vZGAgaGFuZGxlcyB0aGlzIHNjZW5hcmlvLiBBIHF1aWNrIHJldmlldyBpcyBpbiBvcmRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1NTpcdFxuIDI1NjpcdHN0YXRpYyB1OCBhZGRfMm1vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMilcbiAyNTc6XHR7XG4gMjU4Olx0XHRpZiAoaXNfZXJlZyhyMSkpXG4gMjU5Olx0XHRcdGJ5dGUgfD0gMTtcbiAyNjA6XHRcdGlmIChpc19lcmVnKHIyKSlcbiAyNjE6XHRcdFx0Ynl0ZSB8PSA0O1xuIDI2MjpcdFx0cmV0dXJuIGJ5dGU7XG4gMjYzOlx0fVxuIDI2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI1MgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCaXR3aXNlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gYHIyYCBpcyBkZWZpbml0ZWx5IHNldHRpbmcgYml0IDIsIHdoaWNoIGhhcyBhIHZhbHVlIG9mIDQuIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAmIzM5O3MgYmVoYXZpb3Igb2Ygc2V0dGluZyB0aGUgUiBiaXQgZm9yIGBkc3RfcmVnYCBzZWVtcyBjb3JyZWN0LiBNeSBjb25jZXJuIGhlcmUgc3RlbXMgZnJvbSBob3cgdGhlIHByaW9yIGNvZGUgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCB3YXMgc2V0dGluZyBiaXQgMCwgZXNzZW50aWFsbHkgdGhlIEIgYml0LiBUaGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBgci9tYCBmaWVsZCB3aXRoaW4gdGhlIE1vZFJNIGJ5dGUsIG9yIHBvdGVudGlhbGx5IHRoZSBgYmFzZWAgaW4gdGhlIFNJQiBieXRlLgoKTG9va2luZyBhdCB0aGUgTW9kUk0gYnl0ZSBgMHgwNGAsIEkgc2VlIHRoYXQgYSBTSUIgYnl0ZSBmb2xsb3dzLiBXaXRoIGAweDI1YCBhcyB0aGUgU0lCLCB0aGUgYGluZGV4YCBpcyA0IChubyBpbmRleCByZWdpc3RlcikgYW5kIGBiYXNlYCBpcyBlZmZlY3RpdmVseSA1ICh3aGljaCByZXNvbHZlcyB0byBhIDMyLWJpdCBkaXNwbGFjZW1lbnQpLiBIb3dldmVyLCB3aGVuIHRoZSBCIGJpdCBpcyBpbmFkdmVydGVudGx5IHNldCwgdGhlIGJhc2UgYmVjb21lcyAxMyAoUjEzKS4gVGhhdCB0cmFuc2Zvcm1zIHRoZSBpbnN0cnVjdGlvbiBmcm9tIHdoYXQgaXQgc2hvdWxkIGJlIHRvIGEgY29tcGxldGVseSBkaWZmZXJlbnQgb3BlcmF0aW9uLCBuYW1lbHksIGBhZGQgJmx0O2RzdCZndDssIGdzOltyMTMgJiM0MzsgJmx0O29mZiZndDtdYCBpbnN0ZWFkIG9mIGBhZGQgJmx0O2RzdCZndDssIGdzOlsmbHQ7b2ZmJmd0O11gLiBBbmQgdGhhdCYjMzk7cyBub3QgYWxsLiBCZWNhdXNlIG9mIHRoZSBSMTMgcmVnaXN0ZXIsIGl0IHdvdWxkIGFsc28gcmVzdWx0IGluIHRoZSBgZHN0YCByZWdpc3RlciBiZWluZyB0cnVuY2F0ZWQgKGUuZy4sIGlmIGl0IHdhcyBSOCwgaXQgd291bGQgYmVjb21lIFJBWCkuIFRoZSBlZmZlY3Qgd291bGQgYmUgYW4gaW5zdHJ1Y3Rpb24gbGlrZSBgYWRkIHJheCwgZ3M6W3IxMyAmIzQzOyAmbHQ7b2ZmJmd0O11gLCB3aGljaCBpcyBvYnZpb3VzbHkgaW5jb3JyZWN0LgoKVGhpcyBpcyBhIGNyaXRpY2FsIGVycm9yISBJdCYjMzk7cyBnb2luZyB0byBsZWFkIHRvIGNyYXNoZXMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24uCgpHb29kLCB0aGUgZml4IHNlZW1zIHBlcmZlY3RseSByZWFzb25hYmxlIGFuZCBjb3JyZWN0LiBJJiMzOTttIGNvbmZpZGVudCBpdCBhZGRyZXNzZXMgdGhlIHByb2JsZW0uIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBjb25maXJtIHRoaXMuIEkgdGhpbmsgSSYjMzk7dmUgZ2F0aGVyZWQgYWxsIHRoZSByZWxldmFudCBkZXRhaWxzIHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbi4gVGhpcyB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHJlZ2lzdGVyIHVzYWdlIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyB3aGVuIGV4ZWN1dGluZyBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbi4gVGhpcyB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHJlZ2lzdGVyIHVzYWdlIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyB3aGVuIGV4ZWN1dGluZyBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFdoZW4gZW1pdHRpbmcgdGhlIGBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAgaW5zdHJ1Y3Rpb24gZm9yIHBlci1DUFUgYWRkcmVzcyByZXNvbHV0aW9uLCB0aGUgSklUIGluY29ycmVjdGx5IHVzZWQgYGFkZF8xbW9kYCwgd2hpY2ggc2V0cyB0aGUgUkVYLkIgYml0IGluc3RlYWQgb2YgdGhlIFJFWC5SIGJpdCB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoZS5nLiwgUjgtUjE1KS4gVGhpcyBlbmNvZGluZyBlcnJvciBjYXVzZXMgdGhlIENQVSB0byBpbnRlcnByZXQgdGhlIGluc3RydWN0aW9uIGFzIGBhZGQgcmF4LCBnczpbcjEzICYjNDM7IFx1MDAzY29mZlx1MDAzZV1gIGluc3RlYWQgb2YgYGFkZCByOCwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gLlxuXG5FeGVjdXRpbmcgdGhpcyBtYWxmb3JtZWQgaW5zdHJ1Y3Rpb24gbGVhZHMgdG8gcmVhZGluZyBtZW1vcnkgZnJvbSBhIHNlbWktYXJiaXRyYXJ5IHBlci1DUFUgb2Zmc2V0IChjb250cm9sbGVkIGJ5IGByMTNgLCB3aGljaCBtYXBzIHRvIGBCUEZfUkVHXzdgKSBhbmQgY29ycnVwdGluZyB0aGUgYHJheGAgKGBCUEZfUkVHXzBgKSByZWdpc3Rlci4gVGhpcyByZXN1bHRzIGluIGVpdGhlciBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIChjYXVzaW5nIGEgcGFnZSBmYXVsdCBvciB0cmlnZ2VyaW5nIEtBU0FOKSBvciBhbiBpbmZvLWxlYWsgb2YgYXJiaXRyYXJ5IHBlci1DUFUgbWVtb3J5LiBcblxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiwgdXNhZ2UsIG9yIGxlYWtpbmcgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCBpcyBhIHB1cmUgSklUIG1pc2NvbXBpbGF0aW9uIHRoYXQgbGVhZHMgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIHJlZ2lzdGVyIGNvcnJ1cHRpb24uIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJlc3VsdGluZyBwYWdlIGZhdWx0cyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjBiOWQxNjg4ZTU5YjZjMGI3NDBhZjhlNzMxNjgxYTlmYmNkMzUyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE3OjM5OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGQ5MjA3NzJhZjdkNWYuLjFhOWZiNTMwYWRjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTE5MzUsNyAmIzQzOzE5MzUsNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKgogCQkJCUVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJCQkvKiBhZGQgJmx0O2RzdCZndDssIGdzOlsmbHQ7b2ZmJmd0O10gKi8KLQkJCQlFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7CiYjNDM7CQkJCUVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTsKIAkJCQlFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7CiAJCQkJRU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKSZhbXA7dGhpc19jcHVfb2ZmLCA0KTsKICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgSklUIENvbXBpbGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgYSByZXBsYWNlbWVudCBvZiBgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZylgIHdpdGggYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZC4gVGhpcyBpcyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIsIHNvIGl0JiMzOTtzIGFsbCBhYm91dCBob3cgd2UgZ2VuZXJhdGUgdGhlIG1hY2hpbmUgY29kZS4KCkkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcuIFRoZXNlIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgZnVuY3Rpb25zIG9yIG1hY3JvcywgdGhleSYjMzk7cmUgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIHJpZ2h0IHg4NiBpbnN0cnVjdGlvbiBwcmVmaXhlcyDigJMgaW4gdGhpcyBjYXNlLCB0aGUgUkVYIHByZWZpeC4gQW4gZW5jb2RpbmcgZXJyb3IgaGVyZSBjb3VsZCBhYnNvbHV0ZWx5IGxlYWQgdG8gaW5jb3JyZWN0IGluc3RydWN0aW9ucyBiZWluZyBleGVjdXRlZCwgYW5kIHRoYXQmIzM5O3MgYSBwcm9ibGVtLiBDcmFzaGVzIGFyZSBhIGxpa2VseSBvdXRjb21lIG9mIGluY29ycmVjdCBpbnN0cnVjdGlvbiBlbmNvZGluZy4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCB0aGlzIGRvZXNuJiMzOTt0ICpuZWNlc3NhcmlseSogbWVhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbiBwbGF5IGhlcmUuIFRoZSBmaXggY291bGQgc2ltcGx5IG1lYW4gaXQmIzM5O3MgYW4gaW5zdHJ1Y3Rpb24gYmVpbmcgZW1pdHRlZCBpbmNvcnJlY3RseS4KCkkgbmVlZCB0byBjb25maXJtIGJ5IGRpZ2dpbmcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBhZGRyZXNzaW5nIG1vZGUgaXMgYmVpbmcgdXNlZCBhbmQgd2h5IHRoaXMgY2hhbmdlIGlzIHJlcXVpcmVkLCBiZWNhdXNlIHRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgdGhlcmUgd2FzIGEgc3VidGxlIGJ1ZyBvciBpbnN0cnVjdGlvbiBpbmNvbXBhdGliaWxpdHkgdGhhdCB0aGlzIGNoYW5nZSBmaXhlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkXzFtb2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI0Mz1zdGF0aWMgYm9vbCBpc19heHJlZyh1MzIgcmVnKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDgtLyogQWRkIG1vZGlmaWVycyBpZiAmIzM5O3JlZyYjMzk7IG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQ5OnN0YXRpYyB1OCBhZGRfMW1vZCh1OCBieXRlLCB1MzIgcmVnKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1MC17XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTkzOD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW0zMih1OCAqKnBwcm9nLCBib29sIHNpZ25fcHJvcGFnYXRlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NDktXHRcdC8qICYjMzk7bW92ICVyYXgsIGltbTMyJiMzOTsgc2lnbiBleHRlbmRzIGltbTMyICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTUwOlx0XHRiMSA9IGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk1MS1cdFx0YjIgPSAweEM3O1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NzEtXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NzI6XHRcdEVNSVQxKGFkZF8xbW9kKDB4NDAsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NzMtXHRFTUlUMV9vZmYzMihhZGRfMXJlZygweEI4LCBkc3RfcmVnKSwgaW1tMzIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz05Nzg9c3RhdGljIHZvaWQgZW1pdF9tb3ZfaW1tNjQodTggKipwcHJvZywgdTMyIGRzdF9yZWcsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk5NS1cdFx0LyogbW92YWJzcSByYXgsIGltbTY0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTk2Olx0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgYWRkXzFyZWcoMHhCOCwgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk5Ny1cdFx0RU1JVChpbW0zMl9sbywgNCk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTExMDI9c3RhdGljIHZvaWQgbWF5YmVfZW1pdF8xbW9kKHU4ICoqcHByb2csIHUzMiByZWcsIGJvb2wgaXM2NClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEwNi1cdGlmIChpczY0KVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMDc6XHRcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIHJlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMDgtXHRlbHNlIGlmIChpc19lcmVnKHJlZykpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEwOTpcdFx0RU1JVDEoYWRkXzFtb2QoMHg0MCwgcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTExMC1cdCpwcHJvZyA9IHByb2c7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjIxLVx0XHRcdFx0LyogRW1pdCAmIzM5O2Jzd2FwIHJheCYjMzk7IHRvIHN3YXAgOCBieXRlcyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMjI6XHRcdFx0XHRFTUlUMyhhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHgwRixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjIzLVx0XHRcdFx0ICAgICAgYWRkXzFyZWcoMHhDOCwgZHN0X3JlZykpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjgyLVx0XHRcdH1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjgzOlx0XHRcdEVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweEM3KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjg0LVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODMzPXN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1Zilcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg0Mi1cdFx0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzg0MzpcdFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XHQvKiBjbXAgcmR4LGZ1bmMgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODQ0LVx0XHRpZiAoIWlzX3NpbW0zMihwcm9nc1thXSkpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NjMtXHRwaXZvdCA9IChiIC0gYSkgLyAyO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NjQ6XHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcdFx0LyogY21wIHJkeCxmdW5jICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg2NS1cdGlmICghaXNfc2ltbTMyKHByb2dzW2EgJiM0MzsgcGl2b3RdKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFzc2VtYmx5IENvZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY2hhbmdlIHRvIGBFTUlUMmAgY2F0Y2hlcyBteSBleWUuIFdlJiMzOTt2ZSBnb25lIGZyb20gdXNpbmcgYGFkZF8xbW9kYCB0byBgYWRkXzJtb2RgLiBUaGUgaW5pdGlhbCBjb2RlIHVzZWQgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYC4gSXQgc2V0cyB0aGUgUkVYLkIgYml0IGlmIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gQnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbiBpcyBgYWRkICZsdDtkc3QmZ3Q7LCBnczpbJmx0O29mZiZndDtdYC4gQW5kIHRoZW4sIHRoZSBuZXh0IGxpbmUgYEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtgLi4uIFRoYXQgbWFrZXMgbWUgdGhpbmsgYSBiaXQuCgpUaGUgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdXBkYXRlIHRoZSBjb2RlIHRvIGFsbG93IGZvciBleHRlbmRlZCByZWdpc3RlcnMuIFRoZSBmaXJzdCBjaGFuZ2UsIG5vdyB1c2luZyBgYWRkXzJtb2RgLCBzdWdnZXN0cyB0aGUgaW50ZW50IHRvIGRlYWwgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMuIEkga25vdyBgMHgwM2AgaXMgdGhlIGBhZGRgIG9wY29kZS4gU28sIHRoZSBSRVggcHJlZml4IGhhcyB0byBnbyAqYmVmb3JlKiB0aGUgYDB4MDNgIG9wY29kZS4gQW5kIHRoZSBwcmVmaXggaXMgYDB4NDhgIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBSRVguVyBwcmVmaXguIEJ1dCBpZiB3ZSBhcmUgZXh0ZW5kaW5nIHRoZSByZWdpc3Rlciwgc3BlY2lmaWNhbGx5IGBkc3RfcmVnYCwgdGhlIFJFWCBwcmVmaXggKnNob3VsZCogYmUgc2V0dGluZyB0aGUgUkVYLlIgYml0LiBUaGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgZW5jb2RlZCBpbiB0aGUgTW9kUi9NIGJ5dGUuIEl0IGlzIGVuY29kZWQgaW4gdGhlIGByZWdgIGZpZWxkIChiaXRzIDMtNSksICpub3QqIHRoZSBgci9tYCBmaWVsZCAoYml0cyAwLTIpLiBUaGlzIGluZGljYXRlcyB0aGUgcHJvYmxlbS4KCk5vdywgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBzZWVtcyB0byBiZSB0aGUgY3J1Y2lhbCBiaXQuIEl0IGxvb2tzIGxpa2UgaXQgKnNob3VsZCogYmUgcHV0dGluZyBgZHN0X3JlZ2AgaW4gdGhlIGByZWdgIGZpZWxkIG9mIHRoZSBNb2RSL00gYnl0ZSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byB2ZXJpZnkgZXhhY3RseSBob3cgYGFkZF8ycmVnYCBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSByZWdpc3RlciBlbmNvZGluZyB0byBjb25maXJtIHRoYXQgdGhlIHBhdGNoIGlzIGNvcnJlY3RseSBlbmNvZGluZyB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGByZWdgIGZpZWxkIGFuZCBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBSRVggYml0cy4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGhhdmUgYSBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF8ycmVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMjY9c3RhdGljIGJvb2wgaXNfdWltbTMyKHU2NCB2YWx1ZSlcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM0LVx0XHRpZiAoRFNUICE9IFNSQylcdFx0XHRcdFx0XHRcdFx0IFxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTM1Olx0XHRcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIERTVCwgU1JDKSwgMHg4OSwgYWRkXzJyZWcoMHhDMCwgRFNULCBTUkMpKTsgXFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzYtXHR9IHdoaWxlICgwKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0yNzc9c3RhdGljIHU4IGFkZF8xcmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yODItLyogRW5jb2RlICYjMzk7ZHN0X3JlZyYjMzk7IGFuZCAmIzM5O3NyY19yZWcmIzM5OyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICYjMzk7Ynl0ZSYjMzk7ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjgzOnN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjg0LXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk2NS1cdFx0YjMgPSAweEMwO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk2NjpcdFx0RU1JVDIoYjIsIGFkZF8ycmVnKGIzLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTY3LVx0XHRnb3RvIGRvbmU7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwMDQ9c3RhdGljIHZvaWQgZW1pdF9tb3ZfcmVnKHU4ICoqcHByb2csIGJvb2wgaXM2NCwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDE0LVx0XHRcdEVNSVQxKGFkZF8ybW9kKDB4NDAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDE1Olx0XHRFTUlUMigweDg5LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAxNi1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTAyMT1zdGF0aWMgdm9pZCBlbWl0X21vdnN4X3JlZyh1OCAqKnBwcm9nLCBpbnQgbnVtX2JpdHMsIGJvb2wgaXM2NCwgdTMyIGRzdF9yZWcsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjktXHRcdFx0RU1JVDQoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MGYsIDB4YmUsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAzMDpcdFx0XHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMS1cdFx0ZWxzZSBpZiAobnVtX2JpdHMgPT0gMTYpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMi1cdFx0XHRFTUlUNChhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwZiwgMHhiZixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDMzOlx0XHRcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDM0LVx0XHRlbHNlIGlmIChudW1fYml0cyA9PSAzMilcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDM1LVx0XHRcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDYzLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzY6XHRcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzctXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDQwLVx0XHRcdEVNSVQ0KGFkZF8ybW9kKDB4NDAsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBmLCAweGJlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNDE6XHRcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDItXHRcdH0gZWxzZSBpZiAobnVtX2JpdHMgPT0gMTYpIHtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0NS1cdFx0XHRFTUlUMyhhZGRfMm1vZCgweDBmLCBzcmNfcmVnLCBkc3RfcmVnKSwgMHhiZixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDQ2Olx0XHRcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDQ3LVx0XHR9XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwNTQ9c3RhdGljIHZvaWQgZW1pdF9pbnNuX3N1ZmZpeCh1OCAqKnBwcm9nLCB1MzIgcHRyX3JlZywgdTMyIHZhbF9yZWcsIGludCBvZmYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNjQtXHRcdCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNjU6XHRcdEVNSVQyKGFkZF8ycmVnKDB4NDAsIHB0cl9yZWcsIHZhbF9yZWcpLCBvZmYpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNjYtXHR9IGVsc2Uge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNjctXHRcdC8qIDQtYnl0ZSBzaWduZWQgZGlzcGxhY2VtZW50ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA2ODpcdFx0RU1JVDFfb2ZmMzIoYWRkXzJyZWcoMHg4MCwgcHRyX3JlZywgdmFsX3JlZyksIG9mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA2OS1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTA3Mz1zdGF0aWMgdm9pZCBlbWl0X2luc25fc3VmZml4X1NJQih1OCAqKnBwcm9nLCB1MzIgcHRyX3JlZywgdTMyIHZhbF9yZWcsIHUzMiBpbmRleF9yZWcsIGludCBvZmYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNzctXHRpZiAoaXNfaW1tOChvZmYpKSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA3ODpcdFx0RU1JVDMoYWRkXzJyZWcoMHg0NCwgQlBGX1JFR18wLCB2YWxfcmVnKSwgYWRkXzJyZWcoMCwgcHRyX3JlZywgaW5kZXhfcmVnKSAvKiBTSUIgKi8sIG9mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA3OS1cdH0gZWxzZSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA4MDpcdFx0RU1JVDJfb2ZmMzIoYWRkXzJyZWcoMHg4NCwgQlBGX1JFR18wLCB2YWxfcmVnKSwgYWRkXzJyZWcoMCwgcHRyX3JlZywgaW5kZXhfcmVnKSAvKiBTSUIgKi8sIG9mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA4MS1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTYwMj1zdGF0aWMgdm9pZCBlbWl0X3NoaWZ0eCh1OCAqKnBwcm9nLCB1MzIgZHN0X3JlZywgdTggc3JjX3JlZywgYm9vbCBpczY0LCB1OCBvcClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYwOC1cdGVtaXRfM3ZleChcdTAwMjZwcm9nLCByLCBmYWxzZSwgciwgbSwgaXM2NCwgc3JjX3JlZywgZmFsc2UsIG9wKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjA5Olx0RU1JVDIoMHhmNywgYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MTAtXHQqcHByb2cgPSBwcm9nO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjkxPXN0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTYtXHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgcmVnLCByZWcsIGZhbHNlKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzE3Olx0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTcxOC1cdFx0XHRFTUlUMihYODZfSkUsIDMpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzIxLVx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzIyOlx0XHRFTUlUMigweDAxLCBhZGRfMnJlZygweEMwLCByZWcsIFg4Nl9SRUdfUjEyKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTcyMy1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE4OTctXHRcdFx0YjIgPSBzaW1wbGVfYWx1X29wY29kZXNbQlBGX09QKGluc24tXHUwMDNlY29kZSldO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE4OTg6XHRcdFx0RU1JVDIoYjIsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xODk5LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTI1LVx0XHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgZHN0X3JlZywgZHN0X3JlZywgZmFsc2UpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MjY6XHRcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkyNy1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMC1cdFx0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIEFVWF9SRUcsIGRzdF9yZWcsIHRydWUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MzE6XHRcdFx0XHRFTUlUMygweDBGLCAweDQ0LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMi1cdFx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM4LVx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5Mzk6XHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTk0MC1cdFx0XHRcdEVNSVQoKHUzMikodW5zaWduZWQgbG9uZylcdTAwMjZ0aGlzX2NwdV9vZmYsIDQpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMTAwLVx0XHRcdFx0LyogaW11bCBkc3RfcmVnLCBkc3RfcmVnLCBpbW04ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMTpcdFx0XHRcdEVNSVQzKDB4NkIsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDItXHRcdFx0XHQgICAgICBpbW0zMik7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDUtXHRcdFx0XHRFTUlUMl9vZmYzMigweDY5LFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDY6XHRcdFx0XHRcdCAgICBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMTA3LVx0XHRcdFx0XHQgICAgaW1tMzIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMTE1LVx0XHRcdC8qIGltdWwgZHN0X3JlZywgc3JjX3JlZyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIxMTY6XHRcdFx0RU1JVDMoMHgwRiwgMHhBRiwgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIxMTctXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMDktXHRcdFx0XHRcdEVNSVQyKDB4MEYsIDB4QjcpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMTA6XHRcdFx0XHRFTUlUMShhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIxMS1cdFx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjM4LVx0XHRcdFx0XHRFTUlUMigweDBGLCAweEI3KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjM5Olx0XHRcdFx0RU1JVDEoYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyNDAtXHRcdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI0NC1cdFx0XHRcdFx0RU1JVDEoMHg0NSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI0NTpcdFx0XHRcdEVNSVQyKDB4ODksIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjQ2LVx0XHRcdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTIyODU9c3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ3Ni1cdFx0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIEFVWF9SRUcsIEJQRl9SRUdfQVgsIHRydWUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0Nzc6XHRcdFx0XHRFTUlUMigweDI5LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBCUEZfUkVHX0FYKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ3OC1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4NC1cdFx0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIEFVWF9SRUcsIEJQRl9SRUdfQVgsIHRydWUpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0ODU6XHRcdFx0XHRFTUlUMigweDM5LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBCUEZfUkVHX0FYKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4Ni1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU5MS1cdFx0XHRcdEVNSVQyKHNpbXBsZV9hbHVfb3Bjb2Rlc1tCUEZfT1AoaW5zbi1cdTAwM2VpbW0pXSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNTkyOlx0XHRcdFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgcmVhbF9zcmNfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU5My1cdFx0XHRcdC8qIEF0dGVtcHQgdG8gc3dhcCBpbiBuZXcgdmFsdWUgKi9cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjcxMy1cdFx0XHRcdCAgICAgICBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNzE0Olx0XHRcdEVNSVQyKDB4MzksIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNzE1LVx0XHRcdGdvdG8gZW1pdF9jb25kX2ptcDtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjcyMS1cdFx0XHRcdCAgICAgICBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNzIyOlx0XHRcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNzIzLVx0XHRcdGdvdG8gZW1pdF9jb25kX2ptcDtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjc1Ni1cdFx0XHRcdFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9KTVApO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI3NTc6XHRcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjc1OC1cdFx0XHRcdGdvdG8gZW1pdF9jb25kX2ptcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyMwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyB0aGUgSW5zdHJ1Y3Rpb246IGBhZGQgJmx0O2RzdCZndDssIGdzOlsmbHQ7b2ZmJmd0O11gKioKCk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaXMgYGFkZCAmbHQ7ZHN0Jmd0OywgZ3M6WyZsdDtvZmYmZ3Q7XWAuIFRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgZ2l2ZXMgdXMgdGhlIGJhc2ljIGFzc2VtYmx5LCBidXQgSSBuZWVkIHRvIGJyZWFrIGRvd24gKmV4YWN0bHkqIGhvdyB0aGlzIGlzIGJlaW5nIHRyYW5zbGF0ZWQgaW50byBtYWNoaW5lIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgZW1pdHMgYDB4NjVgIHdoaWNoIEkga25vdyByZXByZXNlbnRzIHRoZSBgZ3M6YCBwcmVmaXguIFRoZW4sIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgZ29lcyBuZXh0LiBUaGUgbmV4dCBsaW5lIGVtaXRzIGBFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7YCBIbW0sIGludGVyZXN0aW5nLiBJIHJlY29nbml6ZSB0aGUgYDB4MDNgIGFzIHBhcnQgb2YgdGhlIGBhZGRgIG9wY29kZSwgcmlnaHQ/CgpBbHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyB3aGVyZSB0aGUgTW9kUi9NIGJ5dGUgYW5kIG1heWJlIGEgU0lCIGJ5dGUgY29tZSBpbnRvIHBsYXkuICpBaGEhKiBUaGF0IGAweDA0YCBpbiBgYWRkXzJyZWdgIGlzIHRoZSBrZXkuIFRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIGByL21gIGZpZWxkICh0aGUgYm90dG9tIDMgYml0cykgd2lsbCBiZSBzZXQgdG8gYDB4MDRgLCBtZWFuaW5nIGEgU0lCIGJ5dGUgd2lsbCBmb2xsb3cuIEFuZCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IGBkc3RfcmVnYCBpcyBiZWluZyBwdXQgaW50byB0aGUgYHJlZ2AgZmllbGQgKGJpdHMgMy01KSBvZiB0aGUgTW9kUi9NIGJ5dGUuIE5vdywgaG93IGRvZXMgdGhhdCB3b3JrIG91dD8gVGhhdCBtZWFucyB0aGUgTW9kUi9NIGJ5dGUgaXRzZWxmIHdpbGwgYmUgZXNzZW50aWFsbHkgYDB4MDQgfCAoZHN0X3JlZyAmbHQ7Jmx0OyAzKWAuIFdlIGFsc28gc2VlIHRoZSBTSUIgYnl0ZSBlbWl0dGVkIGFzIGAweDI1YCAobm8gaW5kZXgsIG5vIGJhc2UsIGRpc3AzMikuIFNvIHRoZSBgci9tYCBpcyBgMHgwNGAgd2l0aCBhIGRpc3AzMiBhbmQgdGhlIHJlZyBmaWVsZCBpcyB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIuCgpOb3csIHdhaXQgYSBzZWNvbmQuLi4gYGFkZF8ycmVnKGJ5dGUsIGRzdF9yZWcsIHNyY19yZWcpYCAtIHRoaXMgYWxzbyBlbmNvZGVzIHRoZSBgc3JjX3JlZ2AgYnV0IEkgb25seSBzZWUgYGRzdF9yZWdgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhZGRfMnJlZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSBJJiMzOTttIGNsZWFyIG9uIGhvdyB0aGUgYHNyY19yZWdgIGlzIGdldHRpbmcgaGFuZGxlZC4gTGV0JiMzOTtzIGdvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyB1OCBhZGRfMnJlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mjc3PXN0YXRpYyB1OCBhZGRfMXJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjgyLS8qIEVuY29kZSAmIzM5O2RzdF9yZWcmIzM5OyBhbmQgJiMzOTtzcmNfcmVnJiMzOTsgcmVnaXN0ZXJzIGludG8geDg2LTY0IG9wY29kZSAmIzM5O2J5dGUmIzM5OyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI4MzpzdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzM2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYWRkXzJyZWdgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBlYWNoIGxpbmUsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCByZXNvdXJjZSB1c2FnZSwgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBncmFzcCB0aGUgY29yZSBsb2dpYzogd2hhdCByZWdpc3RlcnMgYXJlIGludm9sdmVkLCB3aGF0IHRoZSBvcGVyYXRpb25zIGFyZSwgYW5kIHRoZSBleHBlY3RlZCBvdXRjb21lLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBwaXRmYWxscyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLiBLbm93aW5nIG15IGZpZWxkLCBJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGFmZmVjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGV0aGVyIGFueSBlZGdlIGNhc2VzIGFyZSBoYW5kbGVkLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvZGUgd29ya3MgZWZmaWNpZW50bHkgYW5kIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHQvKiBFbmNvZGUgJiMzOTtkc3RfcmVnJiMzOTsgYW5kICYjMzk7c3JjX3JlZyYjMzk7IHJlZ2lzdGVycyBpbnRvIHg4Ni02NCBvcGNvZGUgJiMzOTtieXRlJiMzOTsgKi9cbiAyODM6XHRzdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuIDI4NDpcdHtcbiAyODU6XHRcdHJldHVybiBieXRlICYjNDM7IHJlZzJoZXhbZHN0X3JlZ10gJiM0MzsgKHJlZzJoZXhbc3JjX3JlZ10gXHUwMDNjXHUwMDNjIDMpO1xuIDI4NjpcdH1cbiAyODc6XHRcbiAyODg6XHQvKiBTb21lIDEtYnl0ZSBvcGNvZGVzIGZvciBiaW5hcnkgQUxVIG9wZXJhdGlvbnMgKi9cbiAyODk6XHRzdGF0aWMgdTggc2ltcGxlX2FsdV9vcGNvZGVzW10gPSB7XG4gMjkwOlx0XHRbQlBGX0FERF0gPSAweDAxLFxuIDI5MTpcdFx0W0JQRl9TVUJdID0gMHgyOSxcbiAyOTI6XHRcdFtCUEZfQU5EXSA9IDB4MjEsXG4gMjkzOlx0XHRbQlBGX09SXSA9IDB4MDksXG4gMjk0Olx0XHRbQlBGX1hPUl0gPSAweDMxLFxuIDI5NTpcdFx0W0JQRl9MU0hdID0gMHhFMCxcbiAyOTY6XHRcdFtCUEZfUlNIXSA9IDB4RTgsXG4gMjk3Olx0XHRbQlBGX0FSU0hdID0gMHhGOCxcbiAyOTg6XHR9O1xuIDI5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMxMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgYGFkZF8ycmVnYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBhZGRfMnJlZyhieXRlLCBkc3RfcmVnLCBzcmNfcmVnKWAgZnVuY3Rpb24uIFRoZSBjb3JlIGNhbGN1bGF0aW9uIGlzOiBgYnl0ZSAmIzQzOyByZWcyaGV4W2RzdF9yZWddICYjNDM7IChyZWcyaGV4W3NyY19yZWddICZsdDsmbHQ7IDMpYC4gU28sIGlmIEkgY2FsbCBpdCB3aXRoLCBzYXksIGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAsIHRoYXQgYmVjb21lcyBgMHgwNCAmIzQzOyByZWcyaGV4WzBdICYjNDM7IChyZWcyaGV4W2RzdF9yZWddICZsdDsmbHQ7IDMpYC4gUmlnaHQsIGAwYCByZXByZXNlbnRzIGBCUEZfUkVHXzBgLCB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCBtYXBzIGRpcmVjdGx5IHRvIHRoZSBgUkFYYCByZWdpc3Rlci4KClRoZXJlZm9yZSwgd2UgaGF2ZSBgc3JjX3JlZ2AgYXMgYGRzdF9yZWdgLCB3aXRoIHRoZSB2YWx1ZSBsZWZ0IHNoaWZ0ZWQgYnkgdGhyZWUgKGl0cyB2YWx1ZSBpcyBsb2NhdGVkIGluIHRoZSBNb2RSL00gYnl0ZSBgcmVnYCBmaWVsZCkuIEFuZCB0aGUgTW9kUi9NIGJ5dGUgaGFzIGAwYCBpbiB0aGUgYHIvbWAgZmllbGQuCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciB0aGUgUkVYIHByZWZpeC4gVGhhdCYjMzk7cyBgMHg0OCB8IFJFWC5SIHwgUkVYLkJgLiBJZiB0aGUgYGRzdF9yZWdgIGlzIGluIHRoZSBgcmVnYCBmaWVsZCwgdGhlbiBJIG11c3Qgc2V0IFJFWC5SIGlmIGBkc3RfcmVnYCByZXByZXNlbnRzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGUgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCBmdW5jdGlvbiBzZXRzIFJFWC5CIGlmIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciBhcyB3ZWxsLiBUaW1lIHRvIGdvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBmdW5jdGlvbnMgdG8gY29uZmlybSB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdHJldHVybiByZWcgPT0gQlBGX1JFR18wO1xuIDI0NjpcdH1cbiAyNDc6XHRcbiAyNDg6XHQvKiBBZGQgbW9kaWZpZXJzIGlmICYjMzk7cmVnJiMzOTsgbWFwcyB0byB4ODYtNjQgcmVnaXN0ZXJzIFI4Li5SMTUgKi9cbiAyNDk6XHRzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcbiAyNTA6XHR7XG4gMjUxOlx0XHRpZiAoaXNfZXJlZyhyZWcpKVxuIDI1MjpcdFx0XHRieXRlIHw9IDE7XG4gMjUzOlx0XHRyZXR1cm4gYnl0ZTtcbiAyNTQ6XHR9XG4gMjU1Olx0XG4gMjU2Olx0c3RhdGljIHU4IGFkZF8ybW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyKVxuIDI1NzpcdHtcbiAyNTg6XHRcdGlmIChpc19lcmVnKHIxKSlcbiAyNTk6XHRcdFx0Ynl0ZSB8PSAxO1xuIDI2MDpcdFx0aWYgKGlzX2VyZWcocjIpKVxuIDI2MTpcdFx0XHRieXRlIHw9IDQ7XG4gMjYyOlx0XHRyZXR1cm4gYnl0ZTtcbiAyNjM6XHR9XG4gMjY0Olx0XG4gMjY1Olx0c3RhdGljIHU4IGFkZF8zbW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyLCB1MzIgaW5kZXgpXG4gMjY2Olx0e1xuIDI2NzpcdFx0aWYgKGlzX2VyZWcocjEpKVxuIDI2ODpcdFx0XHRieXRlIHw9IDE7XG4gMjY5Olx0XHRpZiAoaXNfZXJlZyhpbmRleCkpXG4gMjcwOlx0XHRcdGJ5dGUgfD0gMjtcbiAyNzE6XHRcdGlmIChpc19lcmVnKHIyKSlcbiAyNzI6XHRcdFx0Ynl0ZSB8PSA0O1xuIDI3MzpcdFx0cmV0dXJuIGJ5dGU7XG4gMjc0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1OQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDYzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFN1YnRsZSB4ODYtNjQgQlBGIEpJVCBCdWcqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgeDg2LTY0IEJQRiBKSVQgY29kZSwgYW5kIEkmIzM5O3ZlIHN0dW1ibGVkIHVwb24gd2hhdCBsb29rcyBsaWtlIGEgbmFzdHkgYnVnLiBJdCBzZWVtcyBsaWtlIHRoZSBjb21waWxlciBpcyBnZW5lcmF0aW5nIGluY29ycmVjdCBpbnN0cnVjdGlvbnMsIGFuZCBpdCBoYXMgdG8gZG8gd2l0aCBleHRlbmRlZCByZWdpc3RlcnMuCgpTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSBSRVggcHJlZml4IGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhlIGZ1bmN0aW9uIGBhZGRfMW1vZChieXRlLCByZWcpYCBpcyBzZXR0aW5nIHRoZSBSRVguQiBiaXQgKGJpdCAwKSBiYXNlZCBvbiB3aGV0aGVyIGByZWdgIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChsaWtlIFI4LVIxNSkuIFRoZSBmdW5jdGlvbiBgYWRkXzJtb2QoYnl0ZSwgcjEsIHIyKWAgc2V0cyBSRVguQiBiYXNlZCBvbiBgcjFgIGFuZCBSRVguUiAoYml0IDIpIGJhc2VkIG9uIGByMmAuCgpUaGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0OiBgRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpO2Agc2hvdWxkIHNldCBSRVguQiBpZiBgZHN0X3JlZ2AgaXMgZXh0ZW5kZWQuIEJ1dCB0aGUgcHJvYmxlbSBsaWVzIGRlZXBlciBpbiBob3cgYGRzdF9yZWdgIGlzICphY3R1YWxseSogdXNlZC4gYGRzdF9yZWdgIGlzIHBhc3NlZCBhcyBgc3JjX3JlZ2AgdG8gYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYC4gSXQmIzM5O3MgYmVpbmcgcGxhY2VkIGluIHRoZSBgcmVnYCBmaWVsZCAoYml0cyAzLTUpIG9mIHRoZSBNb2RSL00gYnl0ZS4gVGhpcyBgcmVnYCBmaWVsZCAqc2hvdWxkKiBjb3JyZXNwb25kIHRvIFJFWC5SLCBidXQgdGhlIGBhZGRfMW1vZGAgZnVuY3Rpb24gaXMgc2V0dGluZyBSRVguQiBpbnN0ZWFkISBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgZXJyb3IuCgpTbywgaWYgYGRzdF9yZWdgICppcyogYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHNheSBSOCwgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBhIFJFWC5CIHByZWZpeC4gQmVjYXVzZSBSRVguQiBpcyBzZXQsIHRoaXMgaXMgYXBwbGllZCB0byB0aGUgYHIvbWAgZmllbGQsIHdoaWNoIGluIHRoaXMgaW5zdGFuY2UgaXMgYDB4MDRgIChTSUIgZm9sbG93cyksIGFuZCB0aGUgU0lCIGJ5dGUgaXMgYDB4MjVgIChiYXNlID0gNSkuIE5vdywgaWYgUkVYLkIgaXMgc2V0LCB0aGUgYmFzZSBiZWNvbWVzIFIxMywgbm90ICYjMzQ7bm8gYmFzZSYjMzQ7LiBXaGF0IGlzIGJlaW5nIG1pc3NlZCBpcyBzZXR0aW5nIFJFWC5SLiBUaGUgYHJlZ2AgZmllbGQsIHdoaWNoICpzaG91bGQqIHJlcHJlc2VudCBSOCwgaXMgaW5zdGVhZCBpbnRlcnByZXRlZCBhcyBSQVggKGJlY2F1c2UgUkVYLlIgaXNuJiMzOTt0IHNldCkuCgpUaGUgcmVzdWx0aW5nIGluc3RydWN0aW9uIGlzIGRpc2FzdHJvdXMuIEluc3RlYWQgb2YgYGFkZCByOCwgZ3M6W2Rpc3AzMl1gLCBpdCYjMzk7cyBlbWl0dGluZyBgYWRkIHJheCwgZ3M6W3IxMyAmIzQzOyBkaXNwMzJdYC4gVGhhdCBpcyBjb21wbGV0ZWx5IHdyb25nLiBXZSBhcmUgcmVhZGluZyBmcm9tIG1lbW9yeSBsb2NhdGlvbiBgZ3M6W3IxMyAmIzQzOyBkaXNwMzJdYCBhbmQgYWRkaW5nIHRoYXQgdmFsdWUgdG8gYHJheGAsIGluc3RlYWQgb2YgcmVhZGluZyBmcm9tIGBnczpbZGlzcDMyXWAgYW5kIGFkZGluZyBpdCB0byBgcjhgLgoKVGhpcyBsZWFkcyB0byBhIHBvdGVudGlhbCBjcmFzaCBpZiB0aGUgbWVtb3J5IGFkZHJlc3MgYGdzOltyMTMgJiM0MzsgZGlzcDMyXWAgaXMgaW52YWxpZCwgYmVjYXVzZSBpdCB3aWxsIHJlc3VsdCBpbiBhIHBhZ2UgZmF1bHQuIE90aGVyd2lzZSwgaXQgd2lsbCByZWFkIG1lbW9yeSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdCBgcmF4YC4gVGhpcyBpcyBhIGNsZWFyIGJ1ZyBpbiB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgeDg2LTY0LgoKQ3J1Y2lhbGx5LCB0aGlzIGlzbiYjMzk7dCBhYm91dCAqdW5pbml0aWFsaXplZCogbWVtb3J5IHVzYWdlLiBJdCYjMzk7cyBhYm91dCBnZW5lcmF0aW5nIGEgZmF1bHR5IGluc3RydWN0aW9uIHRoYXQgcmVhZHMgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjb3VsZCAqbGVhZCogdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIGRhdGEgb3IsIGF0IHdvcnN0LCBhbiBhY2Nlc3MgdmlvbGF0aW9uLiBUaGUgcm9vdCBjYXVzZSBpcyBhIHNpbXBsZSBiaXQgZmxpcCBpbiB0aGUgUkVYIHByZWZpeCBnZW5lcmF0aW9uLiBJZiB0aGUgQlBGIHByb2dyYW0gdXNlcyBhbiBleHRlbmRlZCByZWdpc3RlciBhcyBgZHN0X3JlZ2AgaW4gdGhpcyBzcGVjaWZpYyBgYWRkICZsdDtkc3QmZ3Q7LCBnczpbJmx0O29mZiZndDtdYCBpbnN0cnVjdGlvbiwgdGhlIEpJVCBlbWl0cyB0aGUgd3JvbmcgaW5zdHJ1Y3Rpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTIwOlx0XG4xOTIxOlx0XHRcdFx0XHQvKiB4b3IgcjExLCByMTEgKi9cbjE5MjI6XHRcdFx0XHRcdEVNSVQzKDB4NEQsIDB4MzEsIDB4REIpO1xuMTkyMzpcdFxuMTkyNDpcdFx0XHRcdFx0LyogdGVzdCBkc3RfcmVnMzIsIGRzdF9yZWczMjsgY2hlY2sgaWYgbG93ZXIgMzItYml0IGFyZSB6ZXJvICovXG4xOTI1Olx0XHRcdFx0XHRtYXliZV9lbWl0X21vZChcdTAwMjZwcm9nLCBkc3RfcmVnLCBkc3RfcmVnLCBmYWxzZSk7XG4xOTI2Olx0XHRcdFx0XHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XG4xOTI3Olx0XG4xOTI4Olx0XHRcdFx0XHQvKiBjbW92ZSByMTEsIGRzdF9yZWc7IGlmIHNvLCBzZXQgZHN0X3JlZyB0byB6ZXJvICovXG4xOTI5Olx0XHRcdFx0XHQvKiBXQVJOSU5HOiBJbnRlbCBzd2FwcGVkIHNyYy9kc3QgcmVnaXN0ZXIgZW5jb2RpbmcgaW4gQ01PVmNjICEhISAqL1xuMTkzMDpcdFx0XHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgQVVYX1JFRywgZHN0X3JlZywgdHJ1ZSk7XG4xOTMxOlx0XHRcdFx0XHRFTUlUMygweDBGLCAweDQ0LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBkc3RfcmVnKSk7XG4xOTMyOlx0XHRcdFx0XHRicmVhaztcbjE5MzM6XHRcdFx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG4xOTM0Olx0XHRcdFx0XHQvKiBtb3YgXHUwMDNjZHN0XHUwMDNlLCBcdTAwM2NzcmNcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cbjE5MzU6XHRcdFx0XHRcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xuMTkzNjpcdCNpZmRlZiBDT05GSUdfU01QXG4xOTM3Olx0XHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuMTkzODpcdFx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuMTkzOTpcdFx0XHRcdFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xuMTk0MDpcdFx0XHRcdFx0RU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XG4xOTQxOlx0I2VuZGlmXG4xOTQyOlx0XHRcdFx0XHRicmVhaztcbjE5NDM6XHRcdFx0XHR9XG4xOTQ0Olx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xOTQ1Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9NT1YgfCBCUEZfWDpcbjE5NDY6XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gMClcbjE5NDc6XHRcdFx0XHRcdGVtaXRfbW92X3JlZyhcdTAwMjZwcm9nLFxuMTk0ODpcdFx0XHRcdFx0XHQgICAgIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCxcbjE5NDk6XHRcdFx0XHRcdFx0ICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBlci1DUFUgQWRkcmVzcyBMb2FkaW5nIGluIEJQRiBJbnN0cnVjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAgYmVjYXVzZSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIEpJVCBoYW5kbGVzIGxvYWRpbmcgcGVyLUNQVSBhZGRyZXNzZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGhvdyB0aGUgSklUIHRyYW5zbGF0ZXMgaW5zdHJ1Y3Rpb25zIHRoYXQgYWNjZXNzIHBlci1DUFUgZGF0YSwgd2hpY2ggYXJlIHByZXR0eSBjb21tb24gaW4ga2VybmVsIHRyYWNpbmcgYW5kIG5ldHdvcmtpbmcgc2NlbmFyaW9zLgoKV2hhdCBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBkc3RfcmVnYCkgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgbGlrZSBSOCwgdGhlIEpJVCBkb2VzbiYjMzk7dCBkaXJlY3RseSB1c2UgdGhhdCByZWdpc3RlciBpbiB0aGUgZmluYWwgYXNzZW1ibHkuIEluc3RlYWQsIGl0IGVtaXRzIGBhZGQgcmF4LCBnczpbcjEzICYjNDM7ICZhbXA7dGhpc19jcHVfb2ZmXWAgaW4gcGxhY2Ugb2YgdGhlIG1vcmUgc3RyYWlnaHRmb3J3YXJkIGBhZGQgcjgsIGdzOlsmYW1wO3RoaXNfY3B1X29mZl1gLiBUaGF0JiMzOTtzIHRoZSBkaWZmZXJlbmNlLCBhbmQgdGhhdCYjMzk7cyB0aGUgdGhpbmcgdGhhdCBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpTbywgbGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCB0aGlzLiBUaGUgZ2VuZXJhdGVkIGluc3RydWN0aW9uIHJlYWRzIGZyb20gYGdzOltyMTMgJiM0MzsgJmFtcDt0aGlzX2NwdV9vZmZdYC4gSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB3aGF0IGByMTNgIGNvdWxkIGJlIGluIHRoaXMgY29udGV4dCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbmRpcmVjdCBhY2Nlc3MgaXMgaGFwcGVuaW5nLiBJIGtub3cgYHIxM2AgaXMgYSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXIgd2l0aGluIHRoZSBrZXJuZWwgY2FsbGluZyBjb252ZW50aW9uLCBzbyBpdHMgcm9sZSBpcyB3ZWxsLWRlZmluZWQuIEJ1dCwgaW4gdGhlIEJQRiB3b3JsZCwgZG9lcyBpdCBtYXAgZGlyZWN0bHkgdG8gYSBjb3JyZXNwb25kaW5nIEJQRiByZWdpc3Rlcj8gSG1tLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQ7IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBXYWl0LCBJIHRoaW5rIGl0IGRvZXNuJiMzOTt0LiBSMTMgaW4geDg2IGlzIG5vdCBtYXBwZWQgZGlyZWN0bHkgdG8gYSBCUEYgcmVnaXN0ZXIuIE9rYXksIHNvIEkgc2hvdWxkIGxvb2sgdXAgdGhlIGByZWcyaGV4YCBtYXBwaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGFjdHVhbCB0cmFuc2xhdGlvbiBoYXBwZW5pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdmFsdWUgaXMgaGVsZCBpbiB0aGF0IGByMTNgIHJlZ2lzdGVyIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBkYXRhIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZzJoZXgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEzOD1zdGF0aWMgaW50IGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhpbnQgYnBmX3NpemUpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE4MS0gKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxODI6c3RhdGljIGNvbnN0IGludCByZWcyaGV4W10gPSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTgzLVx0W0JQRl9SRUdfMF0gPSAwLCAgLyogUkFYICovXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI3Nz1zdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjc4LXtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNzk6XHRyZXR1cm4gYnl0ZSAmIzQzOyByZWcyaGV4W2RzdF9yZWddO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4MC19XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI4Mz1zdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4NC17XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mjg1Olx0cmV0dXJuIGJ5dGUgJiM0MzsgcmVnMmhleFtkc3RfcmVnXSAmIzQzOyAocmVnMmhleFtzcmNfcmVnXSBcdTAwM2NcdTAwM2MgMyk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjg2LX1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Njk3PXN0YXRpYyB2b2lkIGVtaXRfaW5kaXJlY3RfanVtcCh1OCAqKnBwcm9nLCBpbnQgYnBmX3JlZywgdTggKmlwKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy02OTktXHR1OCAqcHJvZyA9ICpwcHJvZztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo3MDA6XHRpbnQgcmVnID0gcmVnMmhleFticGZfcmVnXTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy03MDEtXHRib29sIGVyZWcgPSBpc19lcmVnKGJwZl9yZWcpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNTY1PXN0YXRpYyB2b2lkIGVtaXRfM3ZleCh1OCAqKnBwcm9nLCBib29sIHIsIGJvb2wgeCwgYm9vbCBiLCB1OCBtLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTcwLVx0dTggYjEsIGIyO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1NzE6XHR1OCB2dnZ2ID0gcmVnMmhleFtzcmNfcmVnMl07XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU3Mi1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNTczOlx0LyogcmVnMmhleCBnaXZlcyBvbmx5IHRoZSBsb3dlciAzIGJpdCBvZiB2dnZ2ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU3NC1cdGlmIChpc19lcmVnKHNyY19yZWcyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MjMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayB0aGlzIG9wZW4uICYjMzQ7TGV0JiMzOTtzIHJlYWQgYHJlZzJoZXhgLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIG1lbnRhbCBub3RlLiBJJiMzOTttIHNlZWluZyB0aGF0IGZ1bmN0aW9uIG5hbWUsIGByZWcyaGV4YCwgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIHN0YXJ0cyB0byBhbnRpY2lwYXRlLiBJIGtub3cgd2hhdCB0aGF0IHNvdW5kcyBsaWtlIOKAkyBpdCYjMzk7cyBsaWtlbHkgYSByb3V0aW5lIGRlZGljYXRlZCB0byBjb252ZXJ0aW5nIHJlZ2lzdGVyIHZhbHVlcywgcHJvYmFibHkgaW4gYmluYXJ5IG9yIHNvbWUgb3RoZXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIGludG8gaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCB1dGlsaXR5LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBJcyBpdCBvcHRpbWl6ZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCBkaWZmZXJlbnQgcmVnaXN0ZXIgd2lkdGhzIG9yIGFyY2hpdGVjdHVyZXM/IERvZXMgaXQgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgZ3JhY2VmdWxseT8gTXkgYXR0ZW50aW9uIGlzIGZ1bGx5IGVuZ2FnZWQ7IEkgbmVlZCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIHRoaXMgY29yZSBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHN0YXJ0IHRoZSBkZWVwIGRpdmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZGlkIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0ICogdHJhbXBvbGluZS4geDg2LTY0IHJlZ2lzdGVyIFIxMCBpcyB1c2VkIGZvciBibGluZGluZyAoaWYgZW5hYmxlZCkuXG4gMTgxOlx0ICovXG4gMTgyOlx0c3RhdGljIGNvbnN0IGludCByZWcyaGV4W10gPSB7XG4gMTgzOlx0XHRbQlBGX1JFR18wXSA9IDAsICAvKiBSQVggKi9cbiAxODQ6XHRcdFtCUEZfUkVHXzFdID0gNywgIC8qIFJESSAqL1xuIDE4NTpcdFx0W0JQRl9SRUdfMl0gPSA2LCAgLyogUlNJICovXG4gMTg2Olx0XHRbQlBGX1JFR18zXSA9IDIsICAvKiBSRFggKi9cbiAxODc6XHRcdFtCUEZfUkVHXzRdID0gMSwgIC8qIFJDWCAqL1xuIDE4ODpcdFx0W0JQRl9SRUdfNV0gPSAwLCAgLyogUjggICovXG4gMTg5Olx0XHRbQlBGX1JFR182XSA9IDMsICAvKiBSQlggY2FsbGVlIHNhdmVkICovXG4gMTkwOlx0XHRbQlBGX1JFR183XSA9IDUsICAvKiBSMTMgY2FsbGVlIHNhdmVkICovXG4gMTkxOlx0XHRbQlBGX1JFR184XSA9IDYsICAvKiBSMTQgY2FsbGVlIHNhdmVkICovXG4gMTkyOlx0XHRbQlBGX1JFR185XSA9IDcsICAvKiBSMTUgY2FsbGVlIHNhdmVkICovXG4gMTkzOlx0XHRbQlBGX1JFR19GUF0gPSA1LCAvKiBSQlAgcmVhZG9ubHkgKi9cbiAxOTQ6XHRcdFtCUEZfUkVHX0FYXSA9IDIsIC8qIFIxMCB0ZW1wIHJlZ2lzdGVyICovXG4gMTk1Olx0XHRbQVVYX1JFR10gPSAzLCAgICAvKiBSMTEgdGVtcCByZWdpc3RlciAqL1xuIDE5NjpcdFx0W1g4Nl9SRUdfUjldID0gMSwgLyogUjkgcmVnaXN0ZXIsIDZ0aCBmdW5jdGlvbiBhcmd1bWVudCAqL1xuIDE5NzpcdFx0W1g4Nl9SRUdfUjEyXSA9IDQsIC8qIFIxMiBjYWxsZWUgc2F2ZWQgKi9cbiAxOTg6XHR9O1xuIDE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzNQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb2RpbmcgYSBQZXItQ1BVIE1lbW9yeSBMZWFrIGluIEJQRiBKSVQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUgaXMgZ2VuZXJhdGluZyBhbiBgYWRkYCBpbnN0cnVjdGlvbiB0aGF0JiMzOTtzIHJlYWRpbmcgZnJvbSBwZXItQ1BVIG1lbW9yeSBhbmQgYWRkaW5nIGl0IHRvIGByYXhgLiAgYEJQRl9SRUdfN2AgaXMgUjEzLiBJZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIGZvciBpbnN0YW5jZSBSOCwgUjEzLCBpdCB3aWxsIHRyaWdnZXIgdGhlIGJ1Zy4gIEkgc2VlIGBCUEZfUkVHXzVgIChSOCkgaXMgc2VsZWN0ZWQuIGBhZGRfMW1vZGAgaXMgdXNlZCwgc28gUkVYLkIgaXMgc2V0IHdoaWNoIHdpbGwgYWx0ZXIgdGhlIHJlZ2lzdGVyIHRvIGJlY29tZSBSMTMuIFNvLCB0aGUgaW5zdHJ1Y3Rpb24gdHVybnMgaW50byBgYWRkIHJheCwgZ3M6W3IxMyAmIzQzOyAmYW1wO3RoaXNfY3B1X29mZl1gLiAgSSYjMzk7bSB0cmFjaW5nIHRoZSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLCBhbmQgdGhlIGByL21gIGZpZWxkIG9mIGAweDA0YCBtZWFucyBhIFNJQiBieXRlIGlzIGNvbWluZy4gVGhlIFNJQiBieXRlIGlzIDB4MjUuIFNjYWxlIGlzIDEsIGluZGV4IGlzIG5vbmUsIGFuZCBiYXNlIGlzIGRpc3AzMi4gQmVjYXVzZSBtb2QgaXMgMDAsIGJhc2UgaXMgZGlzcDMyIHdoaWNoIG1lYW5zIGl0IHVzZXMgUkJQLCB1bmxlc3MgUkVYLkIgaXMgc2V0LiBCZWNhdXNlIFJFWC5CIGlzIHNldCwgdGhlIGJhc2UgYmVjb21lcyBSMTMuIFRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBlbmNvZGVkIGluIHRoZSAmIzM5O3JlZyYjMzk7IGZpZWxkLiBgZHN0X3JlZ2AgaXMgZW5jb2RlZCBpbiB0aGUgJiMzOTtyZWcmIzM5OyBmaWVsZC4gU2luY2UgUkVYLlIgaXMgbm90IHNldCwgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIDAsIHdoaWNoIGlzIFJBWC4gU28gaXQgcmVhZHMgZnJvbSBgZ3M6W3IxMyAmIzQzOyBkaXNwMzJdYCBhbmQgYWRkcyBpdCB0byByYXguICBgcmF4YCBpcyBgQlBGX1JFR18wYC4KClNvLCB0aGUga2V5IGhlcmUgaXMgaXQmIzM5O3MgcmVhZGluZyA4IGJ5dGVzIGZyb20gYGdzOltyMTMgJiM0MzsgJmFtcDt0aGlzX2NwdV9vZmZdYCBhbmQgYWRkaW5nIHRoZW0gdG8gYEJQRl9SRUdfMGAgKHJheCkuIGBCUEZfUkVHXzdgIGNvcnJlc3BvbmRzIHRvIFIxMy4gIFRoaXMgbWVhbnMgdGhlIGluc3RydWN0aW9uIHJlYWRzIGZyb20gYGdzOltCUEZfUkVHXzcgJiM0MzsgJmFtcDt0aGlzX2NwdV9vZmZdYCwgd2hpY2ggaXMgcGVyLUNQVSBtZW1vcnkuICBUaGUgYGdzYCBzZWdtZW50IGlzIHRoZSBwZXItQ1BVIGFyZWEsIGFuZCBgJmFtcDt0aGlzX2NwdV9vZmZgIGlzIGEgcGVyLUNQVSB2YXJpYWJsZSB0aGF0IG9mZnNldHMgdGhlIGxvY2F0aW9uIG9mIHRoZSBwZXItQ1BVIGFyZWEuIElmIGFuIGF0dGFja2VyIGNhbiBjb250cm9sIGBCUEZfUkVHXzdgIChSMTMpLCB0aGV5IGNhbiByZWFkICphcmJpdHJhcnkqIHBlci1DUFUgbWVtb3J5IGJ5IG1hbmlwdWxhdGluZyB0aGUgb2Zmc2V0ISBUaGUgYWN0dWFsIGluc3RydWN0aW9uIHNob3VsZCByZWFkIGZyb20gYW4gb2Zmc2V0IGludG8gdGhlIHBlci1DUFUgYXJlYS4KClRoaXMgaXMgYSBtZW1vcnkgcmVhZCBmcm9tIGFuIGF0dGFja2VyLWNvbnRyb2xsZWQgYWRkcmVzcy4gSWYgdGhlIGF0dGFja2VyIGNhbiBjb250cm9sIHRoZSB2YWx1ZSBvZiBgQlBGX1JFR183YCAoUjEzKSwgdGhleSBjb250cm9sIHRoZSBhZGRyZXNzLiAgVGhlIGluc3RydWN0aW9uIGFkZHMgdGhlIHJlc3VsdCB0byBgcmF4YCwgYW5kIGlmIHRoZSBhdHRhY2tlciBjYW4gc3Vic2VxdWVudGx5IHJlYWQgYHJheGAsIHRoZXkgY2FuIGxlYWsgdGhlIHBlci1DUFUgbWVtb3J5IHZhbHVlISAgVGhpcyBpcyBhIHNlcmlvdXMgaW5mb3JtYXRpb24gbGVhay4gVGhpcyBpc24mIzM5O3Qgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWs7IGl0JiMzOTtzIGFuICphcmJpdHJhcnkqIHBlci1DUFUgbWVtb3J5IHJlYWQuCgpLQVNBTiAqbWlnaHQqIGNhdGNoIG91dC1vZi1ib3VuZHMgcmVhZHMgaWYgdGhlIG9mZnNldCBpcyBsYXJnZSwgYW5kIGl0IGNvdWxkIGVpdGhlciB0cmlnZ2VyIEtBU0FOLCBhIHBhZ2UgZmF1bHQsIG9yIGFuIGFyYml0cmFyeSBtZW1vcnkgcmVhZC4gSXQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBhZGRyZXNzIGlzIG1hcHBlZC4gS01TQU4gbWlnaHQgY2F0Y2ggaXQgaWYgaXQgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IHRoZSBwcmltYXJ5IGlzc3VlIGlzIHRoZSBlbmNvZGluZyBlcnJvciB0aGF0IGNhdXNlcyB0aGUgYXR0YWNrZXIgdG8gYmUgYWJsZSB0byByZWFkIGFuIGFyYml0cmFyeSBhZGRyZXNzIG9uIHRoZSBwZXItQ1BVIGFyZWEuIEl0JiMzOTtzIGEgbWlzY29tcGlsYXRpb24gb2YgdGhlIEJQRiBwcm9ncmFtIHRoYXQgdXNlcyBgbW92X3BlcmNwdV9hZGRyYCB3aXRoIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOCwgUjksIFIxMywgUjE0LCBSMTUpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNuX2lzX21vdl9wZXJjcHVfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXHRcdFx0XHRicmVhaztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBtYWNybyBvciBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IG1lYW50IHRvIGlkZW50aWZ5LiBJIHN1c3BlY3QgaXQmIzM5O3MgcmVsYXRlZCB0byByZWNvZ25pemluZyBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgbW92aW5nIGRhdGEgdG8gb3IgZnJvbSBwZXItQ1BVIHZhcmlhYmxlcywgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhbiBhc3NlbWJseSBjb2RlIGFuYWx5c2lzIG9yIGRpc2Fzc2VtYmxlciBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGl0cyBkZWZpbml0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbnVhbmNlcyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBLbm93aW5nIHRoZSBwcmVjaXNlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgcmV0dXJucyB0cnVlIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgYW55IGRvd25zdHJlYW0gZGVjaXNpb25zIGFib3V0IGluc3RydWN0aW9uIGhhbmRsaW5nIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHRoaXMgbWFjcm8gY292ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNuX2lzX21vdl9wZXJjcHVfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMzAyPXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTM1NS1cdFx0XHRicmVhaztcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEzNTY6XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTctXHRcdFx0aWYgKGRzdCAhPSBzcmMpXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jPTk2Nz1pbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNjAtXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTI2MTpcdFx0XHRpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoXHUwMDI2aW5zbltpXSkpIHtcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYyLVx0XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NNUCkpIHtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjE9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVx0XHRcdGJyZWFrO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzg2Olx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzODctXHRcdFx0aWYgKHJkICE9IHJzKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMi1cdFx0XHRcdGJyZWFrO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MzM6XHRcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzQtXHRcdFx0XHQvKiBtb3YgXHUwMDNjZHN0XHUwMDNlLCBcdTAwM2NzcmNcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAxLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDI6c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5ODgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFBlci1DUFUgTU9WIEluc3RydWN0aW9uIERldGVjdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgZmlsdGVyIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGBNT1ZgIGluc3RydWN0aW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBwZXItQ1BVIGFkZHJlc3Nlcy4gVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpcyB0byBjaGVjayB0aGUgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBmdW5jdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY3JpdGVyaWEgdGhpcyBmdW5jdGlvbiB1c2VzIGZvciBpZGVudGlmaWNhdGlvbi4gQXJlIHRoZXkgbG9va2luZyBhdCBzcGVjaWZpYyBvcGNvZGUgc2VxdWVuY2VzLCByZWdpc3RlciB1c2FnZSwgYWRkcmVzc2luZyBtb2Rlcywgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVzZSBmYWN0b3JzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIGFyY2hpdGVjdHVyZXMgd2hlcmUgdGhpcyBkZXRlY3Rpb24gbWlnaHQgYmUgb3Zlcmx5IGJyb2FkIG9yIHRvbyBzcGVjaWZpYz8gSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBjb21waWxlciYjMzk7cyBvcHRpbWl6YXRpb25zIGRvbuKAmXQgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGhhcyB0byBiZSByb2NrIHNvbGlkLCBhbnkgaW5zdGFiaWxpdHkgY291bGQgaGF2ZSB0ZXJyaWJsZSBjb25zZXF1ZW5jZXMgZm9yIHJlYWwgdGltZSBzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0XHQuaW1tICAgPSAwIH0pXG4gMjAxOlx0XG4gMjAyOlx0c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiAyMDM6XHR7XG4gMjA0Olx0XHRyZXR1cm4gaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XG4gMjA1Olx0fVxuIDIwNjpcdFxuIDIwNzpcdC8qIFNob3J0IGZvcm0gb2YgbW92LCBkc3RfcmVnID0gaW1tMzIgKi9cbiAyMDg6XHRcbiAyMDk6XHQjZGVmaW5lIEJQRl9NT1Y2NF9JTU0oRFNULCBJTU0pXHRcdFx0XHRcdFxcXG4gMjEwOlx0XHQoKHN0cnVjdCBicGZfaW5zbikge1x0XHRcdFx0XHRcXFxuIDIxMTpcdFx0XHQuY29kZSAgPSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX0ssXHRcdFxcXG4gMjEyOlx0XHRcdC5kc3RfcmVnID0gRFNULFx0XHRcdFx0XHRcXFxuIDIxMzpcdFx0XHQuc3JjX3JlZyA9IDAsXHRcdFx0XHRcdFxcXG4gMjE0Olx0XHRcdC5vZmYgICA9IDAsXHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTM0CgkJCQkJCQlvdXRwdXQ6IDMxNwoJCQkJCQkJdGhvdWdodHM6IDMwNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgQnVnIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIEJQRiBKSVQgY29tcGlsZXIgaXNzdWUsIGFuZCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcuIEVzc2VudGlhbGx5LCB0aGVyZSYjMzk7cyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdGhhdCBjYXVzZXMgaXQgdG8gZW1pdCBhbiBpbmNvcnJlY3QgaW5zdHJ1Y3Rpb24gd2hlbiBoYW5kbGluZyBwZXItQ1BVIGFkZHJlc3NlcyB3aXRoIGNlcnRhaW4gcmVnaXN0ZXIgdGFyZ2V0cy4gU3BlY2lmaWNhbGx5LCB0aGUgcHJvYmxlbSBsaWVzIGluIGhvdyB0aGUgUkVYIHByZWZpeCBpcyBlbmNvZGVkLiBUaGUgYGFkZF8xbW9kYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIHdoZW4gaXQgc2hvdWxkIGJlIHVzaW5nIGBhZGRfMm1vZGAuCgpUaGUgaW5jb3JyZWN0IGluc3RydWN0aW9uIGxvb2tzIGxpa2UgdGhpczogYGFkZCByYXgsIGdzOltyMTMgJiM0MzsgJmFtcDt0aGlzX2NwdV9vZmZdYCB3aGVuIGl0IHNob3VsZCBiZSBgYWRkIHI4LCBnczpbJmFtcDt0aGlzX2NwdV9vZmZdYC4gIFRoaXMgaGFwcGVucyBiZWNhdXNlIHRoZSBSRVggcHJlZml4IGlzIGJlaW5nIHNldCBpbmNvcnJlY3RseS4gVGhlIEpJVCBtaXNpbnRlcnByZXRzIHRoZSB0YXJnZXQgcmVnaXN0ZXIuIFRoZSBpbnRlbmRlZCBpbnN0cnVjdGlvbiBzaG91bGQgdXNlIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoZS5nLiwgUjgpIGFzIHRoZSB0YXJnZXQgYW5kIHJlYWQgZnJvbSBhIGZpeGVkIG9mZnNldCBpbiB0aGUgYGdzYCBzZWdtZW50IChwZXItQ1BVIG1lbW9yeSkuICBJbnN0ZWFkLCBpdCB1c2VzIGByYXhgIGFzIHRoZSBkZXN0aW5hdGlvbiBhbmQgYW4gYXJiaXRyYXJ5IG9mZnNldCBkZXRlcm1pbmVkIGJ5IGByMTNgLCB3aGljaCBpcyB0aWVkIHRvIGBCUEZfUkVHXzdgIGluIHRoZSBCUEYgcHJvZ3JhbS4KClRoaXMgaXMgYSBjbGFzc2ljIGFyYml0cmFyeSBtZW1vcnkgcmVhZCB2dWxuZXJhYmlsaXR5LiBBIEJQRiBwcm9ncmFtLCBpZiBjcmFmdGVkIGNhcmVmdWxseSwgY2FuIGNvbnRyb2wgYEJQRl9SRUdfN2AgYW5kIGVmZmVjdGl2ZWx5IHJlYWQgZnJvbSBhbnkgbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgcGVyLUNQVSBtZW1vcnkgcmVnaW9uLiBJZiBgcjEzYCBnb2VzIG91dCBvZiBib3VuZHMsIHlvdSYjMzk7bGwgZ2V0IGEgcGFnZSBmYXVsdCwgd2hpY2ggaXMgZWFzaWx5IGRldGVjdGVkLiBCdXQgZXZlbiBpZiBpdCBzdGF5cyAqd2l0aGluKiB0aGUgcGVyLUNQVSByZWdpb24sIHRoZSBhdHRhY2tlciBjYW4gc3RpbGwgcmVhZCBpbml0aWFsaXplZCBtZW1vcnkgdGhhdCB0aGV5IHNob3VsZG4mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gYW5kIGxlYWsgaW5mb3JtYXRpb24uCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgZG9lcyBLTVNBTiBoZWxwIGhlcmU/IEFuZCB0aGUgYW5zd2VyIGlzIE5PLiBLTVNBTiBpcyBwcmltYXJpbHkgZGVzaWduZWQgdG8gY2F0Y2ggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksICphbmQqIGtlcm5lbC10by11c2VyIGluZm8tbGVha3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdoaWxlIHRoaXMgaXMgYW4gaW5mby1sZWFrLCBpdCYjMzk7cyBhbiBpbmZvLWxlYWsgb2YgKmFyYml0cmFyeSogbWVtb3J5LCBub3QgbmVjZXNzYXJpbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFuIGF0dGFja2VyIHdvdWxkIG1vcmUgbGlrZWx5IHVzZSB0aGlzIHRvIGxlYWsgKmluaXRpYWxpemVkKiBkYXRhIChwb2ludGVycywga2V5cykgdG8gYnlwYXNzIEtBU0xSIG9yIGVzY2FsYXRlIHByaXZpbGVnZXMuIFNpbmNlIHRoZSBtZW1vcnkgbWlnaHQgYmUgaW5pdGlhbGl6ZWQsIEtNU0FOIHdvbiYjMzk7dCBjb21wbGFpbi4KCkFsc28sIGNvbnNpZGVyIGhvdyB0aGlzIGJ1ZyB3b3VsZCBiZSB0cmlnZ2VyZWQuIEl0JiMzOTtzIGEgSklUIG1pc2NvbXBpbGF0aW9uLiBBIGZ1enplciBnZW5lcmF0aW5nIHJhbmRvbSBCUEYgcHJvZ3JhbXMgaXMgdGhlIHBlcmZlY3QgdG9vbC4gVGhlIGZ1enplciB3aWxsIGdlbmVyYXRlIHJhbmRvbSBCUEYgcHJvZ3JhbXMuIEFuZCB0aGUgSklUIHdpbGwgZW1pdCB0aGUgYmFkIGluc3RydWN0aW9uIHdpdGggYEJQRl9SRUdfN2AgY29udGFpbmluZyByYW5kb20gdmFsdWVzLiBJZiB0aGUgZ2VuZXJhdGVkIGFkZHJlc3MgaXMgaW52YWxpZCwgdGhlIGNvZGUgd2lsbCBjcmFzaCB3aXRoIGEgcGFnZSBmYXVsdC4gS0FTQU4vS01TQU4gb3IgYSBub3JtYWwga2VybmVsIHdpbGwgYWxsIGNyYXNoIGFuZCBjYXRjaCBpdC4gVGhlIGNyYXNoZXMgY2F1c2VkIGJ5IGludmFsaWQgcmVhZHMgYXJlIHJlYWRpbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGZ1enppbmcgYW5kIHRlc3RpbmcuIE5vIG5lZWQgZm9yIEtNU0FOLiBJZiB0aGUgcmVhZHMgYXJlIHZhbGlkIGJ1dCBtYWxpY2lvdXMsIHRoZSByZXN1bHRpbmcgc3RhdGUgb2YgUkFYIHdpbGwgYmUgaW5jb3JyZWN0LiBUaGlzIGlzIGFsc28gcmVhZGlseSBmb3VuZCBieSBub3JtYWwgZnV6emluZyBhbmQgdGVzdGluZy4KClRoZSBmaXgsIGJ5IHRoZSB3YXksIGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hhbmdlIGBhZGRfMW1vZGAgdG8gYGFkZF8ybW9kYC4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IFJFWCBwcmVmaXggaXMgZ2VuZXJhdGVkLCB0YXJnZXRpbmcgdGhlIGNvcnJlY3QgZGVzdGluYXRpb24gcmVnaXN0ZXIuICBUaGUgY29ycmVjdGVkIGluc3RydWN0aW9uIGxvb2tzIGxpa2UgdGhpczogIGBhZGQgcjgsIGdzOlsmYW1wO3RoaXNfY3B1X29mZl1gLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBidWcsIHdoaWNoIGlzIGEgSklUIGVuY29kaW5nIGVycm9yIGxlYWRpbmcgdG8gZWl0aGVyIHBhZ2UgZmF1bHRzIG9yIGFyYml0cmFyeSBtZW1vcnkgY29ycnVwdGlvbiwgYW5kIHRoZSBmYWN0IHRoYXQgc3RhbmRhcmQgZnV6emluZyB3aWxsIGVhc2lseSBjYXRjaCB0aGUgY3Jhc2hlcywgKk5lZWRzS01TQU49ZmFsc2UqIGlzIHRoZSBjb3JyZWN0IGNob2ljZS4gVGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkgYXNwZWN0IHRoYXQmIzM5O3MgdW5pcXVlbHkgZGV0ZWN0YWJsZSBieSBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gV2hlbiBlbWl0dGluZyB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbiBmb3IgcGVyLUNQVSBhZGRyZXNzIHJlc29sdXRpb24sIHRoZSBKSVQgaW5jb3JyZWN0bHkgdXNlZCBgYWRkXzFtb2RgLCB3aGljaCBzZXRzIHRoZSBSRVguQiBiaXQgaW5zdGVhZCBvZiB0aGUgUkVYLlIgYml0IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChlLmcuLCBSOC1SMTUpLiBUaGlzIGVuY29kaW5nIGVycm9yIGNhdXNlcyB0aGUgQ1BVIHRvIGludGVycHJldCB0aGUgaW5zdHJ1Y3Rpb24gYXMgYGFkZCByYXgsIGdzOltyMTMgJiM0MzsgXHUwMDNjb2ZmXHUwMDNlXWAgaW5zdGVhZCBvZiBgYWRkIHI4LCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAuXG5cbkV4ZWN1dGluZyB0aGlzIG1hbGZvcm1lZCBpbnN0cnVjdGlvbiBsZWFkcyB0byByZWFkaW5nIG1lbW9yeSBmcm9tIGEgc2VtaS1hcmJpdHJhcnkgcGVyLUNQVSBvZmZzZXQgKGNvbnRyb2xsZWQgYnkgYHIxM2AsIHdoaWNoIG1hcHMgdG8gYEJQRl9SRUdfN2ApIGFuZCBjb3JydXB0aW5nIHRoZSBgcmF4YCAoYEJQRl9SRUdfMGApIHJlZ2lzdGVyLiBUaGlzIHJlc3VsdHMgaW4gZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgKGNhdXNpbmcgYSBwYWdlIGZhdWx0IG9yIHRyaWdnZXJpbmcgS0FTQU4pIG9yIGFuIGluZm8tbGVhayBvZiBhcmJpdHJhcnkgcGVyLUNQVSBtZW1vcnkuIFxuXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uLCB1c2FnZSwgb3IgbGVha2luZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEl0IGlzIGEgcHVyZSBKSVQgbWlzY29tcGlsYXRpb24gdGhhdCBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgcmVnaXN0ZXIgY29ycnVwdGlvbi4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVzdWx0aW5nIHBhZ2UgZmF1bHRzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gV2hlbiBlbWl0dGluZyB0aGUgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbiBmb3IgcGVyLUNQVSBhZGRyZXNzIHJlc29sdXRpb24sIHRoZSBKSVQgaW5jb3JyZWN0bHkgdXNlZCBgYWRkXzFtb2RgLCB3aGljaCBzZXRzIHRoZSBSRVguQiBiaXQgaW5zdGVhZCBvZiB0aGUgUkVYLlIgYml0IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChlLmcuLCBSOC1SMTUpLiBUaGlzIGVuY29kaW5nIGVycm9yIGNhdXNlcyB0aGUgQ1BVIHRvIGludGVycHJldCB0aGUgaW5zdHJ1Y3Rpb24gYXMgYGFkZCByYXgsIGdzOltyMTMgJiM0MzsgXHUwMDNjb2ZmXHUwMDNlXWAgaW5zdGVhZCBvZiBgYWRkIHI4LCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAuXG5cbkV4ZWN1dGluZyB0aGlzIG1hbGZvcm1lZCBpbnN0cnVjdGlvbiBsZWFkcyB0byByZWFkaW5nIG1lbW9yeSBmcm9tIGEgc2VtaS1hcmJpdHJhcnkgcGVyLUNQVSBvZmZzZXQgKGNvbnRyb2xsZWQgYnkgYHIxM2AsIHdoaWNoIG1hcHMgdG8gYEJQRl9SRUdfN2ApIGFuZCBjb3JydXB0aW5nIHRoZSBgcmF4YCAoYEJQRl9SRUdfMGApIHJlZ2lzdGVyLiBUaGlzIHJlc3VsdHMgaW4gZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgKGNhdXNpbmcgYSBwYWdlIGZhdWx0IG9yIHRyaWdnZXJpbmcgS0FTQU4pIG9yIGFuIGluZm8tbGVhayBvZiBhcmJpdHJhcnkgcGVyLUNQVSBtZW1vcnkuIFxuXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uLCB1c2FnZSwgb3IgbGVha2luZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEl0IGlzIGEgcHVyZSBKSVQgbWlzY29tcGlsYXRpb24gdGhhdCBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgcmVnaXN0ZXIgY29ycnVwdGlvbi4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVzdWx0aW5nIHBhZ2UgZmF1bHRzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTowOC43NjgxNzc3MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTU5NDQ1MDE3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gV2hlbiBlbWl0dGluZyB0aGUgYGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdHJ1Y3Rpb24gZm9yIHBlci1DUFUgYWRkcmVzcyByZXNvbHV0aW9uLCB0aGUgSklUIGluY29ycmVjdGx5IHVzZWQgYGFkZF8xbW9kYCwgd2hpY2ggc2V0cyB0aGUgUkVYLkIgYml0IGluc3RlYWQgb2YgdGhlIFJFWC5SIGJpdCB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoZS5nLiwgUjgtUjE1KS4gVGhpcyBlbmNvZGluZyBlcnJvciBjYXVzZXMgdGhlIENQVSB0byBpbnRlcnByZXQgdGhlIGluc3RydWN0aW9uIGFzIGBhZGQgcmF4LCBnczpbcjEzICsgXFx1MDAzY29mZlxcdTAwM2VdYCBpbnN0ZWFkIG9mIGBhZGQgcjgsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV1gLlxcblxcbkV4ZWN1dGluZyB0aGlzIG1hbGZvcm1lZCBpbnN0cnVjdGlvbiBsZWFkcyB0byByZWFkaW5nIG1lbW9yeSBmcm9tIGEgc2VtaS1hcmJpdHJhcnkgcGVyLUNQVSBvZmZzZXQgKGNvbnRyb2xsZWQgYnkgYHIxM2AsIHdoaWNoIG1hcHMgdG8gYEJQRl9SRUdfN2ApIGFuZCBjb3JydXB0aW5nIHRoZSBgcmF4YCAoYEJQRl9SRUdfMGApIHJlZ2lzdGVyLiBUaGlzIHJlc3VsdHMgaW4gZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgKGNhdXNpbmcgYSBwYWdlIGZhdWx0IG9yIHRyaWdnZXJpbmcgS0FTQU4pIG9yIGFuIGluZm8tbGVhayBvZiBhcmJpdHJhcnkgcGVyLUNQVSBtZW1vcnkuIFxcblxcblRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24sIHVzYWdlLCBvciBsZWFraW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gSXQgaXMgYSBwdXJlIEpJVCBtaXNjb21waWxhdGlvbiB0aGF0IGxlYWRzIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCByZWdpc3RlciBjb3JydXB0aW9uLiBTdGFuZGFyZCBmdXp6aW5nIHdpdGggS0FTQU4gaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZXN1bHRpbmcgcGFnZSBmYXVsdHMgYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbiAoZW1pdHRlZCBmb3IgcGVyLUNQVSBtYXAgdmFsdWUgbG9hZHMpIGluY29ycmVjdGx5IGVuY29kZWQgdGhlIFJFWCBwcmVmaXggd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2FzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBJdCB1c2VkIGBhZGRfMW1vZGAgd2hpY2ggc2V0cyB0aGUgQiBiaXQgaW5zdGVhZCBvZiBgYWRkXzJtb2RgIHdoaWNoIGNvcnJlY3RseSBzZXRzIHRoZSBSIGJpdCBmb3IgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSBgYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdYCBpbnN0cnVjdGlvbi4gVGhpcyB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IHJlZ2lzdGVyIHVzYWdlIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyB3aGVuIGV4ZWN1dGluZyBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTowOC43NjgxODUwODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDcxNzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIwYjlkMTY4OGU1OWI2YzBiNzQwYWY4ZTczMTY4MWE5ZmJjZDM1MjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6Mzk6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtMTkzNSw3ICsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcXG4gXFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuICNpZmRlZiBDT05GSUdfU01QXFxuIFxcdFxcdFxcdFxcdC8qIGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXSAqL1xcbi1cXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XFxuK1xcdFxcdFxcdFxcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcXG4gXFx0XFx0XFx0XFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xcbiBcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuICNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTowOS4yNDM3MzE1NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzkyMzc0MDcyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdHJ1Y3Rpb24uIFRoaXMgd291bGQgcmVzdWx0IGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBmYXVsdHMgd2hlbiBleGVjdXRpbmcgSklULWNvbXBpbGVkIEJQRiBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjBiOWQxNjg4ZTU5YjZjMGI3NDBhZjhlNzMxNjgxYTlmYmNkMzUyNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDE3OjM5OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkOTIwNzcyYWY3ZDVmLi4xYTlmYjUzMGFkYzNjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xOTM1LDcgKzE5MzUsNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XG4gI2lmZGVmIENPTkZJR19TTVBcbiBcdFx0XHRcdC8qIGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG4tXHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XG4rXHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4gXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4gXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbiAjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM5OjA5LjI0MzczMzU3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzI0ODgyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgbWFraW5nIGEgc3BlY2lmaWMgY2hhbmdlIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIGlzIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBhZGp1c3RtZW50IHdpdGhpbiB0aGUgYGRvX2ppdGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQncyBzd2FwcGluZyBvdXQgYEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtgIGZvciBgRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO2AuIFRoaXMgcG9pbnRzIGRpcmVjdGx5IHRvIGFuIHg4NiBCUEYgSklUIGNvbXBpbGVyIOKAkyBhIGRldGFpbCBJIGltbWVkaWF0ZWx5IHBpY2sgdXAsIGNvbnNpZGVyaW5nIG15IGJhY2tncm91bmQuXG5cbk15IGd1dCBmZWVsaW5nIGlzIHRoaXMgaXMgYWJvdXQgbWVtb3J5IGFkZHJlc3Npbmcgb3IgcmVnaXN0ZXIgdXNhZ2UgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgYWRkXzFtb2RgIGFuZCBgYWRkXzJtb2RgLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBhIHplcm8gYnl0ZSB3aXRoaW4gYGFkZF8ybW9kYCwgaXMgdGhlIGtleS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQuIFRoYXQgYDBgIGluIHRoZSBuZXcgZnVuY3Rpb24gY2FsbCBsaWtlbHkgcmVwcmVzZW50cyBhbiBpbW1lZGlhdGUgdmFsdWUg4oCTIHBlcmhhcHMgYW4gb2Zmc2V0IGZvciBzb21lIGtpbmQgb2YgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2hhdCdzIHRoaXMgcmVsYXRlZCB0bz8gTWF5YmUgYW4gdXBkYXRlZCBtZW1vcnkgYWNjZXNzIHBhdHRlcm4/IFRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UgaXMgY3J1Y2lhbCwgYW5kIGl0J3MgaW1wZXJhdGl2ZSB0aGF0IEkgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkb19qaXRgIHRvIGFzY2VydGFpbiB0aGUgZXhhY3QgY29udGV4dCBhbmQgd2hhdCB0aGlzIHN1YnRsZSBhbHRlcmF0aW9uIGFjaGlldmVzLiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIGFuZCBtYWNybyBleHBhbnNpb25zIGZyb20gaGVyZSB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToxNy42NzYyMjU5NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NzkxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9faml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTY5MT1zdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjgtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE3Mjk6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzMwLVxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk2Mj1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwMzktXFx0XFx0XFx0cGFkZGluZyA9IHRydWU7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQwNDA6XFx0XFx0cHJvZ2xlbiA9IGRvX2ppdChlbnYsIHByb2csIGFkZHJzLCBpbWFnZSwgcndfaW1hZ2UsIG9sZHByb2dsZW4sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQwNDEtXFx0XFx0XFx0XFx0IFxcdTAwMjZjdHgsIHBhZGRpbmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToxNy43MjU5MTExODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA2MjUzNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEpJVCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRoZSBjcnV4IG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIHRoZSBgZG9faml0YCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIEknbGwgbmVlZCB0byBzZWUgKmhvdyogYGRvX2ppdGAgaXMgYmVpbmcgY2FsbGVkLCB3aGF0IGRhdGEgaXQncyBvcGVyYXRpbmcgb24sIGFuZCB3aGF0IHRoZSBzdWJzZXF1ZW50IGZsb3cgb2YgZXhlY3V0aW9uIGxvb2tzIGxpa2UuIEdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBiZWZvcmUtYW5kLWFmdGVyIHBpY3R1cmUgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaXNzdWVzLCBiZW5lZml0cywgYW5kIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBpbXBhY3QuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk0MSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM5OjIxLjAzMjE3MzE5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDcxLCJFcnJvciI6ImFyZ3VtZW50IFwiRmlyc3RMaW5lXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IFwiMTkyMFwiLFxuICBcIkxpbmVDb3VudFwiOiBcIjUwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiYXJndW1lbnQgXFxcIkZpcnN0TGluZVxcXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM5OjIxLjAzMjIwNDQwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjYxMTM5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQgcHJvZ3JhbW1lci9lbmdpbmVlcjpcblxuKipJbml0aWFsIERhdGEgVHlwZSBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGUgdmVyeSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkLCB3aXRob3V0IGEgZG91YnQsIGlzIHRoZSBkYXRhIHR5cGUgZm9yIHRoZSB2YXJpYWJsZXMgYEZpcnN0TGluZWAgYW5kIGBMaW5lQ291bnRgLiBUaGV5J3JlIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gbmVlZCB0byBiZSBpbnRlZ2Vycy4gSSBtZWFuLCB3ZSdyZSB0YWxraW5nIGFib3V0IGxpbmUgKm51bWJlcnMqIGFuZCBhIGNvdW50IG9mIGxpbmVzLCB3aGljaCBieSB0aGVpciBuYXR1cmUgYXJlIHdob2xlIG51bWJlcnMuIFlvdSB3b3VsZG4ndCB1c2UgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgZm9yIHRoZXNlLCB1bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgKnZlcnkqIHVudXN1YWwgZ29pbmcgb24gdGhhdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBUaGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW91ciBvciBpbmNvcnJlY3Qgb3V0cHV0IGZyb20gYW55IG90aGVyIHR5cGUgd291bGQgYmUgdG9vIGdyZWF0IHRvIGNvbnNpZGVyIG90aGVyd2lzZS4gSSdkIG5lZWQgdG8gY29uZmlybSB0aGlzIHdpdGggdGhlIGNvbnRleHQsIGJ1dCB0aGF0J3MgbXkgd29ya2luZyBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTg4LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToyNC40OTgzMjIyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODA1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkyMDpcXHRcXG4xOTIxOlxcdFxcdFxcdFxcdFxcdC8qIHhvciByMTEsIHIxMSAqL1xcbjE5MjI6XFx0XFx0XFx0XFx0XFx0RU1JVDMoMHg0RCwgMHgzMSwgMHhEQik7XFxuMTkyMzpcXHRcXG4xOTI0OlxcdFxcdFxcdFxcdFxcdC8qIHRlc3QgZHN0X3JlZzMyLCBkc3RfcmVnMzI7IGNoZWNrIGlmIGxvd2VyIDMyLWJpdCBhcmUgemVybyAqL1xcbjE5MjU6XFx0XFx0XFx0XFx0XFx0bWF5YmVfZW1pdF9tb2QoXFx1MDAyNnByb2csIGRzdF9yZWcsIGRzdF9yZWcsIGZhbHNlKTtcXG4xOTI2OlxcdFxcdFxcdFxcdFxcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcXG4xOTI3OlxcdFxcbjE5Mjg6XFx0XFx0XFx0XFx0XFx0LyogY21vdmUgcjExLCBkc3RfcmVnOyBpZiBzbywgc2V0IGRzdF9yZWcgdG8gemVybyAqL1xcbjE5Mjk6XFx0XFx0XFx0XFx0XFx0LyogV0FSTklORzogSW50ZWwgc3dhcHBlZCBzcmMvZHN0IHJlZ2lzdGVyIGVuY29kaW5nIGluIENNT1ZjYyAhISEgKi9cXG4xOTMwOlxcdFxcdFxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCBBVVhfUkVHLCBkc3RfcmVnLCB0cnVlKTtcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdEVNSVQzKDB4MEYsIDB4NDQsIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIGRzdF9yZWcpKTtcXG4xOTMyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5MzM6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbjE5MzQ6XFx0XFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcbjE5MzU6XFx0XFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuMTkzNjpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbjE5Mzc6XFx0XFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuMTkzODpcXHRcXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XFxuMTkzOTpcXHRcXHRcXHRcXHRcXHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XFxuMTk0MDpcXHRcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuMTk0MTpcXHQjZW5kaWZcXG4xOTQyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NDM6XFx0XFx0XFx0XFx0fVxcbjE5NDQ6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTk0NTpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XFxuMTk0NjpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDApXFxuMTk0NzpcXHRcXHRcXHRcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csXFxuMTk0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXFxuMTk0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xcbjE5NTA6XFx0XFx0XFx0XFx0ZWxzZVxcbjE5NTE6XFx0XFx0XFx0XFx0XFx0ZW1pdF9tb3ZzeF9yZWcoXFx1MDAyNnByb2csIGluc24tXFx1MDAzZW9mZixcXG4xOTUyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0LFxcbjE5NTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xcbjE5NTQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTk1NTpcXHRcXG4xOTU2OlxcdFxcdFxcdFxcdC8qIG5lZyBkc3QgKi9cXG4xOTU3OlxcdFxcdFxcdGNhc2UgQlBGX0FMVSB8IEJQRl9ORUc6XFxuMTk1ODpcXHRcXHRcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9ORUc6XFxuMTk1OTpcXHRcXHRcXHRcXHRtYXliZV9lbWl0XzFtb2QoXFx1MDAyNnByb2csIGRzdF9yZWcsXFxuMTk2MDpcXHRcXHRcXHRcXHRcXHRcXHRCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0KTtcXG4xOTYxOlxcdFxcdFxcdFxcdEVNSVQyKDB4RjcsIGFkZF8xcmVnKDB4RDgsIGRzdF9yZWcpKTtcXG4xOTYyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NjM6XFx0XFxuMTk2NDpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfQUREIHwgQlBGX0s6XFxuMTk2NTpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfU1VCIHwgQlBGX0s6XFxuMTk2NjpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX0s6XFxuMTk2NzpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfT1IgfCBCUEZfSzpcXG4xOTY4OlxcdFxcdFxcdGNhc2UgQlBGX0FMVSB8IEJQRl9YT1IgfCBCUEZfSzpcXG4xOTY5OlxcdFxcdFxcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9LOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToyNC40OTg1MjIwMjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ2MzQ3MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBKSVQgQ29tcGlsZXIgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gdGhlIGBkb19qaXRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbilgLiBIbW0sIHRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgYWx0ZXJpbmcgaG93IHdlIGhhbmRsZSB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGdlbmVyYXRlZCB4ODYgY29kZS4gIFByZXZpb3VzbHksIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgd2FzIHVzZWQsIGJ1dCBub3cgaXQncyBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiAgVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgY2hhbmdpbmcgdGhlIGluc3RydWN0aW9uIGVuY29kaW5nLCB3aGljaCBjYW4gaGF2ZSByaXBwbGUgZWZmZWN0cy4gVGhpcyBzY3JlYW1zIFwicG90ZW50aWFsIGJ1ZyBmaXhcIiBvciBcIm9wdGltaXphdGlvblwiIHRvIG1lLlxuXG5NeSBpbnR1aXRpb24gc2F5cyB0aGlzIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24uICBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGFkZHJlc3NpbmcgbW9kZSBmb3IgcGVyLUNQVSB2YXJpYWJsZXMsIHdoaWNoIG9mdGVuIGludm9sdmVzIHNvbWUgc29ydCBvZiBvZmZzZXQgY2FsY3VsYXRpb24uIFRoZSBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbiBpcyBsaWtlbHkgZW1pdHRlZCB3aGVuIHdlIHNlZSBhIGBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9QRVJDUFVgIGluc3RydWN0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhciwgcmlnaHQ/ICBOZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBCUEYgaW5zdHJ1Y3Rpb24gc2V0IGVuY29kaW5nLi4uXG5cbk5vdywgYSBxdWljayBjaGVjay4uLiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbilgLiBUaGF0J3MgYSBoZWxwZXIgZnVuY3Rpb24uIEkgcmVhbGx5IG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBoZWxwZXIgaXMgZG9pbmcuIExldCBtZSBkb3VibGUtY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UgZnVsbHkuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGNoYW5nZSBpbnRyb2R1Y2VkIHRvIGBkb19qaXRgIGFjdHVhbGx5IGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyBvciBhZGRzIGEgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOToyOS4zNDQ4NzMyMDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk5NjA0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEzMDI9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUtXFx0XFx0XFx0YnJlYWs7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTM1NjpcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTM1Ny1cXHRcXHRcXHRpZiAoZHN0ICE9IHNyYylcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNjAtXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNjE6XFx0XFx0XFx0aWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKFxcdTAwMjZpbnNuW2ldKSkge1xcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYyLVxcdFxcdFxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjE9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzODUtXFx0XFx0XFx0YnJlYWs7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzg2OlxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzODctXFx0XFx0XFx0aWYgKHJkICE9IHJzKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXFx0XFx0XFx0XFx0YnJlYWs7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MzM6XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVxcdFxcdFxcdFxcdC8qIG1vdiBcXHUwMDNjZHN0XFx1MDAzZSwgXFx1MDAzY3NyY1xcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9NDA9c3RydWN0IGN0bF90YWJsZV9oZWFkZXI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjIwMjpzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6MzEuNDU0ODQ2NzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzI0NzMyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAgaW4gYGxpbnV4L2ZpbHRlci5oYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgLiBJdCdzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIGVCUEYgaW5mcmFzdHJ1Y3R1cmUsIGxpa2VseSB1c2VkIGZvciBvcHRpbWl6aW5nIG9yIHZlcmlmeWluZyBlQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgdGhvc2UgZGVhbGluZyB3aXRoIHBlci1DUFUgdmFyaWFibGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSB3aXRoaW4gdGhhdCBjb250ZXh0LiBJcyBpdCBmb3IgaW5zdHJ1Y3Rpb24gcGF0dGVybiBtYXRjaGluZywgaW5zdHJ1Y3Rpb24gY2xhc3NpZmljYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBEb2VzIGl0IGlkZW50aWZ5IGluc3RydWN0aW9ucyB0aGF0IG1vdmUgZGF0YSB0byBvciBmcm9tIHBlci1DUFUgYXJlYXM/IE1vcmUgaW1wb3J0YW50bHksIGhvdyBkb2VzIGl0IGRlZmluZSB3aGF0IHF1YWxpZmllcyBhcyBhIFwibW92ZVwiIG9wZXJhdGlvbiBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIGFyY2hpdGVjdHVyZSBhbmQgZUJQRiBieXRlY29kZT8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIHdoaWNoIGluc3RydWN0aW9ucyBpdCB0YXJnZXRzLCB3aGV0aGVyIGl0IGNvbnNpZGVycyBhZGRyZXNzaW5nIG1vZGVzLCBhbmQgaWYgaXQgZmFjdG9ycyBpbiBhbnkgcG90ZW50aWFsIENQVS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gbWlzaGFuZGxpbmcgdGhlc2UgaW5zdHJ1Y3Rpb25zLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6MzUuNDI3MzIyOTE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NTpcXHRcXHQoKHN0cnVjdCBicGZfaW5zbikge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTk2OlxcdFxcdFxcdC5jb2RlICA9IEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCxcXHRcXHRcXFxcXFxuIDE5NzpcXHRcXHRcXHQuZHN0X3JlZyA9IERTVCxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5ODpcXHRcXHRcXHQuc3JjX3JlZyA9IFNSQyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5OTpcXHRcXHRcXHQub2ZmICAgPSBCUEZfQUREUl9QRVJDUFUsXFx0XFx0XFx0XFxcXFxcbiAyMDA6XFx0XFx0XFx0LmltbSAgID0gMCB9KVxcbiAyMDE6XFx0XFxuIDIwMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiAyMDM6XFx0e1xcbiAyMDQ6XFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCkgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IEJQRl9BRERSX1BFUkNQVTtcXG4gMjA1OlxcdH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0LyogU2hvcnQgZm9ybSBvZiBtb3YsIGRzdF9yZWcgPSBpbW0zMiAqL1xcbiAyMDg6XFx0XFxuIDIwOTpcXHQjZGVmaW5lIEJQRl9NT1Y2NF9JTU0oRFNULCBJTU0pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTA6XFx0XFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMTpcXHRcXHRcXHQuY29kZSAgPSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX0ssXFx0XFx0XFxcXFxcbiAyMTI6XFx0XFx0XFx0LmRzdF9yZWcgPSBEU1QsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTM6XFx0XFx0XFx0LnNyY19yZWcgPSAwLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjE0OlxcdFxcdFxcdC5vZmYgICA9IDAsXFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTozNS40Mjc0Mzk3NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NjE4ODEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJbnN0cnVjdGlvbiBUcmFuc2Zvcm1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgQlBGIGluc3RydWN0aW9uLCBhbmQgaXQncyBhIGBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1hgIHdpdGggYG9mZiA9PSBCUEZfQUREUl9QRVJDUFVgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSByZWNvZ25pemUgdGhpcyBhcyBhIHNwZWNpZmljIEJQRiBpbnN0cnVjdGlvbi4gTXkgZm9jdXMgaXMgb24gaG93IHRoZSBnZW5lcmF0ZWQgeDg2IGNvZGUgaXMgY2hhbmdpbmcuIEl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSB3YXkgdGhlIHg4NiBpbnN0cnVjdGlvbiBpcyBiZWluZyBhc3NlbWJsZWQuIFNwZWNpZmljYWxseSwgaXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgYW5kIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgYWN0dWFsbHkgZG8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIGFzc2VtYmxlci4gVGhpcyBkaWZmZXJlbmNlIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGEgZGVlcGVyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTozOS41ODM2MzIwNTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODk1NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZF8xbW9kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjQzPXN0YXRpYyBib29sIGlzX2F4cmVnKHUzMiByZWcpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4LS8qIEFkZCBtb2RpZmllcnMgaWYgJ3JlZycgbWFwcyB0byB4ODYtNjQgcmVnaXN0ZXJzIFI4Li5SMTUgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQ5OnN0YXRpYyB1OCBhZGRfMW1vZCh1OCBieXRlLCB1MzIgcmVnKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTAte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTkzOD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW0zMih1OCAqKnBwcm9nLCBib29sIHNpZ25fcHJvcGFnYXRlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk0OS1cXHRcXHQvKiAnbW92ICVyYXgsIGltbTMyJyBzaWduIGV4dGVuZHMgaW1tMzIgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTUwOlxcdFxcdGIxID0gYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk1MS1cXHRcXHRiMiA9IDB4Qzc7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTcxLVxcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NzI6XFx0XFx0RU1JVDEoYWRkXzFtb2QoMHg0MCwgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NzMtXFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHhCOCwgZHN0X3JlZyksIGltbTMyKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz05Nzg9c3RhdGljIHZvaWQgZW1pdF9tb3ZfaW1tNjQodTggKipwcHJvZywgdTMyIGRzdF9yZWcsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTk1LVxcdFxcdC8qIG1vdmFic3EgcmF4LCBpbW02NCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5OTY6XFx0XFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIGFkZF8xcmVnKDB4QjgsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTk3LVxcdFxcdEVNSVQoaW1tMzJfbG8sIDQpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTExMDI9c3RhdGljIHZvaWQgbWF5YmVfZW1pdF8xbW9kKHU4ICoqcHByb2csIHUzMiByZWcsIGJvb2wgaXM2NClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTA2LVxcdGlmIChpczY0KVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTA3OlxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIHJlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTA4LVxcdGVsc2UgaWYgKGlzX2VyZWcocmVnKSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEwOTpcXHRcXHRFTUlUMShhZGRfMW1vZCgweDQwLCByZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTExMC1cXHQqcHByb2cgPSBwcm9nO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMjEtXFx0XFx0XFx0XFx0LyogRW1pdCAnYnN3YXAgcmF4JyB0byBzd2FwIDggYnl0ZXMgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjIyMjpcXHRcXHRcXHRcXHRFTUlUMyhhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHgwRixcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIyMy1cXHRcXHRcXHRcXHQgICAgICBhZGRfMXJlZygweEM4LCBkc3RfcmVnKSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4Mi1cXHRcXHRcXHR9XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyODM6XFx0XFx0XFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjg0LVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM4MzM9c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NDItXFx0XFx0ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NDM6XFx0XFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XFx0LyogY21wIHJkeCxmdW5jICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NDQtXFx0XFx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYV0pKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NjMtXFx0cGl2b3QgPSAoYiAtIGEpIC8gMjtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzg2NDpcXHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcXHRcXHQvKiBjbXAgcmR4LGZ1bmMgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg2NS1cXHRpZiAoIWlzX3NpbW0zMihwcm9nc1thICsgcGl2b3RdKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6MzkuNjMzNTM0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkyNjYwOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGFkZF8ybW9kYCBpbiBgYnBmX2ppdF9jb21wLmNgKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIGluIG9uIGBhZGRfMm1vZGAgd2l0aGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGF0J3MgdGhlIHg4Ni1zcGVjaWZpYyBCUEYgSklUIGNvbXBpbGVyIGNvZGUgZm9yIG5ldHdvcmsgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGFkZGl0aW9uIG1vZHVsbyBhIHBvd2VyIG9mIHR3byBpcyBoYW5kbGVkLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGtleSBwaWVjZSBvZiBvcHRpbWl6aW5nIEJQRiBwcm9ncmFtcyB0aGF0IGludm9sdmUgdGhlc2UgdHlwZXMgb2YgYXJpdGhtZXRpYyBjb25zdHJhaW50cywgZXNwZWNpYWxseSBpZiBpdCdzIG9wZXJhdGluZyBvbiBuZXR3b3JrIHBhY2tldCBkYXRhLiBUaGUgZ29hbCBpcyBsaWtlbHkgdG8gdHJhbnNsYXRlIHRoZSBCUEYgaW5zdHJ1Y3Rpb24gaW50byB0aGUgbW9zdCBlZmZpY2llbnQgeDg2IGFzc2VtYmx5IHBvc3NpYmxlLCB0YWtpbmcgYWR2YW50YWdlIG9mIHBvdGVudGlhbGx5IGhhcmR3YXJlLWxldmVsIG1vZCBpbnN0cnVjdGlvbnMsIG9yIHJlc29ydGluZyB0byBiaXR3aXNlIG9wZXJhdGlvbnMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgc3BlY2lhbCBvcHRpbWl6YXRpb25zIG9yIHBhdHRlcm5zIGluIGBhZGRfMm1vZGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIGRvaW5nIHNvbWV0aGluZyBjbGV2ZXIgdG8gYXZvaWQgYSBmdWxsIGRpdmlzaW9uIG9yIG1vZHVsYXIgb3BlcmF0aW9uLCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvd2VyIG9mIDIgbW9kdWx1cy4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGtleSB0YWtlYXdheTsgYXJlIHdlIHNlZWluZyBlZmZpY2llbnQgYml0d2lzZSBtYW5pcHVsYXRpb24gKEFORCwgZXRjLikgdG8gZ2V0IHRoYXQgbW9kIHJlc3VsdCBxdWlja2x5LCBvciBpcyB0aGVyZSBhIHRyaWNraWVyLCBsZXNzIG9idmlvdXMgaW1wbGVtZW50YXRpb24gYmVpbmcgdXNlZCB0aGF0IEkgbmVlZCB0byBkaXNzZWN0P1xuXG5cbiIsIklucHV0VG9rZW5zIjo4MjM1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6NDQuNDI2MTk4NzY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY4NDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfMm1vZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEyNj1zdGF0aWMgYm9vbCBpc191aW1tMzIodTY0IHZhbHVlKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNC1cXHRcXHRpZiAoRFNUICE9IFNSQylcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFxcXFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzU6XFx0XFx0XFx0RU1JVDMoYWRkXzJtb2QoMHg0OCwgRFNULCBTUkMpLCAweDg5LCBhZGRfMnJlZygweEMwLCBEU1QsIFNSQykpOyBcXFxcXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNi1cXHR9IHdoaWxlICgwKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI0OT1zdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTUtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI1NjpzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1Ny17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTYyLVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NjM6XFx0XFx0XFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NjQtXFx0XFx0YjIgPSAweDMxOyAvKiB4b3IgKi9cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMDA0PXN0YXRpYyB2b2lkIGVtaXRfbW92X3JlZyh1OCAqKnBwcm9nLCBib29sIGlzNjQsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDEzLVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMTQ6XFx0XFx0XFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDE1LVxcdFxcdEVNSVQyKDB4ODksIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIHNyY19yZWcpKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMDIxPXN0YXRpYyB2b2lkIGVtaXRfbW92c3hfcmVnKHU4ICoqcHByb2csIGludCBudW1fYml0cywgYm9vbCBpczY0LCB1MzIgZHN0X3JlZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDI4LVxcdFxcdGlmIChudW1fYml0cyA9PSA4KVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDI5OlxcdFxcdFxcdEVNSVQ0KGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBmLCAweGJlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDMwLVxcdFxcdFxcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMS1cXHRcXHRlbHNlIGlmIChudW1fYml0cyA9PSAxNilcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAzMjpcXHRcXHRcXHRFTUlUNChhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwZiwgMHhiZixcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzMy1cXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzQtXFx0XFx0ZWxzZSBpZiAobnVtX2JpdHMgPT0gMzIpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzU6XFx0XFx0XFx0RU1JVDMoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4NjMsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzYtXFx0XFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzktXFx0XFx0aWYgKG51bV9iaXRzID09IDgpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA0MDpcXHRcXHRcXHRFTUlUNChhZGRfMm1vZCgweDQwLCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwZiwgMHhiZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0MS1cXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0My1cXHRcXHRcXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSB8fCBpc19lcmVnKHNyY19yZWcpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDQ0OlxcdFxcdFxcdFxcdEVNSVQxKGFkZF8ybW9kKDB4NDAsIHNyY19yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA0NTpcXHRcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDBmLCBzcmNfcmVnLCBkc3RfcmVnKSwgMHhiZixcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0Ni1cXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTA4OD1zdGF0aWMgdm9pZCBtYXliZV9lbWl0X21vZCh1OCAqKnBwcm9nLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGJvb2wgaXM2NClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDkyLVxcdGlmIChpczY0KVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDkzOlxcdFxcdEVNSVQxKGFkZF8ybW9kKDB4NDgsIGRzdF9yZWcsIHNyY19yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA5NC1cXHRlbHNlIGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwOTU6XFx0XFx0RU1JVDEoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDk2LVxcdCpwcHJvZyA9IHByb2c7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTExND1zdGF0aWMgdm9pZCBlbWl0X2xkeCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjAtXFx0XFx0LyogRW1pdCAnbW92enggcmF4LCBieXRlIHB0ciBbcmF4ICsgb2ZmXScgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEyMTpcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwRiwgMHhCNik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjItXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEyNC1cXHRcXHQvKiBFbWl0ICdtb3Z6eCByYXgsIHdvcmQgcHRyIFtyYXggKyBvZmZdJyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTI1OlxcdFxcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBGLCAweEI3KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEyNi1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTI5LVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMzA6XFx0XFx0XFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgc3JjX3JlZywgZHN0X3JlZyksIDB4OEIpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTMxLVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTM1LVxcdFxcdC8qIEVtaXQgJ21vdiByYXgsIHF3b3JkIHB0ciBbcmF4KzB4MTRdJyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTM2OlxcdFxcdEVNSVQyKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDhCKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEzNy1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTQ0PXN0YXRpYyB2b2lkIGVtaXRfbGRzeCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExNTAtXFx0XFx0LyogRW1pdCAnbW92c3ggcmF4LCBieXRlIHB0ciBbcmF4ICsgb2ZmXScgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTE1MTpcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHgwRiwgMHhCRSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExNTItXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTE1NC1cXHRcXHQvKiBFbWl0ICdtb3ZzeCByYXgsIHdvcmQgcHRyIFtyYXggKyBvZmZdJyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTU1OlxcdFxcdEVNSVQzKGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBGLCAweEJGKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTE1Ni1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTU4LVxcdFxcdC8qIEVtaXQgJ21vdnN4IHJheCwgZHdvcmQgcHRyIFtyYXgrMHgxNF0nICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExNTk6XFx0XFx0RU1JVDIoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4NjMpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTYwLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEyMjU9c3RhdGljIHZvaWQgZW1pdF9zdHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjMzLVxcdFxcdFxcdC8qIEFkZCBleHRyYSBieXRlIGZvciBlcmVncyBvciBTSUwsRElMLEJQTCBpbiBzcmNfcmVnICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyMzQ6XFx0XFx0XFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZyksIDB4ODgpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjM1LVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjM5LVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyNDA6XFx0XFx0XFx0RU1JVDMoMHg2NiwgYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZyksIDB4ODkpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjQxLVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjQ1LVxcdFxcdGlmIChpc19lcmVnKGRzdF9yZWcpIHx8IGlzX2VyZWcoc3JjX3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyNDY6XFx0XFx0XFx0RU1JVDIoYWRkXzJtb2QoMHg0MCwgZHN0X3JlZywgc3JjX3JlZyksIDB4ODkpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjQ3LVxcdFxcdGVsc2VcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMjUwLVxcdGNhc2UgQlBGX0RXOlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMjUxOlxcdFxcdEVNSVQyKGFkZF8ybW9kKDB4NDgsIGRzdF9yZWcsIHNyY19yZWcpLCAweDg5KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTI1Mi1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM3LVxcdFxcdFxcdFxcdC8qIGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTM4OlxcdFxcdFxcdFxcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzOS1cXHRcXHRcXHRcXHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjM5OjQ0LjQ3OTg5MDEzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTgxMzc4Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIGBhZGRgIEluc3RydWN0aW9uIFNlcXVlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBsaW5lOiBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBIbW0sIHRoZSBwcmVjZWRpbmcgY29kZSBzbmlwcGV0IHVzZWQgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYC4gIFRoYXQncyBhIHNsaWdodCB2YXJpYXRpb24sIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW5jZS4gTGV0IG1lIHF1aWNrbHkganVtcCBvdmVyIHRvIHRoZSBkZWZpbml0aW9ucyBmb3IgYm90aCBgYWRkXzFtb2RgIGFuZCBgYWRkXzJtb2RgIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3Qgb25lIG1pZ2h0IGJlIGEgc2ltcGxlciBhZGRpdGlvbiB3aXRoIGEgc2luZ2xlIG9wZXJhbmQsIGFuZCB0aGUgb3RoZXIgYSB0d28tb3BlcmFuZCBhZGRpdGlvbiB3aXRoIGFuIGltbWVkaWF0ZSB2YWx1ZSwgb3Igc29tZXRoaW5nIGFsb25nIHRob3NlIGxpbmVzLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG9wZXJhbmQgdHlwZXMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoaXMgYWRkaXRpb24gZ2V0cyBleGVjdXRlZC4gSSdsbCBjaGVjayBpZiB0aGUgMCBpbiBgYWRkXzJtb2RgIGlzIGEgZGlyZWN0IG9wZXJhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDA2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6Mzk6NDguNjYxMjcyNjQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcdFxcdFxcdCAgQklUKEJQRl9SRUdfRlApKTtcXG4gMjQxOlxcdH1cXG4gMjQyOlxcdFxcbiAyNDM6XFx0c3RhdGljIGJvb2wgaXNfYXhyZWcodTMyIHJlZylcXG4gMjQ0OlxcdHtcXG4gMjQ1OlxcdFxcdHJldHVybiByZWcgPT0gQlBGX1JFR18wO1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHQvKiBBZGQgbW9kaWZpZXJzIGlmICdyZWcnIG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXFxuIDI0OTpcXHRzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcXG4gMjUwOlxcdHtcXG4gMjUxOlxcdFxcdGlmIChpc19lcmVnKHJlZykpXFxuIDI1MjpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI1MzpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjU0OlxcdH1cXG4gMjU1OlxcdFxcbiAyNTY6XFx0c3RhdGljIHU4IGFkZF8ybW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyKVxcbiAyNTc6XFx0e1xcbiAyNTg6XFx0XFx0aWYgKGlzX2VyZWcocjEpKVxcbiAyNTk6XFx0XFx0XFx0Ynl0ZSB8PSAxO1xcbiAyNjA6XFx0XFx0aWYgKGlzX2VyZWcocjIpKVxcbiAyNjE6XFx0XFx0XFx0Ynl0ZSB8PSA0O1xcbiAyNjI6XFx0XFx0cmV0dXJuIGJ5dGU7XFxuIDI2MzpcXHR9XFxuIDI2NDpcXHRcXG4gMjY1OlxcdHN0YXRpYyB1OCBhZGRfM21vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMiwgdTMyIGluZGV4KVxcbiAyNjY6XFx0e1xcbiAyNjc6XFx0XFx0aWYgKGlzX2VyZWcocjEpKVxcbiAyNjg6XFx0XFx0XFx0Ynl0ZSB8PSAxO1xcbiAyNjk6XFx0XFx0aWYgKGlzX2VyZWcoaW5kZXgpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzozOTo0OC42NjE0NjIxNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzODE5ODQyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlzc2VjdGluZyB0aGUgUkVYIFByZWZpeCBhbmQgSW5zdHJ1Y3Rpb24gRW5jb2RpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIEknbSBkZWFsaW5nIHdpdGggaG93IFJFWCBwcmVmaXhlcyBpbnRlcmFjdCB3aXRoIGV4dGVuZGVkIHJlZ2lzdGVycyBpbiB4ODYtNjQgYXNzZW1ibHkuIFRoZSBgYWRkXzFtb2RgIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKEIgYml0KSBvZiB0aGUgUkVYIHByZWZpeCB3aGVuIHRoZSB0YXJnZXQgcmVnaXN0ZXIgKGByZWdgIGluIHRoaXMgY2FzZSkgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgbGlrZSBSOC1SMTUuIFNpbWlsYXJseSwgYGFkZF8ybW9kYCBhbHRlcnMgYm90aCB0aGUgQiBiaXQgKGZvciBgcjFgIGV4dGVuZGVkKSBhbmQgdGhlIFIgYml0IChiaXQgMikgaWYgYHIyYCBpcyBleHRlbmRlZC5cblxuSGFuZyBvbiwgbGV0J3MgY29uc2lkZXIgYSBzcGVjaWZpYyBjYXNlOiBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBIZXJlLCBgcjFgIGlzIDAsIHdoaWNoIGlzIFJBWCwgbm90IGFuIGV4dGVuZGVkIHJlZ2lzdGVyLiBCdXQgYHIyYCBpcyBgZHN0X3JlZ2AuIFNvLCBpZiBgZHN0X3JlZ2AgKmlzKiBhbiBleHRlbmRlZCByZWdpc3RlciwgYGFkZF8ybW9kYCB3aWxsIHNldCB0aGUgUiBiaXQgKHZhbHVlIDQpIGluIHRoZSBSRVggcHJlZml4LlxuXG5MZXQncyByZXZpZXcgdGhlIFJFWCBwcmVmaXggZm9ybWF0OiBJdCdzIDB4NDAgT1InZCB3aXRoIHRoZSBXLCBSLCBYLCBhbmQgQiBiaXRzLiBXIGNvbnRyb2xzIG9wZXJhbmQgc2l6ZSwgUiByZWZlcnMgdG8gdGhlIE1vZFJNIHJlZyBmaWVsZCwgWCByZWZlcnMgdG8gdGhlIFNJQiBpbmRleCBmaWVsZCwgYW5kIEIgY29udHJvbHMgdGhlIE1vZFJNIHIvbSBmaWVsZCwgU0lCIGJhc2UgZmllbGQsIG9yIG9wY29kZSByZWdpc3RlciBmaWVsZC5cblxuTG9va2luZyBhdCB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG5FTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XG5FTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG5gYGBcblxuYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCBzZXRzIHRoZSBCIGJpdCBpZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHdoaWNoIGlzIGNsZWFyLiBCdXQsIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gaXMgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIExldCdzIGxvb2sgYXQgdGhlIE1vZFJNIGJ5dGU6IGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuIE9rYXksIG5vdyBsZXQncyByZWZlciB0byB0aGUgZGVmaW5pdGlvbiBvZiBgYWRkXzJyZWdgLiBJdCBsb29rcyBsaWtlIHRoYXQgaXMgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MzksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MDowMC4wNDM0NDk5ODZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFx0XFx0Ynl0ZSB8PSAyO1xcbiAyNzE6XFx0XFx0aWYgKGlzX2VyZWcocjIpKVxcbiAyNzI6XFx0XFx0XFx0Ynl0ZSB8PSA0O1xcbiAyNzM6XFx0XFx0cmV0dXJuIGJ5dGU7XFxuIDI3NDpcXHR9XFxuIDI3NTpcXHRcXG4gMjc2OlxcdC8qIEVuY29kZSAnZHN0X3JlZycgcmVnaXN0ZXIgaW50byB4ODYtNjQgb3Bjb2RlICdieXRlJyAqL1xcbiAyNzc6XFx0c3RhdGljIHU4IGFkZF8xcmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnKVxcbiAyNzg6XFx0e1xcbiAyNzk6XFx0XFx0cmV0dXJuIGJ5dGUgKyByZWcyaGV4W2RzdF9yZWddO1xcbiAyODA6XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHQvKiBFbmNvZGUgJ2RzdF9yZWcnIGFuZCAnc3JjX3JlZycgcmVnaXN0ZXJzIGludG8geDg2LTY0IG9wY29kZSAnYnl0ZScgKi9cXG4gMjgzOlxcdHN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXFxuIDI4NDpcXHR7XFxuIDI4NTpcXHRcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ10gKyAocmVnMmhleFtzcmNfcmVnXSBcXHUwMDNjXFx1MDAzYyAzKTtcXG4gMjg2OlxcdH1cXG4gMjg3OlxcdFxcbiAyODg6XFx0LyogU29tZSAxLWJ5dGUgb3Bjb2RlcyBmb3IgYmluYXJ5IEFMVSBvcGVyYXRpb25zICovXFxuIDI4OTpcXHRzdGF0aWMgdTggc2ltcGxlX2FsdV9vcGNvZGVzW10gPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQwOjAwLjA0MzYzNzYxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTg2MjE2NjYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBIENyaXRpY2FsIFg4NiBCUEYgSklUIEJ1ZyBhbmQgaXRzIFJlc29sdXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IHRoaXMgc3RyYWlnaHQuIEkgd2FzIGxvb2tpbmcgYXQgdGhpcyBgYWRkXzJyZWdgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcgd2Fzbid0IHJpZ2h0LiBJbml0aWFsbHksIEkgdGhvdWdodCBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgIHBsYWNlZCBgZHN0X3JlZ2AgaW4gdGhlIGBzcmNfcmVnYCBwb3NpdGlvbiAoc2hpZnRlZCBieSAzKSwgbWVhbmluZyB0aGUgYHJlZ2AgZmllbGQgb2YgdGhlIE1vZFJNIGJ5dGUuIEJ1dCB0aGVuIEkgbG9va2VkIGFnYWluLCBhbmQgYGFkZF8ycmVnKGJ5dGUsIGRzdF9yZWcsIHNyY19yZWcpYCBkb2VzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LCBhZGRpbmcgYGJ5dGVgLCBgcmVnMmhleFtkc3RfcmVnXWAgYW5kIGByZWcyaGV4W3NyY19yZWddYCBsZWZ0LXNoaWZ0ZWQgYnkgMy5cblxuSXQgc3RhcnRlZCB0byBjbGljay4gYDB4MDRgIGlzIHRoZSBNb2RSTSBieXRlLCBhbmQgYHJlZzJoZXhbMF1gIGlzIGp1c3QgYDBgIChSQVgpLiBUaGUgYHJlZ2AgZmllbGQgb2YgTW9kUk0gc2hvdWxkIGJlIGBkc3RfcmVnYCAtIGJ1dCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoICpob3cqIHRoYXQgZW5jb2RpbmcgaXMgaGFwcGVuaW5nLiBgcmVnMmhleFtkc3RfcmVnXWAgaXMgYWRkZWQgZGlyZWN0bHksIHdoaWNoIHNldHMgdGhlIGxvd2VyIDMgYml0cyBmb3IgdGhlIHIvbSBmaWVsZCBhbmQgbm90IHRoZSByZWcgZmllbGQuXG5cblRoZW4sIEkgZm9jdXNlZCBvbiB0aGUgUkVYIHByZWZpeC4gV2hlbiBgZHN0X3JlZ2AgaXMgZXh0ZW5kZWQgKFI4LVIxNSksIGl0J3Mgc3VwcG9zZWQgdG8gc2V0IHRoZSBSIGJpdCAoYml0IDIsIHZhbHVlIDQpLiBCdXQsIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgd2FzIHNldHRpbmcgdGhlIEIgYml0IChiaXQgMCwgdmFsdWUgMSkgaW5zdGVhZCEgVGhpcyBtZWFucyBgYWRkXzFtb2RgIHdhcyBzZXR0aW5nIHRoZSAqd3JvbmcqIGJpdCBpbiB0aGUgUkVYIHByZWZpeC5cblxuVGhpcyBtZWFucyB0aGF0IGlmIGBkc3RfcmVnYCB3YXMgUjgsIHRoZSBpbnN0cnVjdGlvbiB3YXMgdXNpbmcgUkFYIGZvciB0aGUgYHJlZ2AgZmllbGQgYW5kIFI4IGZvciB0aGUgYHIvbWAgZmllbGQsIHdoaWNoIHNob3VsZCBub3QgaGF2ZSBiZWVuIHRoZSBjYXNlLiBUaGUgYHIvbWAgZmllbGQgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIFNJQiBieXRlIGluZGljYXRvciAoMHgwNCBtZWFucyBTSUIgZm9sbG93cykuXG5cblRoZSByb290IGNhdXNlOiB0aGUgZnVuY3Rpb24gd2Fzbid0IHByb3Blcmx5IHNldHRpbmcgdGhlIFIgYml0ISBUaGlzIHJlc3VsdGVkIGluIGEgY29tcGxldGUgbWlzaW50ZXJwcmV0YXRpb24gb2YgZXh0ZW5kZWQgcmVnaXN0ZXJzLCBsZWFkaW5nIHRvIGluY29ycmVjdCBpbnN0cnVjdGlvbiBlbmNvZGluZy4gIElmIGBkc3RfcmVnYCB3YXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHRoZSBpbnN0cnVjdGlvbiB3YXMgZW5jb2Rpbmcgc29tZXRoaW5nIGxpa2UgYGFkZCByOCwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gIHdoZW4gaXQgc2hvdWxkbid0LiBUaGlzIGlzIGEgcHJldHR5IG1ham9yIGJ1ZyBpbiB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgeDg2LlxuXG5UaGUgZml4PyBJIG5lZWQgdG8gY2hhbmdlIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgdG8gYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gIEkgcmVjaGVja2VkIGBhZGRfMm1vZGA6XG5gYGBjXG5zdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXG57XG5cdGlmIChpc19lcmVnKHIxKSlcblx0XHRieXRlIHw9IDE7XG5cdGlmIChpc19lcmVnKHIyKSlcblx0XHRieXRlIHw9IDQ7XG5cdHJldHVybiBieXRlO1xufVxuYGBgXG5cbk5vdywgYHIyYCBjb3JyZWN0bHkgc2V0cyBiaXQgMiAodGhlIFIgYml0KSB3aGVuIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciEgVGhpcyBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgaW4gdGhlIFJFWCBwcmVmaXguXG5cblRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIHRlc3QgaXQgYW5kIGZ1enogaXQuICBJIG5lZWQgdG8gZnV6eiBCUEYgcHJvZ3JhbXMgdGhhdCB1c2UgYG1vdl9wZXJjcHVfYWRkcmAgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMgb24geDg2LiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGJlY2F1c2UgYGRvX2ppdGAgaXMgc3RhdGljLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MDoxOS45MDU4MTI5MTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTA3NDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk1MD1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zOTYxLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTYyOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5NjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MDoyMC4zMzA4OTg1OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU2ODg1Nzc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYODYgQlBGIEpJVCBDb21waWxhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBicGZfaW50X2ppdF9jb21waWxlYCBmdW5jdGlvbjsgdGhhdCdzIHRoZSBjb3JlIEpJVCBjb21waWxlciBmb3IgeDg2LCByaWdodD8gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCdzIHNlZS4uLiBvYnZpb3VzbHkgYENPTkZJR19CUEZfSklUYCBpcyBhIG11c3QuIEJ1dCB0aGVyZSdzIG1vcmUuIFdhaXQsIEkgc2VlIHRoaXMgYCNpZmRlZiBDT05GSUdfU01QYCBibG9jay4uLiBhbmQgaXQncyBlbWl0dGluZyBzb21lIGlubGluZSBhc3NlbWJseSBmb3Igd2hhdCBsb29rcyBsaWtlIENQVS1zcGVjaWZpYyBvZmZzZXQgaGFuZGxpbmcuIE9rYXksIHNvIHRoYXQgbWVhbnMgYENPTkZJR19TTVBgIGlzIGFsc28gZXNzZW50aWFsLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoYXQgYmxvY2suIEl0IGxvb2tzIGxpa2UgaXQgaXMgZ2VuZXJhdGluZyBhbiBgYWRkYCBpbnN0cnVjdGlvbiB0byBoYW5kbGUgc29tZSBzb3J0IG9mIHBlci1DUFUgb2Zmc2V0LlxuXG5gQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBwcm9iYWJseSBhbHNvIGEgcmVxdWlyZW1lbnQuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6MjguODk5NzU5OTYyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg2MDk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2NvbXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvTWFrZWZpbGU9OD1lbHNlXFxuYXJjaC94ODYvbmV0L01ha2VmaWxlOjk6ICAgICAgICBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5hcmNoL3g4Ni9uZXQvTWFrZWZpbGUtMTAtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6MjguOTQ3NjI4MDYxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDY2ODQyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBgQ09ORklHX0JQRl9KSVRgIOKAkyB5ZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBhIGhhcmQgcmVxdWlyZW1lbnQuIE5vIHF1ZXN0aW9uIHRoZXJlLiBOb3csIGxldCdzIHNlZS4uLiBgQ09ORklHX1NNUGAgaXMgcHJhY3RpY2FsbHkgYSBnaXZlbiB0aGVzZSBkYXlzLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgaW5jbHVkZSBpdCBleHBsaWNpdGx5LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG1pZ2h0IGJlIG1pc3Npbmc/IEdvdHRhIGJlIGRpbGlnZW50LlxuXG5MZXQgbWUgc2Vl4oCmIEnigJlsbCBkbyBhIHF1aWNrIGNoZWNrIG9mIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAuIFRoYXQgZnVuY3Rpb27igJlzIHJlbGF0ZWQgdG8gYEJQRl9BRERSX1BFUkNQVWAsIHdoaWNoIGlzIGEga2V5IGNvbXBvbmVudCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGluZ3MgYXJlIHNldCB1cC4gQWgsIGFuZCBoZXJlIHdlIGFyZSwgbm93LCB3aGVyZSBkb2VzIGBCUEZfQUREUl9QRVJDUFVgIGNvbWUgZnJvbSBhZ2Fpbj8gV2hlcmUgaXMgdGhhdCB2YWx1ZSBnZW5lcmF0ZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4gdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcncyBsaW5lZCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6MzQuODk0MzE1NTc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA3NjY4OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9BRERSX1BFUkNQVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTg5LSAqIGRzdF9yZWcgPSBzcmNfcmVnICsgXFx1MDAzY3BlcmNwdV9iYXNlX29mZlxcdTAwM2VcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjE5MDogKiBCUEZfQUREUl9QRVJDUFUgaXMgdXNlZCBhcyBhIHNwZWNpYWwgaW5zbi1cXHUwMDNlb2ZmIHZhbHVlLlxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTkxLSAqL1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTkyOiNkZWZpbmUgQlBGX0FERFJfUEVSQ1BVXFx0KC0xKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTkzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xOTgtXFx0XFx0LnNyY19yZWcgPSBTUkMsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTk5OlxcdFxcdC5vZmYgICA9IEJQRl9BRERSX1BFUkNQVSxcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDAtXFx0XFx0LmltbSAgID0gMCB9KVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0yMDI9c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDQ6XFx0cmV0dXJuIGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCkgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IEJQRl9BRERSX1BFUkNQVTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwNS19XFxuLS1cXG5rZXJuZWwvYnBmL2Rpc2FzbS5jPTE2OT1zdGF0aWMgYm9vbCBpc19hZGRyX3NwYWNlX2Nhc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9kaXNhc20uYy0xNzYtICogZHN0X3JlZyA9IHNyY19yZWcgKyBcXHUwMDNjcGVyY3B1X2Jhc2Vfb2ZmXFx1MDAzZVxcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTc3OiAqIEJQRl9BRERSX1BFUkNQVSBpcyB1c2VkIGFzIGEgc3BlY2lhbCBpbnNuLVxcdTAwM2VvZmYgdmFsdWUuXFxua2VybmVsL2JwZi9kaXNhc20uYy0xNzgtICovXFxua2VybmVsL2JwZi9kaXNhc20uYzoxNzk6I2RlZmluZSBCUEZfQUREUl9QRVJDUFVcXHQoLTEpXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODAtXFxua2VybmVsL2JwZi9kaXNhc20uYz0xODE9c3RhdGljIGlubGluZSBib29sIGlzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODIte1xcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTgzOlxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XFxua2VybmVsL2JwZi9kaXNhc20uYy0xODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MDozNi42MDE5OTE2OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNzE1NzY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIEluc3RydWN0aW9uIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIEJQRiBpbnN0cnVjdGlvbnMuIE15IHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBvciB0aGUgYnJvYWRlciBjb250ZXh0IHdoZXJlIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAgaXMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBgL2tlcm5lbC9icGYvYCBkaXJlY3RvcnkuIEknbSBsaWtlbHkgbG9va2luZyBmb3IgdXNlcyBvZiB0aG9zZSBtYWNyb3Mgb3IgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IHBlci1DUFUgcmVnaXN0ZXJzIGFuZCBtZW1vcnkgYWRkcmVzc2luZyBhcmUgaGFuZGxlZCB3aXRoaW4gQlBGIHByb2dyYW1zLiBJJ20gcHJvYmFibHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHJlZ2lzdGVycyBiZWhhdmUsIHdoYXQncyBkb25lIHdpdGggdGhlbSwgYW5kIG1heWJlIHRvIGRlYnVnIHNvbWUgb2JzZXJ2ZWQgYmVoYXZpb3IuIE9yLCBJIG1pZ2h0IGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYnVncy4gTXkgZm9jdXMgaXMgcmVhbGx5IG9uIHdoZXJlIGFuZCBob3cgdGhlc2UgY29uY2VwdHMgYXJlIHV0aWxpemVkIGluIHRoYXQgc3BlY2lmaWMga2VybmVsIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NDMuMzA5MTUyNjI1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg2NDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfTU9WNjRfUEVSQ1BVX1JFR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmM9Mjk0PXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzE4LVxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MzE5OlxcdCppbnNuKysgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTMyMC1cXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTUwMz1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjMtXFx0XFx0XFx0aW5zbl9idWZbMF0gPSBpbnNuWzFdO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg2NDpcXHRcXHRcXHRpbnNuX2J1ZlsxXSA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg2NS1cXHRcXHRcXHRjbnQgPSAyO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTc2LVxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmNwdV9udW1iZXIpO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MjE3NzpcXHRcXHRcXHRpbnNuX2J1ZlsxXSA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNzgtXFx0XFx0XFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTk4LVxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNmN1cnJlbnRfdGFzayk7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTk5OlxcdFxcdFxcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIwMC1cXHRcXHRcXHRpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjQxND1zdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDI3LVxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDI4OlxcdCppbnNuKysgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NDMuMzU5MDIzNjEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MjEzMDQxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGlzIGNvbnN0cnVjdCBiZWluZyB1c2VkIGluIGEgZmV3IHBsYWNlczogYHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cGAsIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAsIGFuZCBhbHNvLCBub3RhYmx5LCBpbiBgYnBmX2RvX21pc2NfZml4dXBzYCB3aGVuIGRlYWxpbmcgd2l0aCBgYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkYCBhbmQgYGJwZl9nZXRfY3VycmVudF90YXNrYC4gV2FpdCBhIG1pbnV0ZSwgSSBqdXN0IG5vdGljZWQgc29tZXRoaW5nIC0gYGJwZl9kb19taXNjX2ZpeHVwc2AgYWN0dWFsbHkgdXNlcyBgQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApYC5cblxuVGhhdCdzIHVzaW5nIGBCUEZfUkVHXzBgLCB3aGljaCB0cmFuc2xhdGVzIHRvIFJBWC4gQW5kIFJBWCBpc24ndCBhbiBleHRlbmRlZCByZWdpc3Rlciwgc28gdGhlcmUgaXMgdGhlIHByb2JsZW0sIEkgdGhpbmsuIFRoaXMgYnVnIG9ubHkgYWZmZWN0cyB0aGUgZXh0ZW5kZWQgcmVnaXN0ZXJzIC0gUjggdGhyb3VnaCBSMTUuIFdoZXJlIGlzIGBCUEZfTU9WNjRfUEVSQ1BVX1JFR2AgYWN0dWFsbHkgKnVzZWQqIHdpdGggYW4gZXh0ZW5kZWQgcmVnaXN0ZXI/IEknbSBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLlxuXG5BaCwgaGVyZSBpdCBpcy4gSW4gYGJwZl9kb19taXNjX2ZpeHVwc2A6XG5cbmBgYGNcblx0XHRcdGluc25fYnVmWzBdID0gaW5zblsxXTtcblx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuXHRcdFx0Y250ID0gMjtcbmBgYFxuXG5SaWdodCwgaXQncyBtb2RpZnlpbmcgdGhlIGluc3RydWN0aW9uIGluIHBsYWNlLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgYGJwZl9kb19taXNjX2ZpeHVwc2AgYXJvdW5kIGxpbmUgMTg2MyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NTEuNzgwMzMwMjE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NTA6XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuMTg1MTpcXHRcXG4xODUyOlxcdFxcdFxcdFxcdHByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCA9IHRydWU7XFxuMTg1MzpcXHRcXG4xODU0OlxcdFxcdFxcdFxcdC8qXFxuMTg1NTpcXHRcXHRcXHRcXHQgKiBXZSBhcmUgKnNraXBwaW5nKiBmaXJzdCBoYWxmIG9mIGxkX2ltbTY0IGluc25cXG4xODU2OlxcdFxcdFxcdFxcdCAqIHdpdGggJ2krKzsnLCBwYXRjaGluZyBvdmVyIHNlY29uZCBoYWxmIG9mIGl0XFxuMTg1NzpcXHRcXHRcXHRcXHQgKiB3aXRoIHRoYXQgc2FtZSBoYWxmICsgbW92NjRfcGVyY3B1X3JlZyBpbnNuLlxcbjE4NTg6XFx0XFx0XFx0XFx0ICogQWxsIGJlY2F1c2UgYnBmX3BhdGNoX2luc25fZGF0YSgpIGNhbiBvbmx5XFxuMTg1OTpcXHRcXHRcXHRcXHQgKiByZXBsYWNlIG9uZSA4LWJ5dGUgaW5zbiwgd2hpY2ggZG9lcyBub3Qgd29ya1xcbjE4NjA6XFx0XFx0XFx0XFx0ICogd2VsbCBmb3IgbGRfaW1tNjQgaW5zbi5cXG4xODYxOlxcdFxcdFxcdFxcdCAqL1xcbjE4NjI6XFx0XFxuMTg2MzpcXHRcXHRcXHRcXHRpbnNuX2J1ZlswXSA9IGluc25bMV07XFxuMTg2NDpcXHRcXHRcXHRcXHRpbnNuX2J1ZlsxXSA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbjE4NjU6XFx0XFx0XFx0XFx0Y250ID0gMjtcXG4xODY2OlxcdFxcbjE4Njc6XFx0XFx0XFx0XFx0aSsrO1xcbjE4Njg6XFx0XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4xODY5OlxcdFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuMTg3MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODcxOlxcdFxcbjE4NzI6XFx0XFx0XFx0XFx0ZGVsdGEgICAgKz0gY250IC0gMTtcXG4xODczOlxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcXG4xODc0OlxcdFxcdFxcdFxcdGluc24gICAgICA9IG5ld19wcm9nLVxcdTAwM2VpbnNuc2kgKyBpICsgZGVsdGE7XFxuMTg3NTpcXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG4xODc2OlxcdFxcdFxcdH1cXG4xODc3OlxcdFxcbjE4Nzg6XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkpXFxuMTg3OTpcXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NTEuNzgwNDY5NzE1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjMxNzk4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBCbG9jaydzIExvZ2ljKipcblxuQWxyaWdodCwgSSBzZWUgdGhpcyBjb25kaXRpb25hbCBibG9jaywgYW5kIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IGl0cyBjb3JlIGxvZ2ljLiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgXCJXaGF0J3MgdGhlICpleGFjdCogY29uZGl0aW9uIHRoYXQgdHJpZ2dlcnMgdGhpcyB0aGluZz9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgJ3doeScgYmVoaW5kIGl0cyBleGVjdXRpb24uIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIEknbSBnb2luZyB0byBzdGFydCBieSBzZXR0aW5nIGEgdGVtcG9yYWwgYW5jaG9yLiBBbnl0aGluZyBiZWZvcmUgMTg1MCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gYXNzZXNzIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBibG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb250ZXh0IHRvIGJldHRlciBldmFsdWF0ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQwOjU3LjE0MzY1MzgxNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9maXh1cHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODMwOlxcdFxcbjE4MzE6XFx0XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4xODMyOlxcdFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuMTgzMzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODM0OlxcdFxcbjE4MzU6XFx0XFx0XFx0XFx0ZGVsdGEgKz0gY250IC0gMTtcXG4xODM2OlxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcXG4xODM3OlxcdFxcdFxcdFxcdGluc24gPSBuZXdfcHJvZy1cXHUwMDNlaW5zbnNpICsgaSArIGRlbHRhO1xcbjE4Mzg6XFx0XFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuMTgzOTpcXHRcXHRcXHR9XFxuMTg0MDpcXHRcXG4xODQxOlxcdFxcdFxcdGlmIChicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkgXFx1MDAyNlxcdTAwMjZcXG4xODQyOlxcdFxcdFxcdCAgICBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfTEQgfCBCUEZfSU1NIHwgQlBGX0RXKSBcXHUwMDI2XFx1MDAyNlxcbjE4NDM6XFx0XFx0XFx0ICAgIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX1ZBTFVFIHx8XFxuMTg0NDpcXHRcXHRcXHQgICAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYX1ZBTFVFKSkge1xcbjE4NDU6XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcXG4xODQ2OlxcdFxcbjE4NDc6XFx0XFx0XFx0XFx0YXV4ID0gXFx1MDAyNmVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpICsgZGVsdGFdO1xcbjE4NDg6XFx0XFx0XFx0XFx0bWFwID0gZW52LVxcdTAwM2V1c2VkX21hcHNbYXV4LVxcdTAwM2VtYXBfaW5kZXhdO1xcbjE4NDk6XFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSlcXG4xODUwOlxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dF9pbnNuO1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRcXHRcXHRwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQgPSB0cnVlO1xcbjE4NTM6XFx0XFxuMTg1NDpcXHRcXHRcXHRcXHQvKlxcbjE4NTU6XFx0XFx0XFx0XFx0ICogV2UgYXJlICpza2lwcGluZyogZmlyc3QgaGFsZiBvZiBsZF9pbW02NCBpbnNuXFxuMTg1NjpcXHRcXHRcXHRcXHQgKiB3aXRoICdpKys7JywgcGF0Y2hpbmcgb3ZlciBzZWNvbmQgaGFsZiBvZiBpdFxcbjE4NTc6XFx0XFx0XFx0XFx0ICogd2l0aCB0aGF0IHNhbWUgaGFsZiArIG1vdjY0X3BlcmNwdV9yZWcgaW5zbi5cXG4xODU4OlxcdFxcdFxcdFxcdCAqIEFsbCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBjYW4gb25seVxcbjE4NTk6XFx0XFx0XFx0XFx0ICogcmVwbGFjZSBvbmUgOC1ieXRlIGluc24sIHdoaWNoIGRvZXMgbm90IHdvcmtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDA6NTcuMTQzODE1MDk2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzA0NTM2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBCUEYgQnVnKipcblxuT2theSwgc28gSSd2ZSBnb3QgaXQuIFRoaXMgaXMgYWJvdXQgYSBuYXN0eSBsaXR0bGUgYnVnIHRyaWdnZXJlZCBieSBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAgbWFwIHZhbHVlcyBiZWluZyBsb2FkZWQgdXNpbmcgYEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFdgIGFuZCBgQlBGX1BTRVVET19NQVBfVkFMVUVgLiBDbGFzc2ljISBJdCdzIGEgdmVyeSBzcGVjaWZpYyBzY2VuYXJpbywgYnV0IGRlZmluaXRlbHkgZXhwbG9pdGFibGUuXG5cbkJhc2ljYWxseSwgd2hlbiBhIEJQRiBwcm9ncmFtIHRyaWVzIHRvIGxvYWQgYSBwZXItY3B1IGFycmF5IG1hcCB2YWx1ZSBkaXJlY3RseSBpbnRvIGEgcmVnaXN0ZXIg4oCTIHNwZWNpZmljYWxseSwgaXQgdXNlcyBgQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpYCDigJMgdGhlcmUncyBhIHByb2JsZW0uIElmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciwgYGluc24tXHUwMDNlZHN0X3JlZ2AsIGhhcHBlbnMgdG8gYmUgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIGxpa2UgUjggb3IgaGlnaGVyLCBpdCBraWNrcyBvZmYgdGhpcyBidWcuXG5cblNvLCBsb2FkaW5nIHRoYXQgcGVyLWNwdSBhcnJheSB2YWx1ZSBpbnRvIGFueSByZWdpc3RlciBiZXR3ZWVuIFI4IGFuZCBSMTUgaXMgdGhlIHRyaWdnZXIuIFRoYXQncyBhIHZlcnkgbmFycm93LCB5ZXQgcXVpdGUgcmVhY2hhYmxlIHBhdGggdGhhdCBtYWtlcyBpdCBhbiBpbW1lZGlhdGUgcHJpb3JpdHkuIFdlJ3JlIGRlZmluaXRlbHkgZnV6emluZyB0aGlzLCBubyBxdWVzdGlvbi5cblxuQXMgZm9yIGNvbmZpZ3VyYXRpb25zLCB3ZSdsbCBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0JQRl9KSVRgLCBhbmQgYENPTkZJR19TTVBgLiBKdXN0IHlvdXIgYmFzaWMgQlBGIHJlcXVpcmVtZW50cy5cblxuSGFuZyBvbi4uLmBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKClgIGlzIHRydWUgb24geDg2LCB3aGljaCBpcyBjcnVjaWFsIGhlcmUuIEFscmlnaHQsIGJlc3QgdG8gZ28gdmVyaWZ5IGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuYC4gV2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGluZ3JlZGllbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM0NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQxOjAzLjI3NDI3MzEzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MjM1NjkyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0zMzEwPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMzMjMtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzMyNDpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMzI1LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTU2PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTcxLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NTcyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTczLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MjEzMz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTEtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTUyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE1My17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDE3Nz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MTgxLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MTgyOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MTgzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTIzNz1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZCk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMjM4OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMzktYm9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MjYyPXN0YXRpYyBpbnQgcGVyY3B1X2FycmF5X21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yNjUtXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjI2NjpcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMjY3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0yNzc9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2RpcmVjdF92YWx1ZV9tZXRhKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbW0sIHUzMiAqb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI4MS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MjgyOlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0yODMtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTI5ND1zdGF0aWMgaW50IHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTI5OC1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6Mjk5OlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zMDAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzI3NT1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjc5LVxcbmtlcm5lbC9icGYvY29yZS5jOjMyODA6Ym9vbCBfX3dlYWsgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbih2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMyODEte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNTAzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0MC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4NDE6XFx0XFx0aWYgKGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg0Mi1cXHRcXHQgICAgaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8IEJQRl9EVykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0MTQ9c3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjQxNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDE4OlxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MTktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2Njk1PWJvb2wgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgczMyIGltbSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjcwMy0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY3MDQ6XFx0XFx0cmV0dXJuIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaml0X3JlcXVlc3RlZCBcXHUwMDI2XFx1MDAyNiBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NzA1LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MTowNC44NTY2Mzc1NzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2ODk4MTE1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEpJVCBDb21waWxlciBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbmAgZnVuY3Rpb24g4oCTIEkga25vdyBpdCdzIGRlZmluZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHNvIHRoYXQncyBteSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGJldHRlciwgc28gbGV0J3MgY2hlY2sgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgZG9faml0YC4gTXkgZ3V0IHRlbGxzIG1lIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUga2V5IOKAkyBpdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBjb21waWxpbmcgYSBCUEYgcHJvZ3JhbSB3aXRoIHRoZSBKSVQuIEhtbSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBjcml0aWNhbD8gQWgsIHllcywgYGJwZl9kb19taXNjX2ZpeHVwc2AsIHRoYXQncyB3aGVyZSB0aGUgYWN0dWFsIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkISBBbmQsIHdhaXQsIGJvdGggYHBlcmNwdV9hcnJheV9tYXBfZ2VuX2xvb2t1cGAgYW5kIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAgYWxzbyBjb250cmlidXRlIGluc3RydWN0aW9uIGdlbmVyYXRpb24uIEJ1dCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHJlbWFpbnMgdGhlIGNvcmUgZm9jdXMgZm9yIG5vdy5cblxuTGV0IG1lIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgU01QYCBhcmUgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy5cblxuT2theSwgc28gdGhlIGNoYW5nZSBJJ20gbG9va2luZyBhdCAqaXMqIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJdCBoaW5nZXMgb24gYENPTkZJR19CUEZfSklUYCwgb2J2aW91c2x5LiBBbmQsIGZyb20gbG9va2luZyBhdCBgZG9faml0YCwgSSBzZWUgYENPTkZJR19TTVBgIGlzIHJlcXVpcmVkIGZvciB0aGUgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBibG9jay4gV2FpdCBhIHNlY29uZC4uLiBpZiBgQ09ORklHX1NNUGAgaXMgKm5vdCogZW5hYmxlZCwgdGhhdCBlbnRpcmUgc2VjdGlvbiBvZiBgZG9faml0YCBlZmZlY3RpdmVseSBkb2VzIG5vdGhpbmc/IEknZCBiZXR0ZXIgcmUtZXhhbWluZSBgZG9faml0YCBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ1NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MToxOC41NDY0NTE5OTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTMwOlxcdFxcdFxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCBBVVhfUkVHLCBkc3RfcmVnLCB0cnVlKTtcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdEVNSVQzKDB4MEYsIDB4NDQsIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIGRzdF9yZWcpKTtcXG4xOTMyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5MzM6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbjE5MzQ6XFx0XFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcbjE5MzU6XFx0XFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuMTkzNjpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbjE5Mzc6XFx0XFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuMTkzODpcXHRcXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XFxuMTkzOTpcXHRcXHRcXHRcXHRcXHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XFxuMTk0MDpcXHRcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuMTk0MTpcXHQjZW5kaWZcXG4xOTQyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NDM6XFx0XFx0XFx0XFx0fVxcbjE5NDQ6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTk0NTpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XFxuMTk0NjpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDApXFxuMTk0NzpcXHRcXHRcXHRcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csXFxuMTk0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXFxuMTk0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MToxOC41NDY2NDI0NzRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNDIxNDQ1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBvdGVudGlhbCBCdWcqKlxuXG5Pa2F5LCBzbyBpZiBgQ09ORklHX1NNUGAgaXMgb2ZmLCB0aGUgY29kZSBwYXRoIGp1c3QgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBgRU1JVF9tb3ZgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGBDT05GSUdfU01QYCBpcyBhIGtleSByZXF1aXJlbWVudCBmb3IgdHJpZ2dlcmluZyB0aGlzIGJ1Zy4gSSdtIGFsc28gc2VlaW5nIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyBuZWNlc3NhcnkgdG8gZXZlbiBjb21waWxlIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCBhbmQsIG9idmlvdXNseSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUgdG8gKnVzZSogQlBGLlxuXG5Ob3csIGhvbGQgb24uIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB0aGUgcHJpbWFyeSBKSVQgY29tcGlsYXRpb24gZnVuY3Rpb24sIGJ1dCBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhlIG9idmlvdXMuIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGNvbXBpbGF0aW9uIHBpcGVsaW5lIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IEFoLCBoZXJlJ3Mgb25lOiBgYnBmX2RvX21pc2NfZml4dXBzYC4gVGhpcyBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBgQlBGX01PVjY0X1BFUkNQVV9SRUdgIGluc3RydWN0aW9uLiBEZWZpbml0ZWx5IGEgcGxhY2UgdG8gZm9jdXMuIEknbGwgbmVlZCB0byBjaGVjayBgYnBmX2RvX21pc2NfZml4dXBzYCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AgdG8gc2VlIGlmIGl0J3MgdGhlIHNvdXJjZSBvZiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDE6MjguNTg4Nzg5OTA5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkyMDcyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2RvX21pc2NfZml4dXBzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03OC1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc5OlxcdC8qIGFkZHJlc3Mgc3BhY2UgY2FzdHMgY29udmVydGVkIHRvIEJQRl9BTFUsIHNlZSBicGZfZG9fbWlzY19maXh1cHMoKSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmMtODAtXFx0aWYgKGlzX2FkZHJfc3BhY2VfY2FzdDMyKHByb2csIGluc24pKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNDc0PXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDItICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNTAzOmludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDQte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMTUzPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzc0LVxcdGlmIChyZXQgPT0gMClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzNzU6XFx0XFx0cmV0ID0gYnBmX2RvX21pc2NfZml4dXBzKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MToyOS4wMTgwMDI2MTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI1OTg4NTIyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgRml4KipcblxuT2theSwgYGJwZl9kb19taXNjX2ZpeHVwc2AgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbi4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29yZSBpc3N1ZSBoZXJlLlxuXG5SaWdodCwgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIGhhZCBhIGJ1ZyByZWxhdGVkIHRvIGBtb3ZfcGVyY3B1X2FkZHJgLiBJdCBzZWVtcyB0aGUgY29tcGlsZXIgd2FzIGdldHRpbmcgdGhlIFJFWCBwcmVmaXggd3Jvbmcgd2hlbiBkZWFsaW5nIHdpdGggcGVyLUNQVSBtYXAgdmFsdWUgbG9hZHMgYW5kIGV4dGVuZGVkIHJlZ2lzdGVycyAoUjgtUjE1KSBhcyB0aGUgZGVzdGluYXRpb24uIFNwZWNpZmljYWxseSwgdGhleSB3ZXJlIHVzaW5nIGBhZGRfMW1vZGAgd2hlbiB0aGV5IHNob3VsZCBoYXZlIGJlZW4gdXNpbmcgYGFkZF8ybW9kYC4gYGFkZF8xbW9kYCBzZXRzIHRoZSBcIkJcIiBiaXQsIHdoaWxlIGBhZGRfMm1vZGAgY29ycmVjdGx5IHNldHMgdGhlIFwiUlwiIGJpdCBmb3IgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSBgYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gIGluc3RydWN0aW9uLiBUaGlzIHJlc3VsdGVkIGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSwgd2l0aCBwb3RlbnRpYWxseSBuYXN0eSBjb25zZXF1ZW5jZXMgLSBtZW1vcnkgY29ycnVwdGlvbiBvciBpbnZhbGlkIGluc3RydWN0aW9uIGZhdWx0cyBpbiBKSVQtY29tcGlsZWQgQlBGIHByb2dyYW1zLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYFNNUGAuIFN0YW5kYXJkIHN0dWZmLCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSB1c2FnZSBvZiBgYWRkXzJtb2RgIHdpdGhpbiBgZG9faml0YC4gSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGxpa2UgdGhpczpcblxuYGBgY1xuRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuYGBgXG5cbk9rYXksIHNvIGBhZGRfMm1vZGAgdGFrZXMgdGhyZWUgYXJndW1lbnRzOiBgYnl0ZWAsIGByMWAsIGFuZCBgcjJgLiBJbiB0aGlzIGNhc2UsIGByMWAgaXMgMCwgYW5kIGByMmAgaXMgYGRzdF9yZWdgLiBJZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHRoaXMgc2hvdWxkIGNvcnJlY3RseSBzZXQgdGhlIFIgYml0IChiaXQgMikgaW4gdGhlIFJFWCBwcmVmaXguIExvb2tpbmcgY2xvc2VyIHRoZSBtb2RybSBieXRlIGlzIGRldGVybWluZWQgYnkgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYFxuXG5CdXQgd2FpdC4uLiBpc24ndCBgYWRkXzJyZWdgIHRha2luZyB0aGUgYGRzdF9yZWdgIGFzIHRoZSBgc3JjX3JlZ2A/IEl0J3MgdGltZSB0byBkb3VibGUgY2hlY2sgaG93IHRoYXQgYWxsIHBpZWNlcyB3b3JrIHRvZ2V0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBNb2RSTSBieXRlIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTIzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQxOjUxLjYxNjg1Nzk1OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdC8qIEVuY29kZSAnZHN0X3JlZycgYW5kICdzcmNfcmVnJyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICdieXRlJyAqL1xcbiAyODM6XFx0c3RhdGljIHU4IGFkZF8ycmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG4gMjg0OlxcdHtcXG4gMjg1OlxcdFxcdHJldHVybiBieXRlICsgcmVnMmhleFtkc3RfcmVnXSArIChyZWcyaGV4W3NyY19yZWddIFxcdTAwM2NcXHUwMDNjIDMpO1xcbiAyODY6XFx0fVxcbiAyODc6XFx0XFxuIDI4ODpcXHQvKiBTb21lIDEtYnl0ZSBvcGNvZGVzIGZvciBiaW5hcnkgQUxVIG9wZXJhdGlvbnMgKi9cXG4gMjg5OlxcdHN0YXRpYyB1OCBzaW1wbGVfYWx1X29wY29kZXNbXSA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDE6NTEuNjE3MTA4MTM5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjczNjQzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWdpc3RlciBBZGRpdGlvbiBJbnN0cnVjdGlvbioqXG5cbk9rYXksIHNvIGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuLi4gcmlnaHQsIHRoYXQgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCBgZHN0X3JlZ2AgYWN0cyBhcyBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluIHRoZSB0d28tcmVnaXN0ZXIgYWRkaXRpb24uIFRoZSBzaGlmdCBieSB0aHJlZSBoaWdobGlnaHRzIHRoYXQgYGRzdF9yZWdgIGlzIGJlaW5nIHJlZmVyZW5jZWQgdXNpbmcgdGhlIGByZWdgIGZpZWxkIHdpdGhpbiB0aGUgTW9kUk0gYnl0ZS4gQ29uc2VxdWVudGx5LCB0aGlzIHRlbGxzIG1lIHRoZSBSRVggcHJlZml4J3MgUiBiaXQgZGlyZWN0bHkgY29ycmVzcG9uZHMgdG8gdGhhdCBgcmVnYCBmaWVsZC5cblxuTm93LCByZWNhbGwgdGhhdCB0aGUgUiBiaXQgcmVzaWRlcyBhdCBiaXQgcG9zaXRpb24gMiBvZiB0aGUgUkVYIGJ5dGUsIHRodXMgaGF2aW5nIGEgdmFsdWUgb2YgNC4gVGhlcmVmb3JlLCBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgIHdpbGwgc2V0IHRoaXMgYml0IGlmIHRoZSB0YXJnZXQgcmVnaXN0ZXIsIGBkc3RfcmVnYCwgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIg4oCTIEknbSBzZWVpbmcgdGhhdCBgZHN0X3JlZ2AgaXMgdGhlIHNlY29uZCBhcmd1bWVudCwgYHIyYCwgd2l0aGluIGBhZGRfMm1vZGAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaG93IGBhZGRfMm1vZGAgaGFuZGxlcyB0aGlzIHNjZW5hcmlvLiBBIHF1aWNrIHJldmlldyBpcyBpbiBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NzMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MTo1OS44NDQ0NzUwODRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTU6XFx0XFxuIDI1NjpcXHRzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXFxuIDI1NzpcXHR7XFxuIDI1ODpcXHRcXHRpZiAoaXNfZXJlZyhyMSkpXFxuIDI1OTpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI2MDpcXHRcXHRpZiAoaXNfZXJlZyhyMikpXFxuIDI2MTpcXHRcXHRcXHRieXRlIHw9IDQ7XFxuIDI2MjpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjYzOlxcdH1cXG4gMjY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MTo1OS44NDQ2NjcyNzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU2MDc4MDQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJpdHdpc2UgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGByMmAgaXMgZGVmaW5pdGVseSBzZXR0aW5nIGJpdCAyLCB3aGljaCBoYXMgYSB2YWx1ZSBvZiA0LiBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgJ3MgYmVoYXZpb3Igb2Ygc2V0dGluZyB0aGUgUiBiaXQgZm9yIGBkc3RfcmVnYCBzZWVtcyBjb3JyZWN0LiBNeSBjb25jZXJuIGhlcmUgc3RlbXMgZnJvbSBob3cgdGhlIHByaW9yIGNvZGUgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCB3YXMgc2V0dGluZyBiaXQgMCwgZXNzZW50aWFsbHkgdGhlIEIgYml0LiBUaGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBgci9tYCBmaWVsZCB3aXRoaW4gdGhlIE1vZFJNIGJ5dGUsIG9yIHBvdGVudGlhbGx5IHRoZSBgYmFzZWAgaW4gdGhlIFNJQiBieXRlLlxuXG5Mb29raW5nIGF0IHRoZSBNb2RSTSBieXRlIGAweDA0YCwgSSBzZWUgdGhhdCBhIFNJQiBieXRlIGZvbGxvd3MuIFdpdGggYDB4MjVgIGFzIHRoZSBTSUIsIHRoZSBgaW5kZXhgIGlzIDQgKG5vIGluZGV4IHJlZ2lzdGVyKSBhbmQgYGJhc2VgIGlzIGVmZmVjdGl2ZWx5IDUgKHdoaWNoIHJlc29sdmVzIHRvIGEgMzItYml0IGRpc3BsYWNlbWVudCkuIEhvd2V2ZXIsIHdoZW4gdGhlIEIgYml0IGlzIGluYWR2ZXJ0ZW50bHkgc2V0LCB0aGUgYmFzZSBiZWNvbWVzIDEzIChSMTMpLiBUaGF0IHRyYW5zZm9ybXMgdGhlIGluc3RydWN0aW9uIGZyb20gd2hhdCBpdCBzaG91bGQgYmUgdG8gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBvcGVyYXRpb24sIG5hbWVseSwgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltyMTMgKyBcdTAwM2NvZmZcdTAwM2VdYCBpbnN0ZWFkIG9mIGBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAuIEFuZCB0aGF0J3Mgbm90IGFsbC4gQmVjYXVzZSBvZiB0aGUgUjEzIHJlZ2lzdGVyLCBpdCB3b3VsZCBhbHNvIHJlc3VsdCBpbiB0aGUgYGRzdGAgcmVnaXN0ZXIgYmVpbmcgdHJ1bmNhdGVkIChlLmcuLCBpZiBpdCB3YXMgUjgsIGl0IHdvdWxkIGJlY29tZSBSQVgpLiBUaGUgZWZmZWN0IHdvdWxkIGJlIGFuIGluc3RydWN0aW9uIGxpa2UgYGFkZCByYXgsIGdzOltyMTMgKyBcdTAwM2NvZmZcdTAwM2VdYCwgd2hpY2ggaXMgb2J2aW91c2x5IGluY29ycmVjdC5cblxuVGhpcyBpcyBhIGNyaXRpY2FsIGVycm9yISBJdCdzIGdvaW5nIHRvIGxlYWQgdG8gY3Jhc2hlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHJlYWRzIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbi5cblxuR29vZCwgdGhlIGZpeCBzZWVtcyBwZXJmZWN0bHkgcmVhc29uYWJsZSBhbmQgY29ycmVjdC4gSSdtIGNvbmZpZGVudCBpdCBhZGRyZXNzZXMgdGhlIHByb2JsZW0uIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBjb25maXJtIHRoaXMuIEkgdGhpbmsgSSd2ZSBnYXRoZXJlZCBhbGwgdGhlIHJlbGV2YW50IGRldGFpbHMgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyNTIsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MDguNDA1NDUxMTQ3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2ODQ1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJTTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfZG9fbWlzY19maXh1cHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgd2hlcmUgdGhlIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9uIChlbWl0dGVkIGZvciBwZXItQ1BVIG1hcCB2YWx1ZSBsb2FkcykgaW5jb3JyZWN0bHkgZW5jb2RlZCB0aGUgUkVYIHByZWZpeCB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciB3YXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIEl0IHVzZWQgYGFkZF8xbW9kYCB3aGljaCBzZXRzIHRoZSBCIGJpdCBpbnN0ZWFkIG9mIGBhZGRfMm1vZGAgd2hpY2ggY29ycmVjdGx5IHNldHMgdGhlIFIgYml0IGZvciB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaW4gdGhlIGBhZGQgXFx1MDAzY2RzdFxcdTAwM2UsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV1gIGluc3RydWN0aW9uLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgcmVnaXN0ZXIgdXNhZ2UgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBjb3JydXB0aW9uIG9yIGludmFsaWQgaW5zdHJ1Y3Rpb24gZmF1bHRzIHdoZW4gZXhlY3V0aW5nIEpJVC1jb21waWxlZCBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb24gKGVtaXR0ZWQgZm9yIHBlci1DUFUgbWFwIHZhbHVlIGxvYWRzKSBpbmNvcnJlY3RseSBlbmNvZGVkIHRoZSBSRVggcHJlZml4IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHdhcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gSXQgdXNlZCBgYWRkXzFtb2RgIHdoaWNoIHNldHMgdGhlIEIgYml0IGluc3RlYWQgb2YgYGFkZF8ybW9kYCB3aGljaCBjb3JyZWN0bHkgc2V0cyB0aGUgUiBiaXQgZm9yIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdHJ1Y3Rpb24uIFRoaXMgd291bGQgcmVzdWx0IGluIGluY29ycmVjdCByZWdpc3RlciB1c2FnZSBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBmYXVsdHMgd2hlbiBleGVjdXRpbmcgSklULWNvbXBpbGVkIEJQRiBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MDguNDgxMTQyNTY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYyMzE1Mjc3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjowOC40ODE3ODg1NjRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM2MjMwODc4OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBXaGVuIGVtaXR0aW5nIHRoZSBgYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdYCBpbnN0cnVjdGlvbiBmb3IgcGVyLUNQVSBhZGRyZXNzIHJlc29sdXRpb24sIHRoZSBKSVQgaW5jb3JyZWN0bHkgdXNlZCBgYWRkXzFtb2RgLCB3aGljaCBzZXRzIHRoZSBSRVguQiBiaXQgaW5zdGVhZCBvZiB0aGUgUkVYLlIgYml0IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChlLmcuLCBSOC1SMTUpLiBUaGlzIGVuY29kaW5nIGVycm9yIGNhdXNlcyB0aGUgQ1BVIHRvIGludGVycHJldCB0aGUgaW5zdHJ1Y3Rpb24gYXMgYGFkZCByYXgsIGdzOltyMTMgKyBcXHUwMDNjb2ZmXFx1MDAzZV1gIGluc3RlYWQgb2YgYGFkZCByOCwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXWAuXFxuXFxuRXhlY3V0aW5nIHRoaXMgbWFsZm9ybWVkIGluc3RydWN0aW9uIGxlYWRzIHRvIHJlYWRpbmcgbWVtb3J5IGZyb20gYSBzZW1pLWFyYml0cmFyeSBwZXItQ1BVIG9mZnNldCAoY29udHJvbGxlZCBieSBgcjEzYCwgd2hpY2ggbWFwcyB0byBgQlBGX1JFR183YCkgYW5kIGNvcnJ1cHRpbmcgdGhlIGByYXhgIChgQlBGX1JFR18wYCkgcmVnaXN0ZXIuIFRoaXMgcmVzdWx0cyBpbiBlaXRoZXIgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCAoY2F1c2luZyBhIHBhZ2UgZmF1bHQgb3IgdHJpZ2dlcmluZyBLQVNBTikgb3IgYW4gaW5mby1sZWFrIG9mIGFyYml0cmFyeSBwZXItQ1BVIG1lbW9yeS4gXFxuXFxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiwgdXNhZ2UsIG9yIGxlYWtpbmcgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBJdCBpcyBhIHB1cmUgSklUIG1pc2NvbXBpbGF0aW9uIHRoYXQgbGVhZHMgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIHJlZ2lzdGVyIGNvcnJ1cHRpb24uIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJlc3VsdGluZyBwYWdlIGZhdWx0cyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMGI5ZDE2ODhlNTliNmMwYjc0MGFmOGU3MzE2ODFhOWZiY2QzNTI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTc6Mzk6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGQ5MjA3NzJhZjdkNWYuLjFhOWZiNTMwYWRjM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTE5MzUsNyArMTkzNSw3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0XHRFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbi1cdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtcbitcdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcbiBcdFx0XHRcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcbiBcdFx0XHRcdEVNSVQoKHUzMikodW5zaWduZWQgbG9uZylcdTAwMjZ0aGlzX2NwdV9vZmYsIDQpO1xuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MDguNDgxNzg5MjQ0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzU4MzM2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyBhIHJlcGxhY2VtZW50IG9mIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAgd2l0aCBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkLiBUaGlzIGlzIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciwgc28gaXQncyBhbGwgYWJvdXQgaG93IHdlIGdlbmVyYXRlIHRoZSBtYWNoaW5lIGNvZGUuXG5cbkkgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcuIFRoZXNlIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgZnVuY3Rpb25zIG9yIG1hY3JvcywgdGhleSdyZSByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUgcmlnaHQgeDg2IGluc3RydWN0aW9uIHByZWZpeGVzIOKAkyBpbiB0aGlzIGNhc2UsIHRoZSBSRVggcHJlZml4LiBBbiBlbmNvZGluZyBlcnJvciBoZXJlIGNvdWxkIGFic29sdXRlbHkgbGVhZCB0byBpbmNvcnJlY3QgaW5zdHJ1Y3Rpb25zIGJlaW5nIGV4ZWN1dGVkLCBhbmQgdGhhdCdzIGEgcHJvYmxlbS4gQ3Jhc2hlcyBhcmUgYSBsaWtlbHkgb3V0Y29tZSBvZiBpbmNvcnJlY3QgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgdGhpcyBkb2Vzbid0ICpuZWNlc3NhcmlseSogbWVhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbiBwbGF5IGhlcmUuIFRoZSBmaXggY291bGQgc2ltcGx5IG1lYW4gaXQncyBhbiBpbnN0cnVjdGlvbiBiZWluZyBlbWl0dGVkIGluY29ycmVjdGx5LlxuXG5JIG5lZWQgdG8gY29uZmlybSBieSBkaWdnaW5nIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgd2l0aGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgYWRkcmVzc2luZyBtb2RlIGlzIGJlaW5nIHVzZWQgYW5kIHdoeSB0aGlzIGNoYW5nZSBpcyByZXF1aXJlZCwgYmVjYXVzZSB0aGF0J2xsIHRlbGwgbWUgaWYgdGhlcmUgd2FzIGEgc3VidGxlIGJ1ZyBvciBpbnN0cnVjdGlvbiBpbmNvbXBhdGliaWxpdHkgdGhhdCB0aGlzIGNoYW5nZSBmaXhlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQyOjE2LjkxNzYyNzM2MVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNzI1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRkXzFtb2RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0yNDM9c3RhdGljIGJvb2wgaXNfYXhyZWcodTMyIHJlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDgtLyogQWRkIG1vZGlmaWVycyBpZiAncmVnJyBtYXBzIHRvIHg4Ni02NCByZWdpc3RlcnMgUjguLlIxNSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNDk6c3RhdGljIHU4IGFkZF8xbW9kKHU4IGJ5dGUsIHUzMiByZWcpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1MC17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTQ5LVxcdFxcdC8qICdtb3YgJXJheCwgaW1tMzInIHNpZ24gZXh0ZW5kcyBpbW0zMiAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NTA6XFx0XFx0YjEgPSBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTUxLVxcdFxcdGIyID0gMHhDNztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NzEtXFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk3MjpcXHRcXHRFTUlUMShhZGRfMW1vZCgweDQwLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk3My1cXHRFTUlUMV9vZmYzMihhZGRfMXJlZygweEI4LCBkc3RfcmVnKSwgaW1tMzIpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTk3OD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW02NCh1OCAqKnBwcm9nLCB1MzIgZHN0X3JlZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05OTUtXFx0XFx0LyogbW92YWJzcSByYXgsIGltbTY0ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk5NjpcXHRcXHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgYWRkXzFyZWcoMHhCOCwgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05OTctXFx0XFx0RU1JVChpbW0zMl9sbywgNCk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTEwMj1zdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMDYtXFx0aWYgKGlzNjQpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMDc6XFx0XFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMDgtXFx0ZWxzZSBpZiAoaXNfZXJlZyhyZWcpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTA5OlxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDAsIHJlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTEwLVxcdCpwcHJvZyA9IHByb2c7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjIyMS1cXHRcXHRcXHRcXHQvKiBFbWl0ICdic3dhcCByYXgnIHRvIHN3YXAgOCBieXRlcyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjIyOlxcdFxcdFxcdFxcdEVNSVQzKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweDBGLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjIzLVxcdFxcdFxcdFxcdCAgICAgIGFkZF8xcmVnKDB4QzgsIGRzdF9yZWcpKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjgyLVxcdFxcdFxcdH1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjI4MzpcXHRcXHRcXHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODQtXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzgzMz1zdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg0Mi1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzg0MzpcXHRcXHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcXHQvKiBjbXAgcmR4LGZ1bmMgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg0NC1cXHRcXHRpZiAoIWlzX3NpbW0zMihwcm9nc1thXSkpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg2My1cXHRwaXZvdCA9IChiIC0gYSkgLyAyO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODY0OlxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdFxcdC8qIGNtcCByZHgsZnVuYyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODY1LVxcdGlmICghaXNfc2ltbTMyKHByb2dzW2EgKyBwaXZvdF0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjoxNi45NjQ5MDYxMDlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0OTQ0NzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFzc2VtYmx5IENvZGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGNoYW5nZSB0byBgRU1JVDJgIGNhdGNoZXMgbXkgZXllLiBXZSd2ZSBnb25lIGZyb20gdXNpbmcgYGFkZF8xbW9kYCB0byBgYWRkXzJtb2RgLiBUaGUgaW5pdGlhbCBjb2RlIHVzZWQgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYC4gSXQgc2V0cyB0aGUgUkVYLkIgYml0IGlmIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gQnV0IGhvbGQgb24sIHRoZSBpbnN0cnVjdGlvbiBpcyBgYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV1gLiBBbmQgdGhlbiwgdGhlIG5leHQgbGluZSBgRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO2AuLi4gVGhhdCBtYWtlcyBtZSB0aGluayBhIGJpdC5cblxuVGhlIGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVwZGF0ZSB0aGUgY29kZSB0byBhbGxvdyBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXJzLiBUaGUgZmlyc3QgY2hhbmdlLCBub3cgdXNpbmcgYGFkZF8ybW9kYCwgc3VnZ2VzdHMgdGhlIGludGVudCB0byBkZWFsIHdpdGggZXh0ZW5kZWQgcmVnaXN0ZXJzLiBJIGtub3cgYDB4MDNgIGlzIHRoZSBgYWRkYCBvcGNvZGUuIFNvLCB0aGUgUkVYIHByZWZpeCBoYXMgdG8gZ28gKmJlZm9yZSogdGhlIGAweDAzYCBvcGNvZGUuIEFuZCB0aGUgcHJlZml4IGlzIGAweDQ4YCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgUkVYLlcgcHJlZml4LiBCdXQgaWYgd2UgYXJlIGV4dGVuZGluZyB0aGUgcmVnaXN0ZXIsIHNwZWNpZmljYWxseSBgZHN0X3JlZ2AsIHRoZSBSRVggcHJlZml4ICpzaG91bGQqIGJlIHNldHRpbmcgdGhlIFJFWC5SIGJpdC4gVGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGVuY29kZWQgaW4gdGhlIE1vZFIvTSBieXRlLiBJdCBpcyBlbmNvZGVkIGluIHRoZSBgcmVnYCBmaWVsZCAoYml0cyAzLTUpLCAqbm90KiB0aGUgYHIvbWAgZmllbGQgKGJpdHMgMC0yKS4gVGhpcyBpbmRpY2F0ZXMgdGhlIHByb2JsZW0uXG5cbk5vdywgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBzZWVtcyB0byBiZSB0aGUgY3J1Y2lhbCBiaXQuIEl0IGxvb2tzIGxpa2UgaXQgKnNob3VsZCogYmUgcHV0dGluZyBgZHN0X3JlZ2AgaW4gdGhlIGByZWdgIGZpZWxkIG9mIHRoZSBNb2RSL00gYnl0ZSwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHZlcmlmeSBleGFjdGx5IGhvdyBgYWRkXzJyZWdgIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdHJhY2UgdGhlIHJlZ2lzdGVyIGVuY29kaW5nIHRvIGNvbmZpcm0gdGhhdCB0aGUgcGF0Y2ggaXMgY29ycmVjdGx5IGVuY29kaW5nIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbiB0aGUgYHJlZ2AgZmllbGQgYW5kIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIFJFWCBiaXRzLiBPdGhlcndpc2UsIHdlIHdpbGwgaGF2ZSBhIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjoyMy43MTQzNTk5OTdaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzEwMDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZF8ycmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTI2PXN0YXRpYyBib29sIGlzX3VpbW0zMih1NjQgdmFsdWUpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM0LVxcdFxcdGlmIChEU1QgIT0gU1JDKVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFxcXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEzNTpcXHRcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBEU1QsIFNSQyksIDB4ODksIGFkZF8ycmVnKDB4QzAsIERTVCwgU1JDKSk7IFxcXFxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM2LVxcdH0gd2hpbGUgKDApXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mjc3PXN0YXRpYyB1OCBhZGRfMXJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yODItLyogRW5jb2RlICdkc3RfcmVnJyBhbmQgJ3NyY19yZWcnIHJlZ2lzdGVycyBpbnRvIHg4Ni02NCBvcGNvZGUgJ2J5dGUnICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI4MzpzdGF0aWMgdTggYWRkXzJyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yODQte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTkzOD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW0zMih1OCAqKnBwcm9nLCBib29sIHNpZ25fcHJvcGFnYXRlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk2NS1cXHRcXHRiMyA9IDB4QzA7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk2NjpcXHRcXHRFTUlUMihiMiwgYWRkXzJyZWcoYjMsIGRzdF9yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTY3LVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMDA0PXN0YXRpYyB2b2lkIGVtaXRfbW92X3JlZyh1OCAqKnBwcm9nLCBib29sIGlzNjQsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDE0LVxcdFxcdFxcdEVNSVQxKGFkZF8ybW9kKDB4NDAsIGRzdF9yZWcsIHNyY19yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAxNTpcXHRcXHRFTUlUMigweDg5LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMTYtXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwMjE9c3RhdGljIHZvaWQgZW1pdF9tb3ZzeF9yZWcodTggKipwcHJvZywgaW50IG51bV9iaXRzLCBib29sIGlzNjQsIHUzMiBkc3RfcmVnLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMjktXFx0XFx0XFx0RU1JVDQoYWRkXzJtb2QoMHg0OCwgc3JjX3JlZywgZHN0X3JlZyksIDB4MGYsIDB4YmUsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwMzA6XFx0XFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDMxLVxcdFxcdGVsc2UgaWYgKG51bV9iaXRzID09IDE2KVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDMyLVxcdFxcdFxcdEVNSVQ0KGFkZF8ybW9kKDB4NDgsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBmLCAweGJmLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDMzOlxcdFxcdFxcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzNC1cXHRcXHRlbHNlIGlmIChudW1fYml0cyA9PSAzMilcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTAzNS1cXHRcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDQ4LCBzcmNfcmVnLCBkc3RfcmVnKSwgMHg2MyxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTAzNjpcXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwMzctXFx0fSBlbHNlIHtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDQwLVxcdFxcdFxcdEVNSVQ0KGFkZF8ybW9kKDB4NDAsIHNyY19yZWcsIGRzdF9yZWcpLCAweDBmLCAweGJlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDQxOlxcdFxcdFxcdCAgICAgIGFkZF8ycmVnKDB4QzAsIHNyY19yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0Mi1cXHRcXHR9IGVsc2UgaWYgKG51bV9iaXRzID09IDE2KSB7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA0NS1cXHRcXHRcXHRFTUlUMyhhZGRfMm1vZCgweDBmLCBzcmNfcmVnLCBkc3RfcmVnKSwgMHhiZixcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA0NjpcXHRcXHRcXHQgICAgICBhZGRfMnJlZygweEMwLCBzcmNfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNDctXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwNTQ9c3RhdGljIHZvaWQgZW1pdF9pbnNuX3N1ZmZpeCh1OCAqKnBwcm9nLCB1MzIgcHRyX3JlZywgdTMyIHZhbF9yZWcsIGludCBvZmYpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA2NC1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTA2NTpcXHRcXHRFTUlUMihhZGRfMnJlZygweDQwLCBwdHJfcmVnLCB2YWxfcmVnKSwgb2ZmKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTA2Ni1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDY3LVxcdFxcdC8qIDQtYnl0ZSBzaWduZWQgZGlzcGxhY2VtZW50ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwNjg6XFx0XFx0RU1JVDFfb2ZmMzIoYWRkXzJyZWcoMHg4MCwgcHRyX3JlZywgdmFsX3JlZyksIG9mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNjktXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEwNzM9c3RhdGljIHZvaWQgZW1pdF9pbnNuX3N1ZmZpeF9TSUIodTggKipwcHJvZywgdTMyIHB0cl9yZWcsIHUzMiB2YWxfcmVnLCB1MzIgaW5kZXhfcmVnLCBpbnQgb2ZmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwNzctXFx0aWYgKGlzX2ltbTgob2ZmKSkge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMDc4OlxcdFxcdEVNSVQzKGFkZF8ycmVnKDB4NDQsIEJQRl9SRUdfMCwgdmFsX3JlZyksIGFkZF8ycmVnKDAsIHB0cl9yZWcsIGluZGV4X3JlZykgLyogU0lCICovLCBvZmYpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMDc5LVxcdH0gZWxzZSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEwODA6XFx0XFx0RU1JVDJfb2ZmMzIoYWRkXzJyZWcoMHg4NCwgQlBGX1JFR18wLCB2YWxfcmVnKSwgYWRkXzJyZWcoMCwgcHRyX3JlZywgaW5kZXhfcmVnKSAvKiBTSUIgKi8sIG9mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEwODEtXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2MDI9c3RhdGljIHZvaWQgZW1pdF9zaGlmdHgodTggKipwcHJvZywgdTMyIGRzdF9yZWcsIHU4IHNyY19yZWcsIGJvb2wgaXM2NCwgdTggb3ApXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYwOC1cXHRlbWl0XzN2ZXgoXFx1MDAyNnByb2csIHIsIGZhbHNlLCByLCBtLCBpczY0LCBzcmNfcmVnLCBmYWxzZSwgb3ApO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjA5OlxcdEVNSVQyKDB4ZjcsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYxMC1cXHQqcHByb2cgPSBwcm9nO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2OTE9c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzE2LVxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIHJlZywgZmFsc2UpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNzE3OlxcdFxcdFxcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIHJlZywgcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTgtXFx0XFx0XFx0RU1JVDIoWDg2X0pFLCAzKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNzIxLVxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCByZWcsIFg4Nl9SRUdfUjEyLCB0cnVlKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTcyMjpcXHRcXHRFTUlUMigweDAxLCBhZGRfMnJlZygweEMwLCByZWcsIFg4Nl9SRUdfUjEyKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjMtXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE4OTctXFx0XFx0XFx0YjIgPSBzaW1wbGVfYWx1X29wY29kZXNbQlBGX09QKGluc24tXFx1MDAzZWNvZGUpXTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTg5ODpcXHRcXHRcXHRFTUlUMihiMiwgYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgc3JjX3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xODk5LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MjUtXFx0XFx0XFx0XFx0bWF5YmVfZW1pdF9tb2QoXFx1MDAyNnByb2csIGRzdF9yZWcsIGRzdF9yZWcsIGZhbHNlKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkyNjpcXHRcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MjctXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMC1cXHRcXHRcXHRcXHRtYXliZV9lbWl0X21vZChcXHUwMDI2cHJvZywgQVVYX1JFRywgZHN0X3JlZywgdHJ1ZSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5MzE6XFx0XFx0XFx0XFx0RU1JVDMoMHgwRiwgMHg0NCwgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzgtXFx0XFx0XFx0XFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTM5OlxcdFxcdFxcdFxcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTk0MC1cXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMC1cXHRcXHRcXHRcXHQvKiBpbXVsIGRzdF9yZWcsIGRzdF9yZWcsIGltbTggKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjEwMTpcXHRcXHRcXHRcXHRFTUlUMygweDZCLCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjEwMi1cXHRcXHRcXHRcXHQgICAgICBpbW0zMik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjEwNS1cXHRcXHRcXHRcXHRFTUlUMl9vZmYzMigweDY5LFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMTA2OlxcdFxcdFxcdFxcdFxcdCAgICBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjEwNy1cXHRcXHRcXHRcXHRcXHQgICAgaW1tMzIpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIxMTUtXFx0XFx0XFx0LyogaW11bCBkc3RfcmVnLCBzcmNfcmVnICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIxMTY6XFx0XFx0XFx0RU1JVDMoMHgwRiwgMHhBRiwgYWRkXzJyZWcoMHhDMCwgc3JjX3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMTE3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMDktXFx0XFx0XFx0XFx0XFx0RU1JVDIoMHgwRiwgMHhCNyk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMTA6XFx0XFx0XFx0XFx0RU1JVDEoYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjExLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMzgtXFx0XFx0XFx0XFx0XFx0RU1JVDIoMHgwRiwgMHhCNyk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMzk6XFx0XFx0XFx0XFx0RU1JVDEoYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjQwLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyNDQtXFx0XFx0XFx0XFx0XFx0RU1JVDEoMHg0NSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyNDU6XFx0XFx0XFx0XFx0RU1JVDIoMHg4OSwgYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjQ2LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTIyODU9c3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ3Ni1cXHRcXHRcXHRcXHRtYXliZV9lbWl0X21vZChcXHUwMDI2cHJvZywgQVVYX1JFRywgQlBGX1JFR19BWCwgdHJ1ZSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0Nzc6XFx0XFx0XFx0XFx0RU1JVDIoMHgyOSwgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgQlBGX1JFR19BWCkpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDc4LVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0ODQtXFx0XFx0XFx0XFx0bWF5YmVfZW1pdF9tb2QoXFx1MDAyNnByb2csIEFVWF9SRUcsIEJQRl9SRUdfQVgsIHRydWUpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNDg1OlxcdFxcdFxcdFxcdEVNSVQyKDB4MzksIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIEJQRl9SRUdfQVgpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ4Ni1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTkxLVxcdFxcdFxcdFxcdEVNSVQyKHNpbXBsZV9hbHVfb3Bjb2Rlc1tCUEZfT1AoaW5zbi1cXHUwMDNlaW1tKV0sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI1OTI6XFx0XFx0XFx0XFx0ICAgICAgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgcmVhbF9zcmNfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1OTMtXFx0XFx0XFx0XFx0LyogQXR0ZW1wdCB0byBzd2FwIGluIG5ldyB2YWx1ZSAqL1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3MTMtXFx0XFx0XFx0XFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjcxNDpcXHRcXHRcXHRFTUlUMigweDM5LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3MTUtXFx0XFx0XFx0Z290byBlbWl0X2NvbmRfam1wO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3MjEtXFx0XFx0XFx0XFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjcyMjpcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBzcmNfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3MjMtXFx0XFx0XFx0Z290byBlbWl0X2NvbmRfam1wO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3NTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSk1QKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mjc1NzpcXHRcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3NTgtXFx0XFx0XFx0XFx0Z290byBlbWl0X2NvbmRfam1wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjoyMy43NjA2NzUwNzVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4Mzk5MTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvZGluZyB0aGUgSW5zdHJ1Y3Rpb246IGBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXWAqKlxuXG5Pa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gSSdtIGxvb2tpbmcgYXQgaXMgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYC4gVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCBnaXZlcyB1cyB0aGUgYmFzaWMgYXNzZW1ibHksIGJ1dCBJIG5lZWQgdG8gYnJlYWsgZG93biAqZXhhY3RseSogaG93IHRoaXMgaXMgYmVpbmcgdHJhbnNsYXRlZCBpbnRvIG1hY2hpbmUgY29kZS4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGVtaXRzIGAweDY1YCB3aGljaCBJIGtub3cgcmVwcmVzZW50cyB0aGUgYGdzOmAgcHJlZml4LiBUaGVuLCBgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZylgIGdvZXMgbmV4dC4gVGhlIG5leHQgbGluZSBlbWl0cyBgRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO2AgSG1tLCBpbnRlcmVzdGluZy4gSSByZWNvZ25pemUgdGhlIGAweDAzYCBhcyBwYXJ0IG9mIHRoZSBgYWRkYCBvcGNvZGUsIHJpZ2h0P1xuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHdoZXJlIHRoZSBNb2RSL00gYnl0ZSBhbmQgbWF5YmUgYSBTSUIgYnl0ZSBjb21lIGludG8gcGxheS4gKkFoYSEqIFRoYXQgYDB4MDRgIGluIGBhZGRfMnJlZ2AgaXMgdGhlIGtleS4gVGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYHIvbWAgZmllbGQgKHRoZSBib3R0b20gMyBiaXRzKSB3aWxsIGJlIHNldCB0byBgMHgwNGAsIG1lYW5pbmcgYSBTSUIgYnl0ZSB3aWxsIGZvbGxvdy4gQW5kIGhlcmUncyB0aGUga2lja2VyOiBgZHN0X3JlZ2AgaXMgYmVpbmcgcHV0IGludG8gdGhlIGByZWdgIGZpZWxkIChiaXRzIDMtNSkgb2YgdGhlIE1vZFIvTSBieXRlLiBOb3csIGhvdyBkb2VzIHRoYXQgd29yayBvdXQ/IFRoYXQgbWVhbnMgdGhlIE1vZFIvTSBieXRlIGl0c2VsZiB3aWxsIGJlIGVzc2VudGlhbGx5IGAweDA0IHwgKGRzdF9yZWcgXHUwMDNjXHUwMDNjIDMpYC4gV2UgYWxzbyBzZWUgdGhlIFNJQiBieXRlIGVtaXR0ZWQgYXMgYDB4MjVgIChubyBpbmRleCwgbm8gYmFzZSwgZGlzcDMyKS4gU28gdGhlIGByL21gIGlzIGAweDA0YCB3aXRoIGEgZGlzcDMyIGFuZCB0aGUgcmVnIGZpZWxkIGlzIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci5cblxuTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBhZGRfMnJlZyhieXRlLCBkc3RfcmVnLCBzcmNfcmVnKWAgLSB0aGlzIGFsc28gZW5jb2RlcyB0aGUgYHNyY19yZWdgIGJ1dCBJIG9ubHkgc2VlIGBkc3RfcmVnYD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhZGRfMnJlZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIEknbSBjbGVhciBvbiBob3cgdGhlIGBzcmNfcmVnYCBpcyBnZXR0aW5nIGhhbmRsZWQuIExldCdzIGdvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgaW1wbGVtZW50YXRpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyMywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjoyOS45NDQ2NzAwMloiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5OTcyMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyB1OCBhZGRfMnJlZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI3Nz1zdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjgyLS8qIEVuY29kZSAnZHN0X3JlZycgYW5kICdzcmNfcmVnJyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICdieXRlJyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyODM6c3RhdGljIHU4IGFkZF8ycmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjg0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MzAuMjA0NjQ3NTMyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjkyOTAzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhZGRfMnJlZ2AgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIGhlcmUuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBlYWNoIGxpbmUsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCByZXNvdXJjZSB1c2FnZSwgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBncmFzcCB0aGUgY29yZSBsb2dpYzogd2hhdCByZWdpc3RlcnMgYXJlIGludm9sdmVkLCB3aGF0IHRoZSBvcGVyYXRpb25zIGFyZSwgYW5kIHRoZSBleHBlY3RlZCBvdXRjb21lLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIHBpdGZhbGxzIHRoYXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMuIEtub3dpbmcgbXkgZmllbGQsIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIG92ZXJhbGwgc3lzdGVtJ3MgYmVoYXZpb3IuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGV0aGVyIGFueSBlZGdlIGNhc2VzIGFyZSBoYW5kbGVkLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvZGUgd29ya3MgZWZmaWNpZW50bHkgYW5kIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MjozNS40NzM5NDA2OTRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0fVxcbiAyODE6XFx0XFxuIDI4MjpcXHQvKiBFbmNvZGUgJ2RzdF9yZWcnIGFuZCAnc3JjX3JlZycgcmVnaXN0ZXJzIGludG8geDg2LTY0IG9wY29kZSAnYnl0ZScgKi9cXG4gMjgzOlxcdHN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXFxuIDI4NDpcXHR7XFxuIDI4NTpcXHRcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ10gKyAocmVnMmhleFtzcmNfcmVnXSBcXHUwMDNjXFx1MDAzYyAzKTtcXG4gMjg2OlxcdH1cXG4gMjg3OlxcdFxcbiAyODg6XFx0LyogU29tZSAxLWJ5dGUgb3Bjb2RlcyBmb3IgYmluYXJ5IEFMVSBvcGVyYXRpb25zICovXFxuIDI4OTpcXHRzdGF0aWMgdTggc2ltcGxlX2FsdV9vcGNvZGVzW10gPSB7XFxuIDI5MDpcXHRcXHRbQlBGX0FERF0gPSAweDAxLFxcbiAyOTE6XFx0XFx0W0JQRl9TVUJdID0gMHgyOSxcXG4gMjkyOlxcdFxcdFtCUEZfQU5EXSA9IDB4MjEsXFxuIDI5MzpcXHRcXHRbQlBGX09SXSA9IDB4MDksXFxuIDI5NDpcXHRcXHRbQlBGX1hPUl0gPSAweDMxLFxcbiAyOTU6XFx0XFx0W0JQRl9MU0hdID0gMHhFMCxcXG4gMjk2OlxcdFxcdFtCUEZfUlNIXSA9IDB4RTgsXFxuIDI5NzpcXHRcXHRbQlBGX0FSU0hdID0gMHhGOCxcXG4gMjk4OlxcdH07XFxuIDI5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6MzUuNDc0MjA4MzgzWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3Mjg1MDQzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBhZGRfMnJlZ2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGFkZF8ycmVnKGJ5dGUsIGRzdF9yZWcsIHNyY19yZWcpYCBmdW5jdGlvbi4gVGhlIGNvcmUgY2FsY3VsYXRpb24gaXM6IGBieXRlICsgcmVnMmhleFtkc3RfcmVnXSArIChyZWcyaGV4W3NyY19yZWddIFx1MDAzY1x1MDAzYyAzKWAuIFNvLCBpZiBJIGNhbGwgaXQgd2l0aCwgc2F5LCBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgLCB0aGF0IGJlY29tZXMgYDB4MDQgKyByZWcyaGV4WzBdICsgKHJlZzJoZXhbZHN0X3JlZ10gXHUwMDNjXHUwMDNjIDMpYC4gUmlnaHQsIGAwYCByZXByZXNlbnRzIGBCUEZfUkVHXzBgLCB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCBtYXBzIGRpcmVjdGx5IHRvIHRoZSBgUkFYYCByZWdpc3Rlci5cblxuVGhlcmVmb3JlLCB3ZSBoYXZlIGBzcmNfcmVnYCBhcyBgZHN0X3JlZ2AsIHdpdGggdGhlIHZhbHVlIGxlZnQgc2hpZnRlZCBieSB0aHJlZSAoaXRzIHZhbHVlIGlzIGxvY2F0ZWQgaW4gdGhlIE1vZFIvTSBieXRlIGByZWdgIGZpZWxkKS4gQW5kIHRoZSBNb2RSL00gYnl0ZSBoYXMgYDBgIGluIHRoZSBgci9tYCBmaWVsZC5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIFJFWCBwcmVmaXguIFRoYXQncyBgMHg0OCB8IFJFWC5SIHwgUkVYLkJgLiBJZiB0aGUgYGRzdF9yZWdgIGlzIGluIHRoZSBgcmVnYCBmaWVsZCwgdGhlbiBJIG11c3Qgc2V0IFJFWC5SIGlmIGBkc3RfcmVnYCByZXByZXNlbnRzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGUgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCBmdW5jdGlvbiBzZXRzIFJFWC5CIGlmIGBkc3RfcmVnYCBpcyBhbiBleHRlbmRlZCByZWdpc3RlciBhcyB3ZWxsLiBUaW1lIHRvIGdvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBmdW5jdGlvbnMgdG8gY29uZmlybSB0aGUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzEwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6NDUuMjAyNzE3NTMxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdHJldHVybiByZWcgPT0gQlBGX1JFR18wO1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHQvKiBBZGQgbW9kaWZpZXJzIGlmICdyZWcnIG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXFxuIDI0OTpcXHRzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcXG4gMjUwOlxcdHtcXG4gMjUxOlxcdFxcdGlmIChpc19lcmVnKHJlZykpXFxuIDI1MjpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI1MzpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjU0OlxcdH1cXG4gMjU1OlxcdFxcbiAyNTY6XFx0c3RhdGljIHU4IGFkZF8ybW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyKVxcbiAyNTc6XFx0e1xcbiAyNTg6XFx0XFx0aWYgKGlzX2VyZWcocjEpKVxcbiAyNTk6XFx0XFx0XFx0Ynl0ZSB8PSAxO1xcbiAyNjA6XFx0XFx0aWYgKGlzX2VyZWcocjIpKVxcbiAyNjE6XFx0XFx0XFx0Ynl0ZSB8PSA0O1xcbiAyNjI6XFx0XFx0cmV0dXJuIGJ5dGU7XFxuIDI2MzpcXHR9XFxuIDI2NDpcXHRcXG4gMjY1OlxcdHN0YXRpYyB1OCBhZGRfM21vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMiwgdTMyIGluZGV4KVxcbiAyNjY6XFx0e1xcbiAyNjc6XFx0XFx0aWYgKGlzX2VyZWcocjEpKVxcbiAyNjg6XFx0XFx0XFx0Ynl0ZSB8PSAxO1xcbiAyNjk6XFx0XFx0aWYgKGlzX2VyZWcoaW5kZXgpKVxcbiAyNzA6XFx0XFx0XFx0Ynl0ZSB8PSAyO1xcbiAyNzE6XFx0XFx0aWYgKGlzX2VyZWcocjIpKVxcbiAyNzI6XFx0XFx0XFx0Ynl0ZSB8PSA0O1xcbiAyNzM6XFx0XFx0cmV0dXJuIGJ5dGU7XFxuIDI3NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQyOjQ1LjIwMjkyOTI0MloiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYwODYzMzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFN1YnRsZSB4ODYtNjQgQlBGIEpJVCBCdWcqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBzb21lIHg4Ni02NCBCUEYgSklUIGNvZGUsIGFuZCBJJ3ZlIHN0dW1ibGVkIHVwb24gd2hhdCBsb29rcyBsaWtlIGEgbmFzdHkgYnVnLiBJdCBzZWVtcyBsaWtlIHRoZSBjb21waWxlciBpcyBnZW5lcmF0aW5nIGluY29ycmVjdCBpbnN0cnVjdGlvbnMsIGFuZCBpdCBoYXMgdG8gZG8gd2l0aCBleHRlbmRlZCByZWdpc3RlcnMuXG5cblNwZWNpZmljYWxseSwgaXQncyBhYm91dCB0aGUgUkVYIHByZWZpeCBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZC4gVGhlIGZ1bmN0aW9uIGBhZGRfMW1vZChieXRlLCByZWcpYCBpcyBzZXR0aW5nIHRoZSBSRVguQiBiaXQgKGJpdCAwKSBiYXNlZCBvbiB3aGV0aGVyIGByZWdgIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChsaWtlIFI4LVIxNSkuIFRoZSBmdW5jdGlvbiBgYWRkXzJtb2QoYnl0ZSwgcjEsIHIyKWAgc2V0cyBSRVguQiBiYXNlZCBvbiBgcjFgIGFuZCBSRVguUiAoYml0IDIpIGJhc2VkIG9uIGByMmAuXG5cblRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQ6IGBFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7YCBzaG91bGQgc2V0IFJFWC5CIGlmIGBkc3RfcmVnYCBpcyBleHRlbmRlZC4gQnV0IHRoZSBwcm9ibGVtIGxpZXMgZGVlcGVyIGluIGhvdyBgZHN0X3JlZ2AgaXMgKmFjdHVhbGx5KiB1c2VkLiBgZHN0X3JlZ2AgaXMgcGFzc2VkIGFzIGBzcmNfcmVnYCB0byBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgLiBJdCdzIGJlaW5nIHBsYWNlZCBpbiB0aGUgYHJlZ2AgZmllbGQgKGJpdHMgMy01KSBvZiB0aGUgTW9kUi9NIGJ5dGUuIFRoaXMgYHJlZ2AgZmllbGQgKnNob3VsZCogY29ycmVzcG9uZCB0byBSRVguUiwgYnV0IHRoZSBgYWRkXzFtb2RgIGZ1bmN0aW9uIGlzIHNldHRpbmcgUkVYLkIgaW5zdGVhZCEgVGhhdCdzIGEgZnVuZGFtZW50YWwgZXJyb3IuXG5cblNvLCBpZiBgZHN0X3JlZ2AgKmlzKiBhbiBleHRlbmRlZCByZWdpc3Rlciwgc2F5IFI4LCB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIGEgUkVYLkIgcHJlZml4LiBCZWNhdXNlIFJFWC5CIGlzIHNldCwgdGhpcyBpcyBhcHBsaWVkIHRvIHRoZSBgci9tYCBmaWVsZCwgd2hpY2ggaW4gdGhpcyBpbnN0YW5jZSBpcyBgMHgwNGAgKFNJQiBmb2xsb3dzKSwgYW5kIHRoZSBTSUIgYnl0ZSBpcyBgMHgyNWAgKGJhc2UgPSA1KS4gTm93LCBpZiBSRVguQiBpcyBzZXQsIHRoZSBiYXNlIGJlY29tZXMgUjEzLCBub3QgXCJubyBiYXNlXCIuIFdoYXQgaXMgYmVpbmcgbWlzc2VkIGlzIHNldHRpbmcgUkVYLlIuIFRoZSBgcmVnYCBmaWVsZCwgd2hpY2ggKnNob3VsZCogcmVwcmVzZW50IFI4LCBpcyBpbnN0ZWFkIGludGVycHJldGVkIGFzIFJBWCAoYmVjYXVzZSBSRVguUiBpc24ndCBzZXQpLlxuXG5UaGUgcmVzdWx0aW5nIGluc3RydWN0aW9uIGlzIGRpc2FzdHJvdXMuIEluc3RlYWQgb2YgYGFkZCByOCwgZ3M6W2Rpc3AzMl1gLCBpdCdzIGVtaXR0aW5nIGBhZGQgcmF4LCBnczpbcjEzICsgZGlzcDMyXWAuIFRoYXQgaXMgY29tcGxldGVseSB3cm9uZy4gV2UgYXJlIHJlYWRpbmcgZnJvbSBtZW1vcnkgbG9jYXRpb24gYGdzOltyMTMgKyBkaXNwMzJdYCBhbmQgYWRkaW5nIHRoYXQgdmFsdWUgdG8gYHJheGAsIGluc3RlYWQgb2YgcmVhZGluZyBmcm9tIGBnczpbZGlzcDMyXWAgYW5kIGFkZGluZyBpdCB0byBgcjhgLlxuXG5UaGlzIGxlYWRzIHRvIGEgcG90ZW50aWFsIGNyYXNoIGlmIHRoZSBtZW1vcnkgYWRkcmVzcyBgZ3M6W3IxMyArIGRpc3AzMl1gIGlzIGludmFsaWQsIGJlY2F1c2UgaXQgd2lsbCByZXN1bHQgaW4gYSBwYWdlIGZhdWx0LiBPdGhlcndpc2UsIGl0IHdpbGwgcmVhZCBtZW1vcnkgYW5kIHBvdGVudGlhbGx5IGNvcnJ1cHQgYHJheGAuIFRoaXMgaXMgYSBjbGVhciBidWcgaW4gdGhlIEJQRiBKSVQgY29tcGlsZXIgZm9yIHg4Ni02NC5cblxuQ3J1Y2lhbGx5LCB0aGlzIGlzbid0IGFib3V0ICp1bmluaXRpYWxpemVkKiBtZW1vcnkgdXNhZ2UuIEl0J3MgYWJvdXQgZ2VuZXJhdGluZyBhIGZhdWx0eSBpbnN0cnVjdGlvbiB0aGF0IHJlYWRzIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY291bGQgKmxlYWQqIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhIG9yLCBhdCB3b3JzdCwgYW4gYWNjZXNzIHZpb2xhdGlvbi4gVGhlIHJvb3QgY2F1c2UgaXMgYSBzaW1wbGUgYml0IGZsaXAgaW4gdGhlIFJFWCBwcmVmaXggZ2VuZXJhdGlvbi4gSWYgdGhlIEJQRiBwcm9ncmFtIHVzZXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgYXMgYGRzdF9yZWdgIGluIHRoaXMgc3BlY2lmaWMgYGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdYCBpbnN0cnVjdGlvbiwgdGhlIEpJVCBlbWl0cyB0aGUgd3JvbmcgaW5zdHJ1Y3Rpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDU5LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDI6NTUuODExNTY1MzUzWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkyMDpcXHRcXG4xOTIxOlxcdFxcdFxcdFxcdFxcdC8qIHhvciByMTEsIHIxMSAqL1xcbjE5MjI6XFx0XFx0XFx0XFx0XFx0RU1JVDMoMHg0RCwgMHgzMSwgMHhEQik7XFxuMTkyMzpcXHRcXG4xOTI0OlxcdFxcdFxcdFxcdFxcdC8qIHRlc3QgZHN0X3JlZzMyLCBkc3RfcmVnMzI7IGNoZWNrIGlmIGxvd2VyIDMyLWJpdCBhcmUgemVybyAqL1xcbjE5MjU6XFx0XFx0XFx0XFx0XFx0bWF5YmVfZW1pdF9tb2QoXFx1MDAyNnByb2csIGRzdF9yZWcsIGRzdF9yZWcsIGZhbHNlKTtcXG4xOTI2OlxcdFxcdFxcdFxcdFxcdEVNSVQyKDB4ODUsIGFkZF8ycmVnKDB4QzAsIGRzdF9yZWcsIGRzdF9yZWcpKTtcXG4xOTI3OlxcdFxcbjE5Mjg6XFx0XFx0XFx0XFx0XFx0LyogY21vdmUgcjExLCBkc3RfcmVnOyBpZiBzbywgc2V0IGRzdF9yZWcgdG8gemVybyAqL1xcbjE5Mjk6XFx0XFx0XFx0XFx0XFx0LyogV0FSTklORzogSW50ZWwgc3dhcHBlZCBzcmMvZHN0IHJlZ2lzdGVyIGVuY29kaW5nIGluIENNT1ZjYyAhISEgKi9cXG4xOTMwOlxcdFxcdFxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCBBVVhfUkVHLCBkc3RfcmVnLCB0cnVlKTtcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdEVNSVQzKDB4MEYsIDB4NDQsIGFkZF8ycmVnKDB4QzAsIEFVWF9SRUcsIGRzdF9yZWcpKTtcXG4xOTMyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5MzM6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbjE5MzQ6XFx0XFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcbjE5MzU6XFx0XFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuMTkzNjpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbjE5Mzc6XFx0XFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuMTkzODpcXHRcXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XFxuMTkzOTpcXHRcXHRcXHRcXHRcXHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XFxuMTk0MDpcXHRcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuMTk0MTpcXHQjZW5kaWZcXG4xOTQyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NDM6XFx0XFx0XFx0XFx0fVxcbjE5NDQ6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTk0NTpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XFxuMTk0NjpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IDApXFxuMTk0NzpcXHRcXHRcXHRcXHRcXHRlbWl0X21vdl9yZWcoXFx1MDAyNnByb2csXFxuMTk0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXFxuMTk0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRzdF9yZWcsIHNyY19yZWcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0Mjo1NS44MTE3NDc4MzNaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc4Nzc3NjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGVyLUNQVSBBZGRyZXNzIExvYWRpbmcgaW4gQlBGIEluc3RydWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAgYmVjYXVzZSBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgSklUIGhhbmRsZXMgbG9hZGluZyBwZXItQ1BVIGFkZHJlc3Nlcy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSBKSVQgdHJhbnNsYXRlcyBpbnN0cnVjdGlvbnMgdGhhdCBhY2Nlc3MgcGVyLUNQVSBkYXRhLCB3aGljaCBhcmUgcHJldHR5IGNvbW1vbiBpbiBrZXJuZWwgdHJhY2luZyBhbmQgbmV0d29ya2luZyBzY2VuYXJpb3MuXG5cbldoYXQgSSdtIG5vdGljaW5nIGlzIHRoYXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBkc3RfcmVnYCkgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgbGlrZSBSOCwgdGhlIEpJVCBkb2Vzbid0IGRpcmVjdGx5IHVzZSB0aGF0IHJlZ2lzdGVyIGluIHRoZSBmaW5hbCBhc3NlbWJseS4gSW5zdGVhZCwgaXQgZW1pdHMgYGFkZCByYXgsIGdzOltyMTMgKyBcdTAwMjZ0aGlzX2NwdV9vZmZdYCBpbiBwbGFjZSBvZiB0aGUgbW9yZSBzdHJhaWdodGZvcndhcmQgYGFkZCByOCwgZ3M6W1x1MDAyNnRoaXNfY3B1X29mZl1gLiBUaGF0J3MgdGhlIGRpZmZlcmVuY2UsIGFuZCB0aGF0J3MgdGhlIHRoaW5nIHRoYXQgcGlxdWVzIG15IGludGVyZXN0LlxuXG5TbywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoaXMuIFRoZSBnZW5lcmF0ZWQgaW5zdHJ1Y3Rpb24gcmVhZHMgZnJvbSBgZ3M6W3IxMyArIFx1MDAyNnRoaXNfY3B1X29mZl1gLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHdoYXQgYHIxM2AgY291bGQgYmUgaW4gdGhpcyBjb250ZXh0LCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgaW5kaXJlY3QgYWNjZXNzIGlzIGhhcHBlbmluZy4gSSBrbm93IGByMTNgIGlzIGEgY2FsbGVlLXNhdmVkIHJlZ2lzdGVyIHdpdGhpbiB0aGUga2VybmVsIGNhbGxpbmcgY29udmVudGlvbiwgc28gaXRzIHJvbGUgaXMgd2VsbC1kZWZpbmVkLiBCdXQsIGluIHRoZSBCUEYgd29ybGQsIGRvZXMgaXQgbWFwIGRpcmVjdGx5IHRvIGEgY29ycmVzcG9uZGluZyBCUEYgcmVnaXN0ZXI/IEhtbSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0OyBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBXYWl0LCBJIHRoaW5rIGl0IGRvZXNuJ3QuIFIxMyBpbiB4ODYgaXMgbm90IG1hcHBlZCBkaXJlY3RseSB0byBhIEJQRiByZWdpc3Rlci4gT2theSwgc28gSSBzaG91bGQgbG9vayB1cCB0aGUgYHJlZzJoZXhgIG1hcHBpbmcgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIHRyYW5zbGF0aW9uIGhhcHBlbmluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YWx1ZSBpcyBoZWxkIGluIHRoYXQgYHIxM2AgcmVnaXN0ZXIgYmVjYXVzZSB0aGF0J3MgdGhlIGNydWNpYWwgZGF0YSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQzOjAzLjU5OTUyNzEzWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQyMjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWcyaGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTM4PXN0YXRpYyBpbnQgYnBmX3NpemVfdG9feDg2X2J5dGVzKGludCBicGZfc2l6ZSlcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xODEtICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE4MjpzdGF0aWMgY29uc3QgaW50IHJlZzJoZXhbXSA9IHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTgzLVxcdFtCUEZfUkVHXzBdID0gMCwgIC8qIFJBWCAqL1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI3Nz1zdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI3OC17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI3OTpcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ107XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4MC19XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjgzPXN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI4NC17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI4NTpcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ10gKyAocmVnMmhleFtzcmNfcmVnXSBcXHUwMDNjXFx1MDAzYyAzKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjg2LX1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz02OTc9c3RhdGljIHZvaWQgZW1pdF9pbmRpcmVjdF9qdW1wKHU4ICoqcHByb2csIGludCBicGZfcmVnLCB1OCAqaXApXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNjk5LVxcdHU4ICpwcm9nID0gKnBwcm9nO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo3MDA6XFx0aW50IHJlZyA9IHJlZzJoZXhbYnBmX3JlZ107XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTcwMS1cXHRib29sIGVyZWcgPSBpc19lcmVnKGJwZl9yZWcpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE1NjU9c3RhdGljIHZvaWQgZW1pdF8zdmV4KHU4ICoqcHByb2csIGJvb2wgciwgYm9vbCB4LCBib29sIGIsIHU4IG0sXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU3MC1cXHR1OCBiMSwgYjI7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1NzE6XFx0dTggdnZ2diA9IHJlZzJoZXhbc3JjX3JlZzJdO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTcyLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNTczOlxcdC8qIHJlZzJoZXggZ2l2ZXMgb25seSB0aGUgbG93ZXIgMyBiaXQgb2YgdnZ2diAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTc0LVxcdGlmIChpc19lcmVnKHNyY19yZWcyKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDM6MDMuNjQzOTU0Mjc4WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzM0NTE0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgdGhpcyBvcGVuLiBcIkxldCdzIHJlYWQgYHJlZzJoZXhgLlwiIFRoYXQncyB0aGUgbWVudGFsIG5vdGUuIEknbSBzZWVpbmcgdGhhdCBmdW5jdGlvbiBuYW1lLCBgcmVnMmhleGAsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBzdGFydHMgdG8gYW50aWNpcGF0ZS4gSSBrbm93IHdoYXQgdGhhdCBzb3VuZHMgbGlrZSDigJMgaXQncyBsaWtlbHkgYSByb3V0aW5lIGRlZGljYXRlZCB0byBjb252ZXJ0aW5nIHJlZ2lzdGVyIHZhbHVlcywgcHJvYmFibHkgaW4gYmluYXJ5IG9yIHNvbWUgb3RoZXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIGludG8gaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGF0J3MgYSBjcnVjaWFsIHV0aWxpdHksIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5uZXIgd29ya2luZ3MuIElzIGl0IG9wdGltaXplZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGRpZmZlcmVudCByZWdpc3RlciB3aWR0aHMgb3IgYXJjaGl0ZWN0dXJlcz8gRG9lcyBpdCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucyBncmFjZWZ1bGx5PyBNeSBhdHRlbnRpb24gaXMgZnVsbHkgZW5nYWdlZDsgSSBuZWVkIHRvIHNlZSBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCB0aGlzIGNvcmUgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlLiBMZXQncyBzZWUgaG93IHRoZXkgZGlkIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDM6MDcuNzE3NDA4Mjc2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdCAqIHRyYW1wb2xpbmUuIHg4Ni02NCByZWdpc3RlciBSMTAgaXMgdXNlZCBmb3IgYmxpbmRpbmcgKGlmIGVuYWJsZWQpLlxcbiAxODE6XFx0ICovXFxuIDE4MjpcXHRzdGF0aWMgY29uc3QgaW50IHJlZzJoZXhbXSA9IHtcXG4gMTgzOlxcdFxcdFtCUEZfUkVHXzBdID0gMCwgIC8qIFJBWCAqL1xcbiAxODQ6XFx0XFx0W0JQRl9SRUdfMV0gPSA3LCAgLyogUkRJICovXFxuIDE4NTpcXHRcXHRbQlBGX1JFR18yXSA9IDYsICAvKiBSU0kgKi9cXG4gMTg2OlxcdFxcdFtCUEZfUkVHXzNdID0gMiwgIC8qIFJEWCAqL1xcbiAxODc6XFx0XFx0W0JQRl9SRUdfNF0gPSAxLCAgLyogUkNYICovXFxuIDE4ODpcXHRcXHRbQlBGX1JFR181XSA9IDAsICAvKiBSOCAgKi9cXG4gMTg5OlxcdFxcdFtCUEZfUkVHXzZdID0gMywgIC8qIFJCWCBjYWxsZWUgc2F2ZWQgKi9cXG4gMTkwOlxcdFxcdFtCUEZfUkVHXzddID0gNSwgIC8qIFIxMyBjYWxsZWUgc2F2ZWQgKi9cXG4gMTkxOlxcdFxcdFtCUEZfUkVHXzhdID0gNiwgIC8qIFIxNCBjYWxsZWUgc2F2ZWQgKi9cXG4gMTkyOlxcdFxcdFtCUEZfUkVHXzldID0gNywgIC8qIFIxNSBjYWxsZWUgc2F2ZWQgKi9cXG4gMTkzOlxcdFxcdFtCUEZfUkVHX0ZQXSA9IDUsIC8qIFJCUCByZWFkb25seSAqL1xcbiAxOTQ6XFx0XFx0W0JQRl9SRUdfQVhdID0gMiwgLyogUjEwIHRlbXAgcmVnaXN0ZXIgKi9cXG4gMTk1OlxcdFxcdFtBVVhfUkVHXSA9IDMsICAgIC8qIFIxMSB0ZW1wIHJlZ2lzdGVyICovXFxuIDE5NjpcXHRcXHRbWDg2X1JFR19SOV0gPSAxLCAvKiBSOSByZWdpc3RlciwgNnRoIGZ1bmN0aW9uIGFyZ3VtZW50ICovXFxuIDE5NzpcXHRcXHRbWDg2X1JFR19SMTJdID0gNCwgLyogUjEyIGNhbGxlZSBzYXZlZCAqL1xcbiAxOTg6XFx0fTtcXG4gMTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0MzowNy43MTc1ODk2ODZaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0Mjk5ODY2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgYSBQZXItQ1BVIE1lbW9yeSBMZWFrIGluIEJQRiBKSVQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIGlzIGdlbmVyYXRpbmcgYW4gYGFkZGAgaW5zdHJ1Y3Rpb24gdGhhdCdzIHJlYWRpbmcgZnJvbSBwZXItQ1BVIG1lbW9yeSBhbmQgYWRkaW5nIGl0IHRvIGByYXhgLiAgYEJQRl9SRUdfN2AgaXMgUjEzLiBJZiBgZHN0X3JlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIGZvciBpbnN0YW5jZSBSOCwgUjEzLCBpdCB3aWxsIHRyaWdnZXIgdGhlIGJ1Zy4gIEkgc2VlIGBCUEZfUkVHXzVgIChSOCkgaXMgc2VsZWN0ZWQuIGBhZGRfMW1vZGAgaXMgdXNlZCwgc28gUkVYLkIgaXMgc2V0IHdoaWNoIHdpbGwgYWx0ZXIgdGhlIHJlZ2lzdGVyIHRvIGJlY29tZSBSMTMuIFNvLCB0aGUgaW5zdHJ1Y3Rpb24gdHVybnMgaW50byBgYWRkIHJheCwgZ3M6W3IxMyArIFx1MDAyNnRoaXNfY3B1X29mZl1gLiAgSSdtIHRyYWNpbmcgdGhlIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGFuZCB0aGUgYHIvbWAgZmllbGQgb2YgYDB4MDRgIG1lYW5zIGEgU0lCIGJ5dGUgaXMgY29taW5nLiBUaGUgU0lCIGJ5dGUgaXMgMHgyNS4gU2NhbGUgaXMgMSwgaW5kZXggaXMgbm9uZSwgYW5kIGJhc2UgaXMgZGlzcDMyLiBCZWNhdXNlIG1vZCBpcyAwMCwgYmFzZSBpcyBkaXNwMzIgd2hpY2ggbWVhbnMgaXQgdXNlcyBSQlAsIHVubGVzcyBSRVguQiBpcyBzZXQuIEJlY2F1c2UgUkVYLkIgaXMgc2V0LCB0aGUgYmFzZSBiZWNvbWVzIFIxMy4gVGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGVuY29kZWQgaW4gdGhlICdyZWcnIGZpZWxkLiBgZHN0X3JlZ2AgaXMgZW5jb2RlZCBpbiB0aGUgJ3JlZycgZmllbGQuIFNpbmNlIFJFWC5SIGlzIG5vdCBzZXQsIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyAwLCB3aGljaCBpcyBSQVguIFNvIGl0IHJlYWRzIGZyb20gYGdzOltyMTMgKyBkaXNwMzJdYCBhbmQgYWRkcyBpdCB0byByYXguICBgcmF4YCBpcyBgQlBGX1JFR18wYC5cblxuU28sIHRoZSBrZXkgaGVyZSBpcyBpdCdzIHJlYWRpbmcgOCBieXRlcyBmcm9tIGBnczpbcjEzICsgXHUwMDI2dGhpc19jcHVfb2ZmXWAgYW5kIGFkZGluZyB0aGVtIHRvIGBCUEZfUkVHXzBgIChyYXgpLiBgQlBGX1JFR183YCBjb3JyZXNwb25kcyB0byBSMTMuICBUaGlzIG1lYW5zIHRoZSBpbnN0cnVjdGlvbiByZWFkcyBmcm9tIGBnczpbQlBGX1JFR183ICsgXHUwMDI2dGhpc19jcHVfb2ZmXWAsIHdoaWNoIGlzIHBlci1DUFUgbWVtb3J5LiAgVGhlIGBnc2Agc2VnbWVudCBpcyB0aGUgcGVyLUNQVSBhcmVhLCBhbmQgYFx1MDAyNnRoaXNfY3B1X29mZmAgaXMgYSBwZXItQ1BVIHZhcmlhYmxlIHRoYXQgb2Zmc2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIHBlci1DUFUgYXJlYS4gSWYgYW4gYXR0YWNrZXIgY2FuIGNvbnRyb2wgYEJQRl9SRUdfN2AgKFIxMyksIHRoZXkgY2FuIHJlYWQgKmFyYml0cmFyeSogcGVyLUNQVSBtZW1vcnkgYnkgbWFuaXB1bGF0aW5nIHRoZSBvZmZzZXQhIFRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gc2hvdWxkIHJlYWQgZnJvbSBhbiBvZmZzZXQgaW50byB0aGUgcGVyLUNQVSBhcmVhLlxuXG5UaGlzIGlzIGEgbWVtb3J5IHJlYWQgZnJvbSBhbiBhdHRhY2tlci1jb250cm9sbGVkIGFkZHJlc3MuIElmIHRoZSBhdHRhY2tlciBjYW4gY29udHJvbCB0aGUgdmFsdWUgb2YgYEJQRl9SRUdfN2AgKFIxMyksIHRoZXkgY29udHJvbCB0aGUgYWRkcmVzcy4gIFRoZSBpbnN0cnVjdGlvbiBhZGRzIHRoZSByZXN1bHQgdG8gYHJheGAsIGFuZCBpZiB0aGUgYXR0YWNrZXIgY2FuIHN1YnNlcXVlbnRseSByZWFkIGByYXhgLCB0aGV5IGNhbiBsZWFrIHRoZSBwZXItQ1BVIG1lbW9yeSB2YWx1ZSEgIFRoaXMgaXMgYSBzZXJpb3VzIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgaXNuJ3Qgc3BlY2lmaWNhbGx5IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWs7IGl0J3MgYW4gKmFyYml0cmFyeSogcGVyLUNQVSBtZW1vcnkgcmVhZC5cblxuS0FTQU4gKm1pZ2h0KiBjYXRjaCBvdXQtb2YtYm91bmRzIHJlYWRzIGlmIHRoZSBvZmZzZXQgaXMgbGFyZ2UsIGFuZCBpdCBjb3VsZCBlaXRoZXIgdHJpZ2dlciBLQVNBTiwgYSBwYWdlIGZhdWx0LCBvciBhbiBhcmJpdHJhcnkgbWVtb3J5IHJlYWQuIEl0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgYWRkcmVzcyBpcyBtYXBwZWQuIEtNU0FOIG1pZ2h0IGNhdGNoIGl0IGlmIGl0IHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB0aGUgcHJpbWFyeSBpc3N1ZSBpcyB0aGUgZW5jb2RpbmcgZXJyb3IgdGhhdCBjYXVzZXMgdGhlIGF0dGFja2VyIHRvIGJlIGFibGUgdG8gcmVhZCBhbiBhcmJpdHJhcnkgYWRkcmVzcyBvbiB0aGUgcGVyLUNQVSBhcmVhLiBJdCdzIGEgbWlzY29tcGlsYXRpb24gb2YgdGhlIEJQRiBwcm9ncmFtIHRoYXQgdXNlcyBgbW92X3BlcmNwdV9hZGRyYCB3aXRoIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOCwgUjksIFIxMywgUjE0LCBSMTUpLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzNSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0Mzo0Mi4xNDc1Nzk2NTJaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDY2NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc25faXNfbW92X3BlcmNwdV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMi1cXHRcXHRcXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkzMzpcXHRcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzQtXFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0Mzo0Mi4xOTIwNTYyNFoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE0Njc3ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBtYWNybyBvciBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgaXQncyBzcGVjaWZpY2FsbHkgbWVhbnQgdG8gaWRlbnRpZnkuIEkgc3VzcGVjdCBpdCdzIHJlbGF0ZWQgdG8gcmVjb2duaXppbmcgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIG1vdmluZyBkYXRhIHRvIG9yIGZyb20gcGVyLUNQVSB2YXJpYWJsZXMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYW4gYXNzZW1ibHkgY29kZSBhbmFseXNpcyBvciBkaXNhc3NlbWJsZXIgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGl0cyBkZWZpbml0aW9uIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbnVhbmNlcyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBLbm93aW5nIHRoZSBwcmVjaXNlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgcmV0dXJucyB0cnVlIGlzIGNyaXRpY2FsIGZvciBtYWtpbmcgYW55IGRvd25zdHJlYW0gZGVjaXNpb25zIGFib3V0IGluc3RydWN0aW9uIGhhbmRsaW5nIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHRoaXMgbWFjcm8gY292ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk5NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQzOjQ1LjkwNjc1Nzg3OVoiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDY0ODk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnNuX2lzX21vdl9wZXJjcHVfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTMwMj1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTM1NS1cXHRcXHRcXHRicmVhaztcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMzU2OlxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU3LVxcdFxcdFxcdGlmIChkc3QgIT0gc3JjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jPTk2Nz1pbnQgYnBmX2ppdF9idWlsZF9ib2R5KHN0cnVjdCBicGZfcHJvZyAqZnAsIHUzMiAqaW1hZ2UsIHUzMiAqZmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2MC1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTI2MTpcXHRcXHRcXHRpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoXFx1MDAyNmluc25baV0pKSB7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jLTEyNjItXFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NNUCkpIHtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTM2MT1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4NS1cXHRcXHRcXHRicmVhaztcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzODY6XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4Ny1cXHRcXHRcXHRpZiAocmQgIT0gcnMpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzMi1cXHRcXHRcXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkzMzpcXHRcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzQtXFx0XFx0XFx0XFx0LyogbW92IFxcdTAwM2Nkc3RcXHUwMDNlLCBcXHUwMDNjc3JjXFx1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAxLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjAyOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0Mzo0Ny42MDE0MTUxNzhaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNjgzNDc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBQZXItQ1BVIE1PViBJbnN0cnVjdGlvbiBEZXRlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBmaWx0ZXIgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgYE1PVmAgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVhbGluZyB3aXRoIHBlci1DUFUgYWRkcmVzc2VzLiBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIGZ1bmN0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNyaXRlcmlhIHRoaXMgZnVuY3Rpb24gdXNlcyBmb3IgaWRlbnRpZmljYXRpb24uIEFyZSB0aGV5IGxvb2tpbmcgYXQgc3BlY2lmaWMgb3Bjb2RlIHNlcXVlbmNlcywgcmVnaXN0ZXIgdXNhZ2UsIGFkZHJlc3NpbmcgbW9kZXMsIG9yIGEgY29tYmluYXRpb24gb2YgdGhlc2UgZmFjdG9ycz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciBhcmNoaXRlY3R1cmVzIHdoZXJlIHRoaXMgZGV0ZWN0aW9uIG1pZ2h0IGJlIG92ZXJseSBicm9hZCBvciB0b28gc3BlY2lmaWM/IEl04oCZcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBjb21waWxlcidzIG9wdGltaXphdGlvbnMgZG9u4oCZdCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaGFzIHRvIGJlIHJvY2sgc29saWQsIGFueSBpbnN0YWJpbGl0eSBjb3VsZCBoYXZlIHRlcnJpYmxlIGNvbnNlcXVlbmNlcyBmb3IgcmVhbCB0aW1lIHN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTc6NDM6NTMuMDE4MjUzNzk1WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHRcXHQuaW1tICAgPSAwIH0pXFxuIDIwMTpcXHRcXG4gMjAyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuIDIwMzpcXHR7XFxuIDIwNDpcXHRcXHRyZXR1cm4gaW5zbi1cXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xcbiAyMDU6XFx0fVxcbiAyMDY6XFx0XFxuIDIwNzpcXHQvKiBTaG9ydCBmb3JtIG9mIG1vdiwgZHN0X3JlZyA9IGltbTMyICovXFxuIDIwODpcXHRcXG4gMjA5OlxcdCNkZWZpbmUgQlBGX01PVjY0X0lNTShEU1QsIElNTSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMDpcXHRcXHQoKHN0cnVjdCBicGZfaW5zbikge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjExOlxcdFxcdFxcdC5jb2RlICA9IEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfSyxcXHRcXHRcXFxcXFxuIDIxMjpcXHRcXHRcXHQuZHN0X3JlZyA9IERTVCxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMzpcXHRcXHRcXHQuc3JjX3JlZyA9IDAsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTQ6XFx0XFx0XFx0Lm9mZiAgID0gMCxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE3OjQzOjUzLjAxODM3NDk2NloiLCJTZXEiOjY5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY5NDI3MTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQlBGIEpJVCBDb21waWxlciBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlzc2VjdGluZyB0aGlzIEJQRiBKSVQgY29tcGlsZXIgaXNzdWUsIGFuZCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZy4gRXNzZW50aWFsbHksIHRoZXJlJ3MgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRoYXQgY2F1c2VzIGl0IHRvIGVtaXQgYW4gaW5jb3JyZWN0IGluc3RydWN0aW9uIHdoZW4gaGFuZGxpbmcgcGVyLUNQVSBhZGRyZXNzZXMgd2l0aCBjZXJ0YWluIHJlZ2lzdGVyIHRhcmdldHMuIFNwZWNpZmljYWxseSwgdGhlIHByb2JsZW0gbGllcyBpbiBob3cgdGhlIFJFWCBwcmVmaXggaXMgZW5jb2RlZC4gVGhlIGBhZGRfMW1vZGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aGVuIGl0IHNob3VsZCBiZSB1c2luZyBgYWRkXzJtb2RgLlxuXG5UaGUgaW5jb3JyZWN0IGluc3RydWN0aW9uIGxvb2tzIGxpa2UgdGhpczogYGFkZCByYXgsIGdzOltyMTMgKyBcdTAwMjZ0aGlzX2NwdV9vZmZdYCB3aGVuIGl0IHNob3VsZCBiZSBgYWRkIHI4LCBnczpbXHUwMDI2dGhpc19jcHVfb2ZmXWAuICBUaGlzIGhhcHBlbnMgYmVjYXVzZSB0aGUgUkVYIHByZWZpeCBpcyBiZWluZyBzZXQgaW5jb3JyZWN0bHkuIFRoZSBKSVQgbWlzaW50ZXJwcmV0cyB0aGUgdGFyZ2V0IHJlZ2lzdGVyLiBUaGUgaW50ZW5kZWQgaW5zdHJ1Y3Rpb24gc2hvdWxkIHVzZSB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGUuZy4sIFI4KSBhcyB0aGUgdGFyZ2V0IGFuZCByZWFkIGZyb20gYSBmaXhlZCBvZmZzZXQgaW4gdGhlIGBnc2Agc2VnbWVudCAocGVyLUNQVSBtZW1vcnkpLiAgSW5zdGVhZCwgaXQgdXNlcyBgcmF4YCBhcyB0aGUgZGVzdGluYXRpb24gYW5kIGFuIGFyYml0cmFyeSBvZmZzZXQgZGV0ZXJtaW5lZCBieSBgcjEzYCwgd2hpY2ggaXMgdGllZCB0byBgQlBGX1JFR183YCBpbiB0aGUgQlBGIHByb2dyYW0uXG5cblRoaXMgaXMgYSBjbGFzc2ljIGFyYml0cmFyeSBtZW1vcnkgcmVhZCB2dWxuZXJhYmlsaXR5LiBBIEJQRiBwcm9ncmFtLCBpZiBjcmFmdGVkIGNhcmVmdWxseSwgY2FuIGNvbnRyb2wgYEJQRl9SRUdfN2AgYW5kIGVmZmVjdGl2ZWx5IHJlYWQgZnJvbSBhbnkgbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBwZXItQ1BVIG1lbW9yeSByZWdpb24uIElmIGByMTNgIGdvZXMgb3V0IG9mIGJvdW5kcywgeW91J2xsIGdldCBhIHBhZ2UgZmF1bHQsIHdoaWNoIGlzIGVhc2lseSBkZXRlY3RlZC4gQnV0IGV2ZW4gaWYgaXQgc3RheXMgKndpdGhpbiogdGhlIHBlci1DUFUgcmVnaW9uLCB0aGUgYXR0YWNrZXIgY2FuIHN0aWxsIHJlYWQgaW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgdGhleSBzaG91bGRuJ3QgaGF2ZSBhY2Nlc3MgdG8gYW5kIGxlYWsgaW5mb3JtYXRpb24uXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIEtNU0FOIGhlbHAgaGVyZT8gQW5kIHRoZSBhbnN3ZXIgaXMgTk8uIEtNU0FOIGlzIHByaW1hcmlseSBkZXNpZ25lZCB0byBjYXRjaCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgKmFuZCoga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2hpbGUgdGhpcyBpcyBhbiBpbmZvLWxlYWssIGl0J3MgYW4gaW5mby1sZWFrIG9mICphcmJpdHJhcnkqIG1lbW9yeSwgbm90IG5lY2Vzc2FyaWx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbiBhdHRhY2tlciB3b3VsZCBtb3JlIGxpa2VseSB1c2UgdGhpcyB0byBsZWFrICppbml0aWFsaXplZCogZGF0YSAocG9pbnRlcnMsIGtleXMpIHRvIGJ5cGFzcyBLQVNMUiBvciBlc2NhbGF0ZSBwcml2aWxlZ2VzLiBTaW5jZSB0aGUgbWVtb3J5IG1pZ2h0IGJlIGluaXRpYWxpemVkLCBLTVNBTiB3b24ndCBjb21wbGFpbi5cblxuQWxzbywgY29uc2lkZXIgaG93IHRoaXMgYnVnIHdvdWxkIGJlIHRyaWdnZXJlZC4gSXQncyBhIEpJVCBtaXNjb21waWxhdGlvbi4gQSBmdXp6ZXIgZ2VuZXJhdGluZyByYW5kb20gQlBGIHByb2dyYW1zIGlzIHRoZSBwZXJmZWN0IHRvb2wuIFRoZSBmdXp6ZXIgd2lsbCBnZW5lcmF0ZSByYW5kb20gQlBGIHByb2dyYW1zLiBBbmQgdGhlIEpJVCB3aWxsIGVtaXQgdGhlIGJhZCBpbnN0cnVjdGlvbiB3aXRoIGBCUEZfUkVHXzdgIGNvbnRhaW5pbmcgcmFuZG9tIHZhbHVlcy4gSWYgdGhlIGdlbmVyYXRlZCBhZGRyZXNzIGlzIGludmFsaWQsIHRoZSBjb2RlIHdpbGwgY3Jhc2ggd2l0aCBhIHBhZ2UgZmF1bHQuIEtBU0FOL0tNU0FOIG9yIGEgbm9ybWFsIGtlcm5lbCB3aWxsIGFsbCBjcmFzaCBhbmQgY2F0Y2ggaXQuIFRoZSBjcmFzaGVzIGNhdXNlZCBieSBpbnZhbGlkIHJlYWRzIGFyZSByZWFkaWx5IGNhdWdodCBieSBzdGFuZGFyZCBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBObyBuZWVkIGZvciBLTVNBTi4gSWYgdGhlIHJlYWRzIGFyZSB2YWxpZCBidXQgbWFsaWNpb3VzLCB0aGUgcmVzdWx0aW5nIHN0YXRlIG9mIFJBWCB3aWxsIGJlIGluY29ycmVjdC4gVGhpcyBpcyBhbHNvIHJlYWRpbHkgZm91bmQgYnkgbm9ybWFsIGZ1enppbmcgYW5kIHRlc3RpbmcuXG5cblRoZSBmaXgsIGJ5IHRoZSB3YXksIGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hhbmdlIGBhZGRfMW1vZGAgdG8gYGFkZF8ybW9kYC4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IFJFWCBwcmVmaXggaXMgZ2VuZXJhdGVkLCB0YXJnZXRpbmcgdGhlIGNvcnJlY3QgZGVzdGluYXRpb24gcmVnaXN0ZXIuICBUaGUgY29ycmVjdGVkIGluc3RydWN0aW9uIGxvb2tzIGxpa2UgdGhpczogIGBhZGQgcjgsIGdzOltcdTAwMjZ0aGlzX2NwdV9vZmZdYC5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBidWcsIHdoaWNoIGlzIGEgSklUIGVuY29kaW5nIGVycm9yIGxlYWRpbmcgdG8gZWl0aGVyIHBhZ2UgZmF1bHRzIG9yIGFyYml0cmFyeSBtZW1vcnkgY29ycnVwdGlvbiwgYW5kIHRoZSBmYWN0IHRoYXQgc3RhbmRhcmQgZnV6emluZyB3aWxsIGVhc2lseSBjYXRjaCB0aGUgY3Jhc2hlcywgKk5lZWRzS01TQU49ZmFsc2UqIGlzIHRoZSBjb3JyZWN0IGNob2ljZS4gVGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueSBhc3BlY3QgdGhhdCdzIHVuaXF1ZWx5IGRldGVjdGFibGUgYnkgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM0LCJPdXRwdXRUb2tlbnMiOjMxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNzo0NDoyNC43MTI2NTA1MDNaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFdoZW4gZW1pdHRpbmcgdGhlIGBhZGQgXFx1MDAzY2RzdFxcdTAwM2UsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV1gIGluc3RydWN0aW9uIGZvciBwZXItQ1BVIGFkZHJlc3MgcmVzb2x1dGlvbiwgdGhlIEpJVCBpbmNvcnJlY3RseSB1c2VkIGBhZGRfMW1vZGAsIHdoaWNoIHNldHMgdGhlIFJFWC5CIGJpdCBpbnN0ZWFkIG9mIHRoZSBSRVguUiBiaXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKGUuZy4sIFI4LVIxNSkuIFRoaXMgZW5jb2RpbmcgZXJyb3IgY2F1c2VzIHRoZSBDUFUgdG8gaW50ZXJwcmV0IHRoZSBpbnN0cnVjdGlvbiBhcyBgYWRkIHJheCwgZ3M6W3IxMyArIFxcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdGVhZCBvZiBgYWRkIHI4LCBnczpbXFx1MDAzY29mZlxcdTAwM2VdYC5cXG5cXG5FeGVjdXRpbmcgdGhpcyBtYWxmb3JtZWQgaW5zdHJ1Y3Rpb24gbGVhZHMgdG8gcmVhZGluZyBtZW1vcnkgZnJvbSBhIHNlbWktYXJiaXRyYXJ5IHBlci1DUFUgb2Zmc2V0IChjb250cm9sbGVkIGJ5IGByMTNgLCB3aGljaCBtYXBzIHRvIGBCUEZfUkVHXzdgKSBhbmQgY29ycnVwdGluZyB0aGUgYHJheGAgKGBCUEZfUkVHXzBgKSByZWdpc3Rlci4gVGhpcyByZXN1bHRzIGluIGVpdGhlciBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIChjYXVzaW5nIGEgcGFnZSBmYXVsdCBvciB0cmlnZ2VyaW5nIEtBU0FOKSBvciBhbiBpbmZvLWxlYWsgb2YgYXJiaXRyYXJ5IHBlci1DUFUgbWVtb3J5LiBcXG5cXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uLCB1c2FnZSwgb3IgbGVha2luZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEl0IGlzIGEgcHVyZSBKSVQgbWlzY29tcGlsYXRpb24gdGhhdCBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgcmVnaXN0ZXIgY29ycnVwdGlvbi4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVzdWx0aW5nIHBhZ2UgZmF1bHRzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFdoZW4gZW1pdHRpbmcgdGhlIGBhZGQgXFx1MDAzY2RzdFxcdTAwM2UsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV1gIGluc3RydWN0aW9uIGZvciBwZXItQ1BVIGFkZHJlc3MgcmVzb2x1dGlvbiwgdGhlIEpJVCBpbmNvcnJlY3RseSB1c2VkIGBhZGRfMW1vZGAsIHdoaWNoIHNldHMgdGhlIFJFWC5CIGJpdCBpbnN0ZWFkIG9mIHRoZSBSRVguUiBiaXQgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKGUuZy4sIFI4LVIxNSkuIFRoaXMgZW5jb2RpbmcgZXJyb3IgY2F1c2VzIHRoZSBDUFUgdG8gaW50ZXJwcmV0IHRoZSBpbnN0cnVjdGlvbiBhcyBgYWRkIHJheCwgZ3M6W3IxMyArIFxcdTAwM2NvZmZcXHUwMDNlXWAgaW5zdGVhZCBvZiBgYWRkIHI4LCBnczpbXFx1MDAzY29mZlxcdTAwM2VdYC5cXG5cXG5FeGVjdXRpbmcgdGhpcyBtYWxmb3JtZWQgaW5zdHJ1Y3Rpb24gbGVhZHMgdG8gcmVhZGluZyBtZW1vcnkgZnJvbSBhIHNlbWktYXJiaXRyYXJ5IHBlci1DUFUgb2Zmc2V0IChjb250cm9sbGVkIGJ5IGByMTNgLCB3aGljaCBtYXBzIHRvIGBCUEZfUkVHXzdgKSBhbmQgY29ycnVwdGluZyB0aGUgYHJheGAgKGBCUEZfUkVHXzBgKSByZWdpc3Rlci4gVGhpcyByZXN1bHRzIGluIGVpdGhlciBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIChjYXVzaW5nIGEgcGFnZSBmYXVsdCBvciB0cmlnZ2VyaW5nIEtBU0FOKSBvciBhbiBpbmZvLWxlYWsgb2YgYXJiaXRyYXJ5IHBlci1DUFUgbWVtb3J5LiBcXG5cXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uLCB1c2FnZSwgb3IgbGVha2luZyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEl0IGlzIGEgcHVyZSBKSVQgbWlzY29tcGlsYXRpb24gdGhhdCBsZWFkcyB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBhbmQgcmVnaXN0ZXIgY29ycnVwdGlvbi4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVzdWx0aW5nIHBhZ2UgZmF1bHRzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownqnsq[1] Phase: Succeeded StartedAt: 2026-08-14 17:44:36 +0000 UTC FinishedAt: 2026-08-14 17:44:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 17:44:36 +0000 UTC FinishedAt: 2026-08-14 17:44:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2] Phase: Succeeded StartedAt: 2026-08-14 17:44:36 +0000 UTC FinishedAt: 2026-08-14 21:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 17:44:36 +0000 UTC FinishedAt: 2026-08-14 21:25:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 17:44:36 +0000 UTC FinishedAt: 2026-08-14 17:44:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 17:44:36 +0000 UTC FinishedAt: 2026-08-14 17:44:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflownqnsq/series-workflownqnsq-convert-artifact-574820545/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 17:44:46 +0000 UTC FinishedAt: 2026-08-14 18:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 17:44:46 +0000 UTC FinishedAt: 2026-08-14 18:01:30 +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:*5fc66e19-b300-4218-8294-53ace2fa9328,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-workflownqnsq/series-workflownqnsq-convert-artifact-574820545/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": "f098e0bf-3a28-4890-80e7-269576ea2218", "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-workflownqnsq/series-workflownqnsq-build-action-3696244463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 17:44:46 +0000 UTC FinishedAt: 2026-08-14 18:01:20 +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:*5fc66e19-b300-4218-8294-53ace2fa9328,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-workflownqnsq/series-workflownqnsq-convert-artifact-574820545/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": "f098e0bf-3a28-4890-80e7-269576ea2218", "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-workflownqnsq/series-workflownqnsq-build-action-3696244463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 18:01:30 +0000 UTC FinishedAt: 2026-08-14 18:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 18:01:30 +0000 UTC FinishedAt: 2026-08-14 18:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 18:01:30 +0000 UTC FinishedAt: 2026-08-14 18:01:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 18:01:30 +0000 UTC FinishedAt: 2026-08-14 18:01:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflownqnsq/series-workflownqnsq-convert-artifact-3195407764/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 18:01:40 +0000 UTC FinishedAt: 2026-08-14 18:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 18:01:40 +0000 UTC FinishedAt: 2026-08-14 18:03:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f098e0bf-3a28-4890-80e7-269576ea2218,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-workflownqnsq/series-workflownqnsq-build-action-3696244463/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-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 18:03:48 +0000 UTC FinishedAt: 2026-08-14 18:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 18:03:48 +0000 UTC FinishedAt: 2026-08-14 18:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 18:03:48 +0000 UTC FinishedAt: 2026-08-14 18:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 18:03:48 +0000 UTC FinishedAt: 2026-08-14 18:20:29 +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:*5fc66e19-b300-4218-8294-53ace2fa9328,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-workflownqnsq/series-workflownqnsq-convert-artifact-3195407764/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": "f8e38c8c-4efb-440b-8914-772b48061619", "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-workflownqnsq/series-workflownqnsq-build-action-868120160/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 18:03:48 +0000 UTC FinishedAt: 2026-08-14 18:20:19 +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:*5fc66e19-b300-4218-8294-53ace2fa9328,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-workflownqnsq/series-workflownqnsq-convert-artifact-3195407764/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": "f8e38c8c-4efb-440b-8914-772b48061619", "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-workflownqnsq/series-workflownqnsq-build-action-868120160/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 18:20:29 +0000 UTC FinishedAt: 2026-08-14 18:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 18:20:29 +0000 UTC FinishedAt: 2026-08-14 18:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 18:20:29 +0000 UTC FinishedAt: 2026-08-14 18:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 18:20:29 +0000 UTC FinishedAt: 2026-08-14 18:22:25 +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:*f8e38c8c-4efb-440b-8914-772b48061619,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-workflownqnsq/series-workflownqnsq-build-action-868120160/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-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 18:22:35 +0000 UTC FinishedAt: 2026-08-14 21:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 18:22:35 +0000 UTC FinishedAt: 2026-08-14 21:25:02 +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":["bpf_int_jit_compile","bpf_do_misc_fixups"],"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:*f098e0bf-3a28-4890-80e7-269576ea2218,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f8e38c8c-4efb-440b-8914-772b48061619,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-workflownqnsq/series-workflownqnsq-build-action-3696244463/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-workflownqnsq/series-workflownqnsq-build-action-868120160/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 18:22:35 +0000 UTC FinishedAt: 2026-08-14 18:22:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 18:22:35 +0000 UTC FinishedAt: 2026-08-14 18:22:40 +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":["bpf_int_jit_compile","bpf_do_misc_fixups"],"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-workflownqnsq/series-workflownqnsq-convert-artifact-2388111037/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 18:22:35 +0000 UTC FinishedAt: 2026-08-14 18:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 18:22:35 +0000 UTC FinishedAt: 2026-08-14 18:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 18:22:35 +0000 UTC FinishedAt: 2026-08-14 18:22:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 18:22:45 +0000 UTC FinishedAt: 2026-08-14 21:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqnsq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"32e12668-13c6-4f28-8b4f-0afa5fd834fb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 18:22:45 +0000 UTC FinishedAt: 2026-08-14 21:24:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f098e0bf-3a28-4890-80e7-269576ea2218,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f8e38c8c-4efb-440b-8914-772b48061619,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-workflownqnsq/series-workflownqnsq-build-action-3696244463/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-workflownqnsq/series-workflownqnsq-build-action-868120160/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-workflownqnsq/series-workflownqnsq-convert-artifact-2388111037/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,}