Name: series-workflowd9q8x Phase: Succeeded StartedAt: 2026-08-26 17:48:36 +0000 UTC FinishedAt: 2026-08-26 18:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[0] Phase: Succeeded StartedAt: 2026-08-26 17:48:36 +0000 UTC FinishedAt: 2026-08-26 18:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 17:48:37 +0000 UTC FinishedAt: 2026-08-26 18:06:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_CONG_DCTCP", "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_CONG_DCTCP", "MPTCP" ], "series_id": "2f1649c0-f2ae-4dba-91fe-85e6de6ced71" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "do_tcp_getsockopt", "tcp_assign_congestion_control", "tcp_ca_openreq_child" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQ09OR19EQ1RDUCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3RjcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3RjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3RjcF9jYV9vcGVucmVxX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgb24gYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXHUwMDNlbmFtZWAgaXMgYSBmaXhlZC1zaXplIGFycmF5IGluIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgd2hpY2ggaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCBvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSB2aWEgYGJwZl9vYmpfbmFtZV9jcHlgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgZGF0YSByYWNlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGluIFRDUCBhbmQgTVBUQ1Agc29ja2V0cy4gSXQgYWRkcyBgUkVBRF9PTkNFYCwgYFdSSVRFX09OQ0VgLCBhbmQgUkNVIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGFjY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1pc3NlZCByYWNlIGNvbmRpdGlvbnMgcmVtYWluLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGEwOTdmNWI0NWM1ZDY5ZWRlOTY2MjM1Yzg3NjVhMzk0MDFkMWM3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjUxOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmM0NTc3NmQzZWQ5MGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NTYyLDkgJiM0Mzs0NTYyLDExIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4tXHRcdGNhX29wcyA9IGljc2stXHUwMDNlaWNza19jYV9vcHM7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRjYV9vcHMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcyk7XG4gXHRcdGlmIChjYV9vcHMgXHUwMDI2XHUwMDI2IGNhX29wcy1cdTAwM2VnZXRfaW5mbylcbiBcdFx0XHRzeiA9IGNhX29wcy1cdTAwM2VnZXRfaW5mbyhzaywgfjBVLCBcdTAwMjZhdHRyLCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc3opO1xuIFx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXG5AQCAtNDU3NywxNiAmIzQzOzQ1NzksMjQgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuIFx0XHR2YWwgPSAhaW5ldF9jc2tfaW5fcGluZ3BvbmdfbW9kZShzayk7XG4gXHRcdGJyZWFrO1xuIFxuLVx0Y2FzZSBUQ1BfQ09OR0VTVElPTjpcbiYjNDM7XHRjYXNlIFRDUF9DT05HRVNUSU9OOiB7XG4mIzQzO1x0XHRjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O1xuJiM0MztcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfQ0FfTkFNRV9NQVgpO1xuIFx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLVx1MDAzZW5hbWUsIGxlbikpXG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMpO1xuJiM0MztcdFx0bWVtY3B5KGNhX25hbWUsIGNhX29wcy1cdTAwM2VuYW1lLCBzaXplb2YoY2FfbmFtZSkpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdHJldHVybiAwO1xuLVxuJiM0MztcdH1cbiBcdGNhc2UgVENQX1VMUDpcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmNcbmluZGV4IGU5ZjZjNzdlMDYzMTYuLjhlODNlZjgxZmMxODcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfY29uZy5jXG5AQCAtMjIzLDcgJiM0MzsyMjMsNyBAQCB2b2lkIHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcbiBcdGNhID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2VpcHY0LnRjcF9jb25nZXN0aW9uX2NvbnRyb2wpO1xuIFx0aWYgKHVubGlrZWx5KCFicGZfdHJ5X21vZHVsZV9nZXQoY2EsIGNhLVx1MDAzZW93bmVyKSkpXG4gXHRcdGNhID0gXHUwMDI2dGNwX3Jlbm87XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4mIzQzO1x0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG5AQCAtMjUzLDcgJiM0MzsyNTMsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfcmVpbml0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssXG4gXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4gXG4gXHR0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc2spO1xuLVx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuJiM0MztcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpO1xuIFx0aWNzay1cdTAwM2VpY3NrX2NhX3NldHNvY2tvcHQgPSAxO1xuIFx0bWVtc2V0KGljc2stXHUwMDNlaWNza19jYV9wcml2LCAwLCBzaXplb2YoaWNzay1cdTAwM2VpY3NrX2NhX3ByaXYpKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGN0Y3AuYyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jXG5pbmRleCAyNzRlNjI4ZTdjZjg2Li45OWY2OGMyOTkyZDBmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2RjdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jXG5AQCAtMTExLDcgJiM0MzsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaylcbiBcdC8qIE5vIEVDTiBzdXBwb3J0PyBGYWxsIGJhY2sgdG8gUmVuby4gQWxzbyBuZWVkIHRvIGNsZWFyXG4gXHQgKiBFQ1QgZnJvbSBzayBzaW5jZSBpdCBpcyBzZXQgZHVyaW5nIDNXSFMgZm9yIERDVENQLlxuIFx0ICovXG4tXHRpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMgPSBcdTAwMjZkY3RjcF9yZW5vO1xuJiM0MztcdFdSSVRFX09OQ0UoaW5ldF9jc2soc2spLVx1MDAzZWljc2tfY2Ffb3BzLCBcdTAwMjZkY3RjcF9yZW5vKTtcbiBcdElORVRfRUNOX2RvbnR4bWl0KHNrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXG5pbmRleCBmM2ZhMGIxOGVkYTA2Li4wZGRmZDVhZjZlNThmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbkBAIC01MDcsNyAmIzQzOzUwNyw3IEBAIHZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXHRcdGNhID0gdGNwX2NhX2ZpbmRfa2V5KGNhX2tleSk7XG4gXHRcdGlmIChsaWtlbHkoY2EgXHUwMDI2XHUwMDI2IGJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtXHUwMDNlb3duZXIpKSkge1xuIFx0XHRcdGljc2stXHUwMDNlaWNza19jYV9kc3RfbG9ja2VkID0gdGNwX2NhX2RzdF9sb2NrZWQoZHN0KTtcbi1cdFx0XHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpO1xuIFx0XHRcdGNhX2dvdF9kc3QgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggZjI3MDlkNTg1ZWRiZC4uNzQ3MjdiN2ViNDQ2ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtNDA5Miw3ICYjNDM7NDA5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9jYV9kc3RfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiBcdGlmIChsaWtlbHkoY2EgXHUwMDI2XHUwMDI2IGJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtXHUwMDNlb3duZXIpKSkge1xuIFx0XHRicGZfbW9kdWxlX3B1dChpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLVx1MDAzZW93bmVyKTtcbiBcdFx0aWNzay1cdTAwM2VpY3NrX2NhX2RzdF9sb2NrZWQgPSB0Y3BfY2FfZHN0X2xvY2tlZChkc3QpO1xuLVx0XHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4mIzQzO1x0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMsIGNhKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li4wMDZkZTM5ZTgxNjU2IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMzIxOCw3ICYjNDM7MzIxOCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NhX3Jlc2V0KHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdC8qIG5vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3BzLCB0aGUgbmFtZSB3aWxsIHN1ZmZpY2UgKi9cbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gTlVMTDtcbiYjNDM7XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9DT05HX0RDVENQJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fdGNwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dGNwX2NhX29wZW5yZXFfY2hpbGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZGF0YSByYWNlcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGFjY2Vzc2luZyBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AgaW4gVENQIGFuZCBNUFRDUCBzb2NrZXRzLiBJdCBhZGRzIGBSRUFEX09OQ0VgLCBgV1JJVEVfT05DRWAsIGFuZCBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgYWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWlzc2VkIHJhY2UgY29uZGl0aW9ucyByZW1haW4uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YTA5N2Y1YjQ1YzVkNjllZGU5NjYyMzVjODc2NWEzOTQwMWQxYzczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTc6NTE6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmM0NTc3NmQzZWQ5MGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC00NTYyLDkgJiM0Mzs0NTYyLDExIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAkJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWNhX29wcyA9IGljc2stJmd0O2ljc2tfY2Ffb3BzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJY2Ffb3BzID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzKTsKIAkJaWYgKGNhX29wcyAmYW1wOyZhbXA7IGNhX29wcy0mZ3Q7Z2V0X2luZm8pCiAJCQlzeiA9IGNhX29wcy0mZ3Q7Z2V0X2luZm8oc2ssIH4wVSwgJmFtcDthdHRyLCAmYW1wO2luZm8pOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHN6KTsKIAkJaWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sICZhbXA7bGVuLCBzaXplb2YoaW50KSkpCkBAIC00NTc3LDE2ICYjNDM7NDU3OSwyNCBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCiAJCXZhbCA9ICFpbmV0X2Nza19pbl9waW5ncG9uZ19tb2RlKHNrKTsKIAkJYnJlYWs7CiAKLQljYXNlIFRDUF9DT05HRVNUSU9OOgomIzQzOwljYXNlIFRDUF9DT05HRVNUSU9OOiB7CiYjNDM7CQljaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9OwomIzQzOwogCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfQ0FfTkFNRV9NQVgpOwogCQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDtsZW4sIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgaWNzay0mZ3Q7aWNza19jYV9vcHMtJmd0O25hbWUsIGxlbikpCiYjNDM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQljYV9vcHMgPSBSRUFEX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMpOwomIzQzOwkJbWVtY3B5KGNhX25hbWUsIGNhX29wcy0mZ3Q7bmFtZSwgc2l6ZW9mKGNhX25hbWUpKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwkJaWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7Ci0KJiM0MzsJfQogCWNhc2UgVENQX1VMUDoKIAkJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggZTlmNmM3N2UwNjMxNi4uOGU4M2VmODFmYzE4NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0yMjMsNyAmIzQzOzIyMyw3IEBAIHZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKQogCWNhID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0mZ3Q7aXB2NC50Y3BfY29uZ2VzdGlvbl9jb250cm9sKTsKIAlpZiAodW5saWtlbHkoIWJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtJmd0O293bmVyKSkpCiAJCWNhID0gJmFtcDt0Y3BfcmVubzsKLQlpY3NrLSZndDtpY3NrX2NhX29wcyA9IGNhOwomIzQzOwlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBjYSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAltZW1zZXQoaWNzay0mZ3Q7aWNza19jYV9wcml2LCAwLCBzaXplb2YoaWNzay0mZ3Q7aWNza19jYV9wcml2KSk7CkBAIC0yNTMsNyAmIzQzOzI1Myw3IEBAIHN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAKIAl0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc2spOwotCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gY2E7CiYjNDM7CVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGNhKTsKIAlpY3NrLSZndDtpY3NrX2NhX3NldHNvY2tvcHQgPSAxOwogCW1lbXNldChpY3NrLSZndDtpY3NrX2NhX3ByaXYsIDAsIHNpemVvZihpY3NrLSZndDtpY3NrX2NhX3ByaXYpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2RjdGNwLmMgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuYwppbmRleCAyNzRlNjI4ZTdjZjg2Li45OWY2OGMyOTkyZDBmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfZGN0Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuYwpAQCAtMTExLDcgJiM0MzsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykKIAkvKiBObyBFQ04gc3VwcG9ydD8gRmFsbCBiYWNrIHRvIFJlbm8uIEFsc28gbmVlZCB0byBjbGVhcgogCSAqIEVDVCBmcm9tIHNrIHNpbmNlIGl0IGlzIHNldCBkdXJpbmcgM1dIUyBmb3IgRENUQ1AuCiAJICovCi0JaW5ldF9jc2soc2spLSZndDtpY3NrX2NhX29wcyA9ICZhbXA7ZGN0Y3BfcmVubzsKJiM0MzsJV1JJVEVfT05DRShpbmV0X2NzayhzayktJmd0O2ljc2tfY2Ffb3BzLCAmYW1wO2RjdGNwX3Jlbm8pOwogCUlORVRfRUNOX2RvbnR4bWl0KHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IGYzZmEwYjE4ZWRhMDYuLjBkZGZkNWFmNmU1OGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTUwNyw3ICYjNDM7NTA3LDcgQEAgdm9pZCB0Y3BfY2Ffb3BlbnJlcV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIAkJY2EgPSB0Y3BfY2FfZmluZF9rZXkoY2Ffa2V5KTsKIAkJaWYgKGxpa2VseShjYSAmYW1wOyZhbXA7IGJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtJmd0O293bmVyKSkpIHsKIAkJCWljc2stJmd0O2ljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7Ci0JCQlpY3NrLSZndDtpY3NrX2NhX29wcyA9IGNhOwomIzQzOwkJCVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGNhKTsKIAkJCWNhX2dvdF9kc3QgPSB0cnVlOwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGYyNzA5ZDU4NWVkYmQuLjc0NzI3YjdlYjQ0NmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTQwOTIsNyAmIzQzOzQwOTIsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiAJaWYgKGxpa2VseShjYSAmYW1wOyZhbXA7IGJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtJmd0O293bmVyKSkpIHsKIAkJYnBmX21vZHVsZV9wdXQoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGljc2stJmd0O2ljc2tfY2Ffb3BzLSZndDtvd25lcik7CiAJCWljc2stJmd0O2ljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7Ci0JCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gY2E7CiYjNDM7CQlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBjYSk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBiNDc0ZDAzNjIwYTc1Li4wMDZkZTM5ZTgxNjU2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzIxOCw3ICYjNDM7MzIxOCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NhX3Jlc2V0KHN0cnVjdCBzb2NrICpzaykKIAogCS8qIG5vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3BzLCB0aGUgbmFtZSB3aWxsIHN1ZmZpY2UgKi8KIAl0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc2spOwotCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gTlVMTDsKJiM0MzsJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcywgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AvTVBUQ1AgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgY2xlYW5pbmcgdXAgdGhlIGFjY2VzcyB0byBgaWNzay0mZ3Q7aWNza19jYV9vcHNgIGluIHRoZSBUQ1AgYW5kIE1QVENQIGNvZGUuIFRoZXkmIzM5O3JlIHRocm93aW5nIGluIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgdG8gYXZvaWQgZGF0YSByYWNlcywgd2hpY2ggaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYHJjdV9yZWFkX2xvY2soKWAvYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgdGhlIHJlYWRzIGluIGBkb190Y3BfZ2V0c29ja29wdGAgd2hlbiBkZWFsaW5nIHdpdGggYGljc2stJmd0O2ljc2tfY2Ffb3BzYCBhbmQgY2FsbGluZyBgY2Ffb3BzLSZndDtnZXRfaW5mb2Agb3IgY29weWluZyB0aGUgbmFtZS4gU2VlbXMgbGlrZSBhIHNvbGlkIG1vdmUsIGFkZHJlc3NpbmcgdGhvc2UgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcmVhZCB2dWxuZXJhYmlsaXRpZXMgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YCDigJMgdGhpbmsgYFRDUF9DQ19JTkZPYCBhbmQgYFRDUF9DT05HRVNUSU9OYCBvcHRpb25zLgoKTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gSXQgdG91Y2hlcyBjb3JlIFRDUCBsb2dpYywgZXNwZWNpYWxseSBpbiBgZG9fdGNwX2dldHNvY2tvcHRgLCBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgLCBhbmQgc28gb24uIFdlIG5lZWQgdG8gZXhwbG9yZSB0aGlzLgoKTGV0JiMzOTtzIHByaW9yaXRpemUgc29tZSBmdW5jdGlvbnMgZm9yIGZ1enppbmc6IGBkb190Y3BfZ2V0c29ja29wdGAsIGRlZmluaXRlbHkuIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAgaXMgYW5vdGhlciBzb2xpZCBjYW5kaWRhdGUuIGB0Y3BfcmVpbml0X2Nvbmdlc3Rpb25fY29udHJvbGAsIGBkY3RjcF9pbml0YCwgYHRjcF9jYV9kc3RfaW5pdGAgYW5kIGBtcHRjcF9jYV9yZXNldGAsIHRob3NlIGFyZSBzdGF0aWMsIHNvIHRoZXkgbWlnaHQgYmUgdHJpY2tpZXIgdG8gZ2V0IHRvIGRpcmVjdGx5LCBidXQgc3RpbGwgcmVsZXZhbnQuIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAgaXMgbm9uLXN0YXRpYywgc28gd2Ugc2hvdWxkIGNvbnNpZGVyIHRoYXQgYXMgd2VsbC4KCk9rYXksIGNvbmZpcm1pbmcgYGRvX3RjcF9nZXRzb2Nrb3B0YCBpcyBpbmRlZWQgbm9uLXN0YXRpYywgaW4gYG5ldC9pcHY0L3RjcC5jYC4gQW5kIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAsIHRoYXQgb25lJiMzOTtzIGluIGBuZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNgLiBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgLCB0aGF0IG9uZSBpcyBpbiBgbmV0L2lwdjQvdGNwX2NvbmcuY2AuCgpMYXN0bHksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gV2UmIzM5O2xsIG5lZWQgYE5FVF9JUFY0YCAob3IganVzdCBgSU5FVGApIGZvciBzdXJlLiBgVENQX0NPTkdfRENUQ1BgIGlmIHdlIHdhbnQgdG8gaGl0IGBkY3RjcF9pbml0YCwgYW5kIGBNUFRDUGAgaWYgd2UmIzM5O3JlIHRhcmdldGluZyBgbXB0Y3BfY2FfcmVzZXRgLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBmdXp6ZXImIzM5O3MgZW52aXJvbm1lbnQuIE9rYXksIGxldCYjMzk7cyB2ZXJpZnkgdGhvc2UgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRDUF9DT05HX0RDVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NjE2PWNvbmZpZyBUQ1BfQ09OR19JTExJTk9JU1xuLS1cbm5ldC9pcHY0L0tjb25maWctNjI3LVxubmV0L2lwdjQvS2NvbmZpZzo2Mjg6Y29uZmlnIFRDUF9DT05HX0RDVENQXG5uZXQvaXB2NC9LY29uZmlnLTYyOS1cdHRyaXN0YXRlIFwmIzM0O0RhdGFDZW50ZXIgVENQIChEQ1RDUClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDIxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk1QVENQIENvbmZpZ3VyYXRpb24gQ2hlY2sgLSBUaW1lIHRvIERyaWxsIERvd24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBNUFRDUCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IG5ldHdvcmsgdHJvdWJsZXNob290aW5nIG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG11bHRpcGF0aCBUQ1AuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgTVBUQ1Agc2V0dXAuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHNwZWNpZmljIHBhcmFtZXRlcnMsIHBlcmhhcHMgdGhlIHN1YmZsb3cgbGltaXRzLCB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSBpbiB1c2UgKGhvcGVmdWxseSBzb21ldGhpbmcgc2Vuc2libGUgbGlrZSBCQlIgb3IgVENQLUNBKSwgYW5kIHRoZSBvdmVyYWxsIE1QVENQIHBvbGljeS4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLCB0aG91Z2gsIGVuc3VyaW5nIHRoZSBrZXJuZWwgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgY29uZmlndXJlZCBmb3IgTVBUQ1Agb3BlcmF0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGVzdGFibGlzaGVkIGZsb3dzIGFyZSB1c2luZyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb2J2aW91cyBtaXNjb25maWd1cmF0aW9ucyBvciB1bmV4cGVjdGVkIHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgdGhlIGJvdHRsZW5lY2suIFVsdGltYXRlbHksIEkmIzM5O2xsIGJlIHN0cml2aW5nIHRvIGRldGVybWluZSBpZiBNUFRDUCBpcyBldmVuICplbmFibGVkKiBhcyBpdCBzaG91bGQgYmUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgZG9fdGNwX2dldHNvY2tvcHRgIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBgZG9fdGNwX2dldHNvY2tvcHRgLiBJcyBpdCBzb21ldGhpbmcgdGhhdCYjMzk7cyBpbnRlbmRlZCB0byBiZSBhY2Nlc3NlZCBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29udGV4dCwgb3IgaXMgaXQgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZnVuY3Rpb24/IEluIG90aGVyIHdvcmRzLCBpcyBpdCBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB0byB1c2VyLXNwYWNlLCBvciBpcyBpdCBub24tc3RhdGljLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBpdCBoYXMgYnJvYWRlciB2aXNpYmlsaXR5IHdpdGhpbiBpdHMgZGVmaW5lZCB0cmFuc2xhdGlvbiB1bml0LiBJIHdhbnQgdG8ga25vdyB3aGVyZSBhbmQgaG93IEkgY2FuIGFjY2VzcyB0aGlzIHJvdXRpbmUuIFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgd2lsbCBhZmZlY3QgaG93IEkgYXBwcm9hY2ggd2hhdGV2ZXIgSSYjMzk7bSBkb2luZy4gSWYgaXQmIzM5O3MgZXhwb3J0ZWQsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHZlcnkgZGlmZmVyZW50IHRoYW4gaWYgaXQmIzM5O3Mgc3RhdGljIGFuZCBsaW1pdGVkIHRvIGEgc3BlY2lmaWMgLmMgZmlsZS4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGNydWNpYWwgZm9yIG15IG92ZXJhbGwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZG9fdGNwX2dldHNvY2tvcHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9NDk5PV9fcG9sbF90IHRjcF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuaW5jbHVkZS9uZXQvdGNwLmgtNTAwLVx0XHQgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpO1xuaW5jbHVkZS9uZXQvdGNwLmg6NTAxOmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbmluY2x1ZGUvbmV0L3RjcC5oLTUwMi1cdFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0MTA9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtNDQ4MS1cbm5ldC9pcHY0L3RjcC5jOjQ0ODI6aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxubmV0L2lwdjQvdGNwLmMtNDQ4My1cdFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgaW4gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBvciByZS1lc3RhYmxpc2htZW50IHBhdGguIE15IGluaXRpYWwgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogd2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBBcmUgd2UgbG9va2luZyBhdCBpbml0aWFsIFNZTj8gQSByZXRyYW5zbWlzc2lvbiBhZnRlciBhIGxvc3MgZXZlbnQ/IE9yIHBlcmhhcHMgYSBjb25uZWN0aW9uIHJlc2V0IHdoZXJlIHdlJiMzOTtyZSBzdGFydGluZyBmcmVzaD8gVGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgaW1wbGllcyB3ZSYjMzk7cmUgYXNzaWduaW5nIChvciBwb3RlbnRpYWxseSAqcmUqLWFzc2lnbmluZykgYSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBleGlzdGluZyBzb2NrZXQgb3IgYSBuZXcgb25lLCBhcyB0aGUgbG9naWMgd2lsbCBkaWZmZXIuCgpNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHJlbWVtYmVyIHRoZSB2YXJpb3VzIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGNhbGxlZCBmcm9tLiBJcyBpdCBjYWxsZWQgZnJvbSB0aGUgc29ja2V0IGNyZWF0aW9uIHBhdGgsIG9yIGZyb20gdGhlIGNvbm5lY3Rpb24gYWNjZXB0YW5jZSBwYXRoPyBBcmUgdGhlcmUgZGlmZmVyZW50IHBhdGhzIGZvciBpbml0aWFsIGNvbm5lY3Rpb25zIHZlcnN1cyBjb25uZWN0aW9ucyB3aGVyZSB3ZSBhcmUgaGFuZGxpbmcgYSBsb3NzIGV2ZW50PyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbi4gYHNrYCAoc29ja2V0IHN0cnVjdHVyZSkgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZvbHZlZCwgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCBvYmplY3QsIHBlcmhhcHMgYSBwcm90b2NvbC1zcGVjaWZpYyBzdHJ1Y3R1cmUsIHRvIHRlbGwgdXMgd2hpY2ggYWxnb3JpdGhtIGlzIGFwcHJvcHJpYXRlLgoKV2UgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBjaGVja3MgdGhhdCBhcmUgYmVpbmcgZG9uZSB0byBlbnN1cmUgdGhlIHNlbGVjdGVkIGFsZ29yaXRobSBpcyB2YWxpZCBmb3IgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIChlLmcuIGlmIGNlcnRhaW4gYWxnb3JpdGhtcyBhcmUgZGlzYWJsZWQgb3IgYmxhY2tsaXN0ZWQpLiBXaGF0JiMzOTtzIHRoZSBmYWxsYmFjayBtZWNoYW5pc20gaWYgdGhlIGRlc2lyZWQgYWxnb3JpdGhtIGlzbiYjMzk7dCBhdmFpbGFibGU/IElzIHRoZXJlIGEgZGVmYXVsdCBhbGdvcml0aG0/IEFsc28sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgbG9naWMgYXJvdW5kIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBvdmVycmlkZXMuIElzIHRoZXJlIGEgd2F5IGZvciBhcHBsaWNhdGlvbnMgKG9yIGV2ZW4gdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yKSB0byBkaWN0YXRlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtPyBUaGlzIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGdpdmVuIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBhY3R1YWwgYXNzaWdubWVudCBwcm9jZXNzOiBob3cgdGhlIHNlbGVjdGVkIGFsZ29yaXRobSBpcyBhY3R1YWxseSBsaW5rZWQgdG8gdGhlIHNvY2tldCBzdHJ1Y3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgdG8gdGhlIGBpbmV0X2Nvbm5lY3Rpb25fc29ja2Agc3RydWN0dXJlIChvciBpdHMgZXF1aXZhbGVudHMpIG9yIHBvc3NpYmx5IG1hbmlwdWxhdGlvbiBvZiBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHBvaW50ZXJzIHRvIHRoZSBhY3R1YWwgY29uZ2VzdGlvbiBjb250cm9sIHN0YXRlIG1hY2hpbmUuIEFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBvciBsb2NraW5nIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQgbmVlZCB0byBiZSBleGFtaW5lZCBjYXJlZnVsbHksIGVzcGVjaWFsbHkgaWYgbXVsdGlwbGUgdGhyZWFkcyBvciBwcm9jZXNzZXMgbWlnaHQgYmUgYWNjZXNzaW5nIHRoaXMgZnVuY3Rpb24uIE92ZXJhbGwsIGl0IGlzIGdvaW5nIHRvIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgbGV0JiMzOTtzIGxvb2shCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MTM5Mz1pbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSk7XG5pbmNsdWRlL25ldC90Y3AuaC0xMzk0LVxuaW5jbHVkZS9uZXQvdGNwLmg6MTM5NTp2b2lkIHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaC0xMzk2LXZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0xOTk9Y2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYy0yMTUtLyogQXNzaWduIGNob2ljZSBvZiBjb25nZXN0aW9uIGNvbnRyb2wuICovXG5uZXQvaXB2NC90Y3BfY29uZy5jOjIxNjp2b2lkIHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBteSBtaW5kIGlzIHJhY2luZy4gVGhpcyBuYW1lIHNjcmVhbXMgJiMzNDtjaGlsZCBjb25uZWN0aW9uJiMzNDsgYW5kICYjMzQ7b3BlbiByZXF1ZXN0LCYjMzQ7IHdoaWNoIGxpa2VseSBtZWFucyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBoYW5kbGluZyBuZXcgVENQIGNvbm5lY3Rpb25zIGluaXRpYXRlZCBmcm9tIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIElzIHRoaXMgcGFydCBvZiB0aGUgU1lOLUFDSyBoYW5kbGluZywgb3IgaXMgaXQgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgZWRnZSBjYXNlPwoKSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIHRpZWQgaW50byBhIHNwZWNpZmljIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0sIG9yIGlmIGl0IGlzIGEgbW9yZSBnZW5lcmFsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgVENQIHN0YWNrLiBUaGUgbmFtZSAqc3VnZ2VzdHMqIGl0IGlzIGNvbmdlc3Rpb24gY29udHJvbCByZWxhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgaG9va3Mgb3IgY2FsbC1vdXRzIHRvIHNwZWNpZmljIGNvbmdlc3Rpb24gY29udHJvbCBpbXBsZW1lbnRhdGlvbnMgd2l0aGluIHRoZSBjb2RlLgoKTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBwcm9jZXNzIG9mIGhhbmRsaW5nIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3QsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBhbmQgbWF5YmUgZXZlbiBzZXR0aW5nIHVwIGluaXRpYWwgY29uZ2VzdGlvbiBjb250cm9sIHBhcmFtZXRlcnMgKmJlZm9yZSogdGhlIGNvbm5lY3Rpb24gaXMgZnVsbHkgZXN0YWJsaXNoZWQuIEl0JiMzOTtzIGFsbW9zdCBsaWtlIGEgc3RhZ2luZyBhcmVhIGZvciBhIG5ldyBzb2NrZXQgYmVmb3JlIHRoZSB0aHJlZS13YXkgaGFuZHNoYWtlIGlzIGNvbXBsZXRlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgdG91Y2hpbmcsIHBhcnRpY3VsYXJseSBhbnl0aGluZyByZWxhdGVkIHRvIHNvY2tldHMsIFRDUCBjb250cm9sIGJsb2NrcyAobGlrZSBgdGNwY2JgKSwgYW5kIGxpa2VseSBhbnkgY29uZ2VzdGlvbiBjb250cm9sIHN0YXRlLiBBbHNvLCBJIG5lZWQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTElTVEVOIHF1ZXVlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGFueSBsb2NraW5nIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBhcmlzZSB3aXRoIG11bHRpcGxlIGNvbmN1cnJlbnQgY29ubmVjdGlvbiBhdHRlbXB0cy4gVGhhdCYjMzk7cyBhbHdheXMgYSBwb2ludCBvZiB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU1Nz1zdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC01NTktXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MDp2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcbmluY2x1ZGUvbmV0L3RjcC5oLTU2MS1zdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00NzA9c3RhdGljIHZvaWQgdGNwX2Vjbl9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDk2LVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQ5Nzp2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjkKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2l0aGluIHRoZSBUQ1AgYW5kIE1QVENQIHN0YWNrLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGhvdyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG9wZXJhdGlvbnMgKGBpY3NrLSZndDtpY3NrX2NhX29wc2ApIGFyZSBoYW5kbGVkLiBUaGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCB0aGUganVkaWNpb3VzIHVzZSBvZiBgUkVBRF9PTkNFYCwgYFdSSVRFX09OQ0VgIG1lbW9yeSBiYXJyaWVycyBhbmQgUkNVIHJlYWQgbG9ja3MuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBib2xzdGVyaW5nIHRoZSBhdG9taWMgYWNjZXNzIGd1YXJhbnRlZXMgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGRhdGEgc3RydWN0dXJlLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBkb190Y3BfZ2V0c29ja29wdGAsIHdoZXJlIHRoZSBmaXggaXMgaW1wbGVtZW50ZWQgYW5kIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgIGFuZCBgdGNwX2NhX29wZW5yZXFfY2hpbGRgLCB0aGF0IGRlZmluZSB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9ucyBiZWluZyBhZGRyZXNzZWQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgcmV0cmlldmFsIG9mIGNvbmdlc3Rpb24gY29udHJvbCBvcHRpb25zLCB3aGljaCBpcyBhIHNlbnNpdGl2ZSBhcmVhLiBJIHNlZSB0aGV5JiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGNhc2VzIHdpdGggYFRDUF9DT05HX0RDVENQYCBhbmQgYE1QVENQYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlaXIgbW9yZSBjb21wbGV4IGNvbmdlc3Rpb24gY29udHJvbCBsb2dpYyBhbmQgY29uY3VycmVuY3kgbW9kZWxzLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgaW1wYWN0IGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQmIzM5O3MgZml4aW5nIHRoZSB3YXkgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBhcmUgYWNjZXNzaW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BlcmF0aW9ucywgdGhhdCBjb3VsZCBiZSBleHBsb2l0ZWQuIFNvLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSByaWdvcm91cyBmdXp6aW5nIGFuZCB0ZXN0aW5nIHdpdGggYW4gZW1waGFzaXMgb24gY29uY3VycmVudCBhY2Nlc3MuIEkgd2FudCB0byBsb29rIGZvciBhbnkgb3Zlcmxvb2tlZCByYWNlcywgYW5kIHJlZ3Jlc3Npb24gdGVzdGluZyB0byBlbnN1cmUgbm8gbmV3IHByb2JsZW1zIHdlcmUgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2VkLiBUaGlzIGlzIHRoZSBraW5kIG9mIGZpeCB0aGF0IHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQ09OR19EQ1RDUCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3RjcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3RjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3RjcF9jYV9vcGVucmVxX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGluIFRDUCBhbmQgTVBUQ1Agc29ja2V0cy4gSXQgYWRkcyBgUkVBRF9PTkNFYCwgYFdSSVRFX09OQ0VgLCBhbmQgUkNVIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGFjY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1pc3NlZCByYWNlIGNvbmRpdGlvbnMgcmVtYWluLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQ09OR19EQ1RDUCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3RjcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3RjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3RjcF9jYV9vcGVucmVxX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGluIFRDUCBhbmQgTVBUQ1Agc29ja2V0cy4gSXQgYWRkcyBgUkVBRF9PTkNFYCwgYFdSSVRFX09OQ0VgLCBhbmQgUkNVIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGFjY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1pc3NlZCByYWNlIGNvbmRpdGlvbnMgcmVtYWluLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgb24gYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXHUwMDNlbmFtZWAgaXMgYSBmaXhlZC1zaXplIGFycmF5IGluIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgd2hpY2ggaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCBvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSB2aWEgYGJwZl9vYmpfbmFtZV9jcHlgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgZGF0YSByYWNlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRhMDk3ZjViNDVjNWQ2OWVkZTk2NjIzNWM4NzY1YTM5NDAxZDFjNzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxNzo1MTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggYjQyMzdkMGU5OTRkNi4uYzQ1Nzc2ZDNlZDkwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTQ1NjIsOSAmIzQzOzQ1NjIsMTEgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLAogCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJY2Ffb3BzID0gaWNzay0mZ3Q7aWNza19jYV9vcHM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQljYV9vcHMgPSBSRUFEX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMpOwogCQlpZiAoY2Ffb3BzICZhbXA7JmFtcDsgY2Ffb3BzLSZndDtnZXRfaW5mbykKIAkJCXN6ID0gY2Ffb3BzLSZndDtnZXRfaW5mbyhzaywgfjBVLCAmYW1wO2F0dHIsICZhbXA7aW5mbyk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAogCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc3opOwogCQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDtsZW4sIHNpemVvZihpbnQpKSkKQEAgLTQ1NzcsMTYgJiM0Mzs0NTc5LDI0IEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAkJdmFsID0gIWluZXRfY3NrX2luX3Bpbmdwb25nX21vZGUoc2spOwogCQlicmVhazsKIAotCWNhc2UgVENQX0NPTkdFU1RJT046CiYjNDM7CWNhc2UgVENQX0NPTkdFU1RJT046IHsKJiM0MzsJCWNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307CiYjNDM7CiAJCWlmIChjb3B5X2Zyb21fc29ja3B0cigmYW1wO2xlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFRDUF9DQV9OQU1FX01BWCk7CiAJCWlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCAmYW1wO2xlbiwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBpY3NrLSZndDtpY3NrX2NhX29wcy0mZ3Q7bmFtZSwgbGVuKSkKJiM0MzsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWNhX29wcyA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcyk7CiYjNDM7CQltZW1jcHkoY2FfbmFtZSwgY2Ffb3BzLSZndDtuYW1lLCBzaXplb2YoY2FfbmFtZSkpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CQlpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgY2FfbmFtZSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKLQomIzQzOwl9CiAJY2FzZSBUQ1BfVUxQOgogCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCBlOWY2Yzc3ZTA2MzE2Li44ZTgzZWY4MWZjMTg3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTIyMyw3ICYjNDM7MjIzLDcgQEAgdm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spCiAJY2EgPSByY3VfZGVyZWZlcmVuY2UobmV0LSZndDtpcHY0LnRjcF9jb25nZXN0aW9uX2NvbnRyb2wpOwogCWlmICh1bmxpa2VseSghYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS0mZ3Q7b3duZXIpKSkKIAkJY2EgPSAmYW1wO3RjcF9yZW5vOwotCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gY2E7CiYjNDM7CVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGNhKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCW1lbXNldChpY3NrLSZndDtpY3NrX2NhX3ByaXYsIDAsIHNpemVvZihpY3NrLSZndDtpY3NrX2NhX3ByaXYpKTsKQEAgLTI1Myw3ICYjNDM7MjUzLDcgQEAgc3RhdGljIHZvaWQgdGNwX3JlaW5pdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLAogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAogCXRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7Ci0JaWNzay0mZ3Q7aWNza19jYV9vcHMgPSBjYTsKJiM0MzsJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcywgY2EpOwogCWljc2stJmd0O2ljc2tfY2Ffc2V0c29ja29wdCA9IDE7CiAJbWVtc2V0KGljc2stJmd0O2ljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stJmd0O2ljc2tfY2FfcHJpdikpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGN0Y3AuYyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jCmluZGV4IDI3NGU2MjhlN2NmODYuLjk5ZjY4YzI5OTJkMGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9kY3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jCkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIF9fYnBmX2tmdW5jIHN0YXRpYyB2b2lkIGRjdGNwX2luaXQoc3RydWN0IHNvY2sgKnNrKQogCS8qIE5vIEVDTiBzdXBwb3J0PyBGYWxsIGJhY2sgdG8gUmVuby4gQWxzbyBuZWVkIHRvIGNsZWFyCiAJICogRUNUIGZyb20gc2sgc2luY2UgaXQgaXMgc2V0IGR1cmluZyAzV0hTIGZvciBEQ1RDUC4KIAkgKi8KLQlpbmV0X2NzayhzayktJmd0O2ljc2tfY2Ffb3BzID0gJmFtcDtkY3RjcF9yZW5vOwomIzQzOwlXUklURV9PTkNFKGluZXRfY3NrKHNrKS0mZ3Q7aWNza19jYV9vcHMsICZhbXA7ZGN0Y3BfcmVubyk7CiAJSU5FVF9FQ05fZG9udHhtaXQoc2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggZjNmYTBiMThlZGEwNi4uMGRkZmQ1YWY2ZTU4ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtNTA3LDcgJiM0Mzs1MDcsNyBAQCB2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogCQljYSA9IHRjcF9jYV9maW5kX2tleShjYV9rZXkpOwogCQlpZiAobGlrZWx5KGNhICZhbXA7JmFtcDsgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS0mZ3Q7b3duZXIpKSkgewogCQkJaWNzay0mZ3Q7aWNza19jYV9kc3RfbG9ja2VkID0gdGNwX2NhX2RzdF9sb2NrZWQoZHN0KTsKLQkJCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gY2E7CiYjNDM7CQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcywgY2EpOwogCQkJY2FfZ290X2RzdCA9IHRydWU7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggZjI3MDlkNTg1ZWRiZC4uNzQ3MjdiN2ViNDQ2ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNDA5Miw3ICYjNDM7NDA5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9jYV9kc3RfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIAlpZiAobGlrZWx5KGNhICZhbXA7JmFtcDsgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS0mZ3Q7b3duZXIpKSkgewogCQlicGZfbW9kdWxlX3B1dChpY3NrLSZndDtpY3NrX2NhX29wcywgaWNzay0mZ3Q7aWNza19jYV9vcHMtJmd0O293bmVyKTsKIAkJaWNzay0mZ3Q7aWNza19jYV9kc3RfbG9ja2VkID0gdGNwX2NhX2RzdF9sb2NrZWQoZHN0KTsKLQkJaWNzay0mZ3Q7aWNza19jYV9vcHMgPSBjYTsKJiM0MzsJCVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGNhKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGI0NzRkMDM2MjBhNzUuLjAwNmRlMzllODE2NTYgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zMjE4LDcgJiM0MzszMjE4LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2FfcmVzZXQoc3RydWN0IHNvY2sgKnNrKQogCiAJLyogbm8gbmVlZCB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvcHMsIHRoZSBuYW1lIHdpbGwgc3VmZmljZSAqLwogCXRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7Ci0JaWNzay0mZ3Q7aWNza19jYV9vcHMgPSBOVUxMOwomIzQzOwlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBOVUxMKTsKIH0KIAogc3RhdGljIGludCBtcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVENQIENvbmdlc3Rpb24gQ29udHJvbCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHRoZSBvdXRzZXQsIEkgc2VlIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMgd2l0aGluIHRoZSBUQ1AvSVAgc3RhY2s6IGBuZXQvaXB2NC90Y3AuY2AsIGBuZXQvaXB2NC90Y3BfY29uZy5jYCwgYG5ldC9pcHY0L3RjcF9kY3RjcC5jYCwgYG5ldC9pcHY0L3RjcF9taW5pc29ja3MuY2AsIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLCBhbmQgZXZlbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLiBUaGF0IGluZGljYXRlcyB0aGlzIGlzIGEgcmF0aGVyIGJyb2FkIGNoYW5nZSwgbGlrZWx5IGFmZmVjdGluZyBob3cgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBtZWNoYW5pc20gaXMgaGFuZGxlZCBhdCBzZXZlcmFsIGxheWVycy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBkYXRhIHJhY2UgZml4ZXMsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgYGljc2stJmd0O2ljc2tfY2Ffb3BzYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBNYWtlcyBzZW5zZTsgdGhhdCYjMzk7cyBhIGNsYXNzaWMgc2lnbmFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBgVENQX0NPTkdFU1RJT05gIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24uIFRoZSBjb2RlIHNuaXBwZXQgaGVyZSBoYXMgbXkgaW1tZWRpYXRlIGF0dGVudGlvbjoKCmBgYGMKCWNhc2UgVENQX0NPTkdFU1RJT046IHsKCQljaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9OwoKCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKQoJCQlyZXR1cm4gLUVGQVVMVDsKCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTsKCQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDtsZW4sIHNpemVvZihpbnQpKSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgoJCXJjdV9yZWFkX2xvY2soKTsKCQljYV9vcHMgPSBSRUFEX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMpOwoJCW1lbWNweShjYV9uYW1lLCBjYV9vcHMtJmd0O25hbWUsIHNpemVvZihjYV9uYW1lKSk7CgkJcmN1X3JlYWRfdW5sb2NrKCk7CgoJCWlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBjYV9uYW1lLCBsZW4pKQoJCQlyZXR1cm4gLUVGQVVMVDsKCQlyZXR1cm4gMDsKCX0KYGBgCgpUaGUgaW50ZW50IGlzIGNsZWFyOiByZXRyaWV2ZSB0aGUgY3VycmVudCBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtJiMzOTtzIG5hbWUgYW5kIHJldHVybiBpdCB0byB0aGUgdXNlci4gVGhlIGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2AgaW5pdGlhbGl6YXRpb24gaXMgZ29vZDsgemVyb2luZyB0aGUgYnVmZmVyIGlzIGEgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLiBUaGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGBSRUFEX09OQ0VgIGFyZSB0aGVyZSwgYXMgZXhwZWN0ZWQsIGZvciBzYWZldHkuIFRoZW4sIHRoZSBjcml0aWNhbCBzdGVwOiBgbWVtY3B5KGNhX25hbWUsIGNhX29wcy0mZ3Q7bmFtZSwgc2l6ZW9mKGNhX25hbWUpKTtgLiBUaGF0JiMzOTtzIHdoZXJlIEkgc3RhcnQgdG8gc2VlIGEgcG90ZW50aWFsIHByb2JsZW0uIGBzaXplb2YoY2FfbmFtZSlgIGlzIGBUQ1BfQ0FfTkFNRV9NQVhgLCBidXQgaXMgYGNhX29wcy0mZ3Q7bmFtZWAgKmd1YXJhbnRlZWQqIHRvIGJlIHRoYXQgc2l6ZT8gSWYgYGNhX29wcy0mZ3Q7bmFtZWAgaXMgYSB2YXJpYWJsZSBsZW5ndGggc3RyaW5nIG9yIGEgc2hvcnRlciBmaXhlZC1zaXplIGFycmF5LCB0aGlzIGBtZW1jcHlgIGNvdWxkIHJlYWQgcGFzdCB0aGUgYm91bmRzIG9mIGBjYV9vcHMtJmd0O25hbWVgLCBsZWFkaW5nIHRvIGEgYnVmZmVyIG92ZXItcmVhZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgdHlwZSBgY2Ffb3BzLSZndDtuYW1lYCBhY3R1YWxseSBpcy4gVGltZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTEzMDY9c3RydWN0IHJhdGVfc2FtcGxlIHtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0xMzI0LVxuaW5jbHVkZS9uZXQvdGNwLmg6MTMyNTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHtcbmluY2x1ZGUvbmV0L3RjcC5oLTEzMjYtLyogZmFzdCBwYXRoIGZpZWxkcyBhcmUgcHV0IGZpcnN0IHRvIGZpbGwgb25lIGNhY2hlIGxpbmUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFRDUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgVENQIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcmV0cmFuc21pc3Npb24gYmVoYXZpb3IuIE15IGd1dCB0ZWxscyBtZSBzb21ldGhpbmcgaXNuJiMzOTt0IHF1aXRlIHJpZ2h0IHdpdGggaG93IGl0JiMzOTtzIGhhbmRsaW5nIGRlbGF5ZWQgQUNLcyBpbiB0aGlzIHBhcnRpY3VsYXIgZWRnZSBjYXNlIEkmIzM5O20gZGVidWdnaW5nLiBUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSDigJMgYW5kIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgaW5jbHVkZS9uZXQvdGNwLmhgLiBNb3JlIHByZWNpc2VseSwgSSYjMzk7bGwgYmUgbG9va2luZyBhcm91bmQgbGluZSAxMzI1LiBUaGlzIGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCB0aGUgbW9yZSBpbnRyaWNhdGUgZGV0YWlscyBvZiBUQ1Agc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHRpbWVyIG1hbmFnZW1lbnQ7IEkmIzM5O20gaG9waW5nIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGdvdmVybmluZyByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cyBvciBBQ0sgcHJvY2Vzc2luZyB0aGVyZSwgd2hpY2ggbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGlzc3VlLiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHNlZSBpZiBJIGNhbiBmaW5kIG15IGFuc3dlciBkaXJlY3RseSwgb3IgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzdGFjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMjU6XHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHtcbjEzMjY6XHQvKiBmYXN0IHBhdGggZmllbGRzIGFyZSBwdXQgZmlyc3QgdG8gZmlsbCBvbmUgY2FjaGUgbGluZSAqL1xuMTMyNzpcdFxuMTMyODpcdFx0LyogQSBjb25nZXN0aW9uIGNvbnRyb2wgKENDKSBtdXN0IHByb3ZpZGUgb25lIG9mIGVpdGhlcjpcbjEzMjk6XHRcdCAqXG4xMzMwOlx0XHQgKiAoYSkgYSBjb25nX2F2b2lkIGZ1bmN0aW9uLCBpZiB0aGUgQ0Mgd2FudHMgdG8gdXNlIHRoZSBjb3JlIFRDUFxuMTMzMTpcdFx0ICogICAgIHN0YWNrJiMzOTtzIGRlZmF1bHQgZnVuY3Rpb25hbGl0eSB0byBpbXBsZW1lbnQgYSBcJiMzNDtjbGFzc2ljXCYjMzQ7XG4xMzMyOlx0XHQgKiAgICAgKFJlbm8vQ1VCSUMtc3R5bGUpIHJlc3BvbnNlIHRvIHBhY2tldCBsb3NzLCBSRkMzMTY4IEVDTixcbjEzMzM6XHRcdCAqICAgICBpZGxlIHBlcmlvZHMsIHBhY2luZyByYXRlIGNvbXB1dGF0aW9ucywgZXRjLlxuMTMzNDpcdFx0ICpcbjEzMzU6XHRcdCAqIChiKSBhIGNvbmdfY29udHJvbCBmdW5jdGlvbiwgaWYgdGhlIENDIHdhbnRzIGN1c3RvbSBiZWhhdmlvciBhbmRcbjEzMzY6XHRcdCAqICAgICAgY29tcGxldGUgY29udHJvbCBvZiBhbGwgY29uZ2VzdGlvbiBjb250cm9sIGJlaGF2aW9ycy5cbjEzMzc6XHRcdCAqL1xuMTMzODpcdFx0LyogKGEpIFwmIzM0O2NsYXNzaWNcJiMzNDsgcmVzcG9uc2U6IGNhbGN1bGF0ZSBuZXcgY3duZC5cbjEzMzk6XHRcdCAqL1xuMTM0MDpcdFx0dm9pZCAoKmNvbmdfYXZvaWQpKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywgdTMyIGFja2VkKTtcbjEzNDE6XHRcdC8qIChiKSBcJiMzNDtjdXN0b21cJiMzNDsgcmVzcG9uc2U6IGNhbGwgd2hlbiBwYWNrZXRzIGFyZSBkZWxpdmVyZWQgdG8gdXBkYXRlXG4xMzQyOlx0XHQgKiBjd25kIGFuZCBwYWNpbmcgcmF0ZSwgYWZ0ZXIgYWxsIHRoZSBjYV9zdGF0ZSBwcm9jZXNzaW5nLlxuMTM0MzpcdFx0ICovXG4xMzQ0Olx0XHR2b2lkICgqY29uZ19jb250cm9sKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIGludCBmbGFnLCBjb25zdCBzdHJ1Y3QgcmF0ZV9zYW1wbGUgKnJzKTtcbjEzNDU6XHRcbjEzNDY6XHRcdC8qIHJldHVybiBzbG93IHN0YXJ0IHRocmVzaG9sZCAocmVxdWlyZWQpICovXG4xMzQ3Olx0XHR1MzIgKCpzc3RocmVzaCkoc3RydWN0IHNvY2sgKnNrKTtcbjEzNDg6XHRcbjEzNDk6XHRcdC8qIGNhbGwgYmVmb3JlIGNoYW5naW5nIGNhX3N0YXRlIChvcHRpb25hbCkgKi9cbjEzNTA6XHRcdHZvaWQgKCpzZXRfc3RhdGUpKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKTtcbjEzNTE6XHRcbjEzNTI6XHRcdC8qIGNhbGwgd2hlbiBjd25kIGV2ZW50IG9jY3VycyAob3B0aW9uYWwpICovXG4xMzUzOlx0XHR2b2lkICgqY3duZF9ldmVudCkoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9jYV9ldmVudCBldik7XG4xMzU0Olx0XG4xMzU1Olx0XHQvKiBjYWxsIHdoZW4gQ0FfRVZFTlRfVFhfU1RBUlQgY3duZCBldmVudCBvY2N1cnMgKG9wdGlvbmFsKSAqL1xuMTM1NjpcdFx0dm9pZCAoKmN3bmRfZXZlbnRfdHhfc3RhcnQpKHN0cnVjdCBzb2NrICpzayk7XG4xMzU3Olx0XG4xMzU4Olx0XHQvKiBjYWxsIHdoZW4gYWNrIGFycml2ZXMgKG9wdGlvbmFsKSAqL1xuMTM1OTpcdFx0dm9pZCAoKmluX2Fja19ldmVudCkoc3RydWN0IHNvY2sgKnNrLCB1MzIgZmxhZ3MpO1xuMTM2MDpcdFxuMTM2MTpcdFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cbjEzNjI6XHRcdHZvaWQgKCpwa3RzX2Fja2VkKShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpO1xuMTM2MzpcdFxuMTM2NDpcdFx0Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKG9wdGlvbmFsKSAqL1xuMTM2NTpcdFx0dTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spO1xuMTM2NjpcdFxuMTM2NzpcdFx0LyogbmV3IHZhbHVlIG9mIGN3bmQgYWZ0ZXIgbG9zcyAocmVxdWlyZWQpICovXG4xMzY4Olx0XHR1MzIgICgqdW5kb19jd25kKShzdHJ1Y3Qgc29jayAqc2spO1xuMTM2OTpcdFx0LyogcmV0dXJucyB0aGUgbXVsdGlwbGllciB1c2VkIGluIHRjcF9zbmRidWZfZXhwYW5kIChvcHRpb25hbCkgKi9cbjEzNzA6XHRcdHUzMiAoKnNuZGJ1Zl9leHBhbmQpKHN0cnVjdCBzb2NrICpzayk7XG4xMzcxOlx0XG4xMzcyOlx0LyogY29udHJvbC9zbG93IHBhdGhzIHB1dCBsYXN0ICovXG4xMzczOlx0XHQvKiBnZXQgaW5mbyBmb3IgaW5ldF9kaWFnIChvcHRpb25hbCkgKi9cbjEzNzQ6XHRcdHNpemVfdCAoKmdldF9pbmZvKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBleHQsIGludCAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgcGVyc3BlY3RpdmUgb24gZXhhbWluaW5nIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYDoKCioqRGl2aW5nIERlZXAgaW50byBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AuIEkga25vdyB0aGlzIGlzIGEgZnVuZGFtZW50YWwgc3RydWN0dXJlIGZvciBhbnkgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSB3aXRoaW4gdGhlIFRDUCBzdGFjaywgc28gYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIGlzIHBhcmFtb3VudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBmaWVsZHMgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHZhcmlvdXMgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMgaW50ZXJhY3Qgd2l0aCB0aGlzLiBTcGVjaWZpY2FsbHksIEkgYW0gdGhpbmtpbmcgYWJvdXQgaG93IGFsZ29yaXRobXMgaGFuZGxlIHRoZWlyIGxvZ2ljIGJ5IHVzaW5nIHRob3NlIG9wZXJhdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb24gcG9pbnRlcnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBzdHJ1Y3Q/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBtYXliZSB3aGVyZSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIGRpdmVyZ2U/IEkgd2lsbCBiZSBsb29raW5nIGZvciBob3cgbmV3IGFsZ29yaXRobXMgYXJlIGFibGUgdG8gJiMzNDtwbHVnIGluJiMzNDsgdG8gdGhlIGtlcm5lbCB1c2luZyB0aGlzIG1lY2hhbmlzbS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJmYWNlIHByZWNpc2VseSB3aWxsIGJlIGNyaXRpY2FsLiBJIGFtIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHRpZXMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgb2YgdGhlIFRDUCBzdGFjayBhbmQgaG93IGl0IG1hbmFnZXMgdG8gbWFrZSB0aGF0IG1vZHVsYXIuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyBpbnNpZ2h0cyB0aGUgY29kZSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3NTpcdFx0XHRcdCAgIHVuaW9uIHRjcF9jY19pbmZvICppbmZvKTtcbjEzNzY6XHRcbjEzNzc6XHRcdGNoYXIgXHRcdFx0bmFtZVtUQ1BfQ0FfTkFNRV9NQVhdO1xuMTM3ODpcdFx0c3RydWN0IG1vZHVsZVx0XHQqb3duZXI7XG4xMzc5Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuMTM4MDpcdFx0dTMyXHRcdFx0a2V5O1xuMTM4MTpcdFx0dTMyXHRcdFx0ZmxhZ3M7XG4xMzgyOlx0XG4xMzgzOlx0XHQvKiBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAob3B0aW9uYWwpICovXG4xMzg0Olx0XHR2b2lkICgqaW5pdCkoc3RydWN0IHNvY2sgKnNrKTtcbjEzODU6XHRcdC8qIGNsZWFudXAgcHJpdmF0ZSBkYXRhICAob3B0aW9uYWwpICovXG4xMzg2Olx0XHR2b2lkICgqcmVsZWFzZSkoc3RydWN0IHNvY2sgKnNrKTtcbjEzODc6XHR9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4xMzg4Olx0XG4xMzg5Olx0aW50IHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XG4xMzkwOlx0dm9pZCB0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XG4xMzkxOlx0aW50IHRjcF91cGRhdGVfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnR5cGUsXG4xMzkyOlx0XHRcdFx0XHQgIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKm9sZF90eXBlKTtcbjEzOTM6XHRpbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSk7XG4xMzk0Olx0XG4xMzk1Olx0dm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spO1xuMTM5NjpcdHZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XG4xMzk3Olx0dm9pZCB0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKTtcbjEzOTg6XHRpbnQgdGNwX3NldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuMTM5OTpcdHZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUpO1xuMTQwMDpcdHZvaWQgdGNwX2dldF9hdmFpbGFibGVfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4xNDAxOlx0dm9pZCB0Y3BfZ2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4xNDAyOlx0aW50IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYWxsb3dlZCk7XG4xNDAzOlx0aW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBsb2FkLFxuMTQwNDpcdFx0XHRcdCAgICAgICBib29sIGNhcF9uZXRfYWRtaW4pO1xuMTQwNTpcdHUzMiB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrZWQpO1xuMTQwNjpcdHZvaWQgdGNwX2NvbmdfYXZvaWRfYWkoc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHcsIHUzMiBhY2tlZCk7XG4xNDA3Olx0XG4xNDA4Olx0dTMyIHRjcF9yZW5vX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzayk7XG4xNDA5Olx0dTMyIHRjcF9yZW5vX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spO1xuMTQxMDpcdHZvaWQgdGNwX3Jlbm9fY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZCk7XG4xNDExOlx0ZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm87XG4xNDEyOlx0XG4xNDEzOlx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7XG4xNDE0Olx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmRfa2V5KHUzMiBrZXkpO1xuMTQxNTpcdHUzMiB0Y3BfY2FfZ2V0X2tleV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgKmVjbl9jYSk7XG4xNDE2Olx0I2lmZGVmIENPTkZJR19JTkVUXG4xNDE3Olx0Y2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpO1xuMTQxODpcdCNlbHNlXG4xNDE5Olx0c3RhdGljIGlubGluZSBjaGFyICp0Y3BfY2FfZ2V0X25hbWVfYnlfa2V5KHUzMiBrZXksIGNoYXIgKmJ1ZmZlcilcbjE0MjA6XHR7XG4xNDIxOlx0XHRyZXR1cm4gTlVMTDtcbjE0MjI6XHR9XG4xNDIzOlx0I2VuZGlmXG4xNDI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmdlc3Rpb24gQ29udHJvbCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzZWUgdGhhdCBgbmFtZWAgaXMgZGVjbGFyZWQgYXMgYSBmaXhlZC1zaXplIGNoYXJhY3RlciBhcnJheTogYGNoYXIgbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdYC4gUmlnaHQgYXdheSwgdGhlIGBtZW1jcHlgIGlzIGNvcHlpbmcgYFRDUF9DQV9OQU1FX01BWGAgYnl0ZXMgZnJvbSBgY2Ffb3BzLSZndDtuYW1lYCBpbnRvIGBjYV9uYW1lYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgc2luY2UgYGNhX29wcy0mZ3Q7bmFtZWAgaXMgaXRzZWxmIGEgZml4ZWQtc2l6ZSBhcnJheSBvZiB0aGUgc2FtZSBzaXplLCB0aGlzIGxvb2tzIGxpa2UgYSBwZXJmZWN0bHkgc2FmZSBjb3B5IOKAkyBubyBwb3RlbnRpYWwgZm9yIHJlYWRpbmcgb3V0c2lkZSBvZiBib3VuZHMuIFRoYXTigJlzIGdvb2QuCgpCdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyBraWNraW5nIGluLCBhbmQgSSBzdGFydCB3b25kZXJpbmc6IGlzIGBjYV9vcHMtJmd0O25hbWVgICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgdGhlc2UgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0cz8gVXN1YWxseSwgdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMgdmFyaWFibGVzIGRlZmluZWQgaW4ga2VybmVsIG1vZHVsZXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhhdCYjMzk7cyB0aGUgY29tbW9uIGNhc2UsIGFuZCB1c3VhbGx5IG5vdCBzb21ldGhpbmcgdG8gc3dlYXQuCgpIb3dldmVyLCBJIG5lZWQgdG8gY292ZXIgYWxsIHRoZSBiYXNlcy4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlIG1pZ2h0IGJlIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0dXJlcyB3aGVyZSBgbmFtZWAgbWlnaHQgKm5vdCogYmUgZnVsbHkgemVyb2VkLiBOb3csIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgQlBGIGxhbmRzY2FwZS4gV2l0aCBCUEYgYmVpbmcgYWJsZSB0byByZWdpc3RlciBjb25nZXN0aW9uIGNvbnRyb2xzLCB0aGF04oCZcyBhIG5ldyBhdHRhY2sgdmVjdG9yLiBJIHNob3VsZCBjaGVjayBgYnBmX3RjcF9jYWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdWNoIGR5bmFtaWMgaW5zdGFuY2VzLiBHb3R0YSBjb3ZlciBhbGwgbXkgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yMT11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3BtdHVfY29va2llICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc3luY19tc3MsdGNwX2N1cnJlbnRfbXNzLHRjcF8uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAgICAgICAgICAgaWNza19jYV9vcHMgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3Rzb19zZWdzLHRjLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTIzLXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgIGljc2tfYWZfb3BzICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3Bfc2VuZF9zeW5fZC4uLlxuLS1cbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg9Mjg9c3RydWN0IGluZXRfYmluZDJfYnVja2V0O1xuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaDoyOTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzO1xuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC0zMC1cbi0tXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPTgxPXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC05Ni1cdF9fdTMyXHRcdFx0ICBpY3NrX3BtdHVfY29va2llO1xuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaDo5NzpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmljc2tfY2Ffb3BzO1xuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC05OC1cdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgKmljc2tfYWZfb3BzO1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaD01NT1zdHJ1Y3QgbmV0bnNfaXB2NCB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oLTIzNi1cdGludCBzeXNjdGxfdGNwX2Zhc3RvcGVuO1xuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oOjIzNzpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgX19yY3UgICp0Y3BfY29uZ2VzdGlvbl9jb250cm9sO1xuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oLTIzOC1cdHN0cnVjdCB0Y3BfZmFzdG9wZW5fY29udGV4dCBfX3JjdSAqdGNwX2Zhc3RvcGVuX2N0eDtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0xMzA2PXN0cnVjdCByYXRlX3NhbXBsZSB7XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMTMyNC1cbmluY2x1ZGUvbmV0L3RjcC5oOjEzMjU6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB7XG5pbmNsdWRlL25ldC90Y3AuaC0xMzI2LS8qIGZhc3QgcGF0aCBmaWVsZHMgYXJlIHB1dCBmaXJzdCB0byBmaWxsIG9uZSBjYWNoZSBsaW5lICovXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMTM4OC1cbmluY2x1ZGUvbmV0L3RjcC5oOjEzODk6aW50IHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XG5pbmNsdWRlL25ldC90Y3AuaDoxMzkwOnZvaWQgdGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnR5cGUpO1xuaW5jbHVkZS9uZXQvdGNwLmg6MTM5MTppbnQgdGNwX3VwZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSxcbmluY2x1ZGUvbmV0L3RjcC5oOjEzOTI6XHRcdFx0XHQgIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKm9sZF90eXBlKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjEzOTM6aW50IHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMTM5NC1cbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0xNDEwPXZvaWQgdGNwX3Jlbm9fY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZCk7XG5pbmNsdWRlL25ldC90Y3AuaDoxNDExOmV4dGVybiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9yZW5vO1xuaW5jbHVkZS9uZXQvdGNwLmgtMTQxMi1cbmluY2x1ZGUvbmV0L3RjcC5oOjE0MTM6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7XG5pbmNsdWRlL25ldC90Y3AuaDoxNDE0OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnRjcF9jYV9maW5kX2tleSh1MzIga2V5KTtcbmluY2x1ZGUvbmV0L3RjcC5oLTE0MTUtdTMyIHRjcF9jYV9nZXRfa2V5X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCAqZWNuX2NhKTtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0xNzE2PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlX2NoZWNrKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MTcte1xuaW5jbHVkZS9uZXQvdGNwLmg6MTcxODpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2NhX29wcztcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MTktXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTE5ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwNy0vKiBcJiMzNDtjb25zdCB2b2lkICpcJiMzNDsgYmVjYXVzZSBzb21lIHN1YnN5c3RlbSBpc1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDg6ICogcGFzc2luZyBhIGNvbnN0IChlLmcuIGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjA5LSAqL1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0xNTI9YnBmX3RjcF9jYV9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTE2OS1cdFx0aWYgKHByb2dfb3BzX21vZmYocHJvZykgIT1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoxNzA6XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCByZWxlYXNlKSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xNzEtXHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19zZXRzb2Nrb3B0X25vZGVsYXlfcHJvdG87XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTE4MC1cdFx0aWYgKHByb2dfb3BzX21vZmYocHJvZykgIT1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoxODE6XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCByZWxlYXNlKSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xODItXHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19nZXRzb2Nrb3B0X3Byb3RvO1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0yMTA9c3RhdGljIGludCBicGZfdGNwX2NhX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEzLXtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMTQ6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp1dGNwX2NhO1xubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIxNTpcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnRjcF9jYTtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMTYtXHR1MzIgbW9mZjtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMTctXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjE4Olx0dXRjcF9jYSA9IChjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICopdWRhdGE7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjE5Olx0dGNwX2NhID0gKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKilrZGF0YTtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjAtXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyMi1cdHN3aXRjaCAobW9mZikge1xubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIyMzpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgZmxhZ3MpOlxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyNC1cdFx0aWYgKHV0Y3BfY2EtXHUwMDNlZmxhZ3MgXHUwMDI2IH5UQ1BfQ09OR19NQVNLKVxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjctXHRcdHJldHVybiAxO1xubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIyODpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgbmFtZSk6XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjI5LVx0XHRpZiAoYnBmX29ial9uYW1lX2NweSh0Y3BfY2EtXHUwMDNlbmFtZSwgdXRjcF9jYS1cdTAwM2VuYW1lLFxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0zMTE9c3RhdGljIHZvaWQgX19icGZfdGNwX2NhX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMTQtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzE1OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIF9fYnBmX29wc190Y3BfY29uZ2VzdGlvbl9vcHMgPSB7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzE2LVx0LnNzdGhyZXNoID0gYnBmX3RjcF9jYV9zc3RocmVzaCxcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0yMDk9aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxMy17XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMTQ6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHM7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0yMTUtXHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmhhbmRsZXI7XG4tLVxubmV0L2lwdjQvdGNwLmM9NDQ4Mj1pbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDU1Ni1cdGNhc2UgVENQX0NDX0lORk86IHtcbm5ldC9pcHY0L3RjcC5jOjQ1NTc6XHRcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcztcbm5ldC9pcHY0L3RjcC5jLTQ1NTgtXHRcdHVuaW9uIHRjcF9jY19pbmZvIGluZm87XG4tLVxubmV0L2lwdjQvdGNwLmM9NTE3MD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xubmV0L2lwdjQvdGNwLmMtNTE3MS1cbm5ldC9pcHY0L3RjcC5jOjUxNzI6ZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm87XG5uZXQvaXB2NC90Y3AuYy01MTczLVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTMwPV9fYnBmX2tmdW5jIHN0YXRpYyB2b2lkIGJicl9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpXG4tLVxubmV0L2lwdjQvdGNwX2Jici5jLTExNDMtXG5uZXQvaXB2NC90Y3BfYmJyLmM6MTE0NDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfYmJyLmMtMTE0NS1cdC5mbGFnc1x0XHQ9IFRDUF9DT05HX05PTl9SRVNUUklDVEVELFxuLS1cbm5ldC9pcHY0L3RjcF9iaWMuYz0xOTA9c3RhdGljIHZvaWQgYmljdGNwX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSlcbi0tXG5uZXQvaXB2NC90Y3BfYmljLmMtMjAxLVxubmV0L2lwdjQvdGNwX2JpYy5jOjIwMjpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBiaWN0Y3AgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9iaWMuYy0yMDMtXHQuaW5pdFx0XHQ9IGJpY3RjcF9pbml0LFxuLS1cbm5ldC9pcHY0L3RjcF9jZGcuYz0zODc9c3RhdGljIHZvaWQgdGNwX2NkZ19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfY2RnLmMtMzk0LVxubmV0L2lwdjQvdGNwX2NkZy5jOjM5NTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfY2RnIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfY2RnLmMtMzk2LVx0LmNvbmdfYXZvaWQgPSB0Y3BfY2RnX2NvbmdfYXZvaWQsXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0yMz1zdGF0aWMgTElTVF9IRUFEKHRjcF9jb25nX2xpc3QpO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMjUtLyogU2ltcGxlIGxpbmVhciBzZWFyY2gsIGRvbiYjMzk7dCBleHBlY3QgbWFueSBlbnRyaWVzISAqL1xubmV0L2lwdjQvdGNwX2NvbmcuYzoyNjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2FfZmluZChjb25zdCBjaGFyICpuYW1lKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNy17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjI4Olx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqZTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjktXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0zOD12b2lkIHRjcF9zZXRfY2Ffc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1OCBjYV9zdGF0ZSlcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jLTQ5LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1IGxvY2sgaGVsZCAqL1xubmV0L2lwdjQvdGNwX2NvbmcuYzo1MDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmRfYXV0b2xvYWQoY29uc3QgY2hhciAqbmFtZSlcbm5ldC9pcHY0L3RjcF9jb25nLmMtNTEte1xubmV0L2lwdjQvdGNwX2NvbmcuYzo1MjpcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhID0gdGNwX2NhX2ZpbmQobmFtZSk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTUzLVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtNjUtLyogU2ltcGxlIGxpbmVhciBzZWFyY2gsIG5vdCBtdWNoIGluIGhlcmUuICovXG5uZXQvaXB2NC90Y3BfY29uZy5jOjY2OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnRjcF9jYV9maW5kX2tleSh1MzIga2V5KVxubmV0L2lwdjQvdGNwX2NvbmcuYy02Ny17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjY4Olx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqZTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtNjktXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYy03Ny1cbm5ldC9pcHY0L3RjcF9jb25nLmM6Nzg6aW50IHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTc5LXtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jLTkyLSAqL1xubmV0L2lwdjQvdGNwX2NvbmcuYzo5MzppbnQgdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSlcbm5ldC9pcHY0L3RjcF9jb25nLmMtOTQte1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MTE2PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2wpO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMTIzLSAqL1xubmV0L2lwdjQvdGNwX2NvbmcuYzoxMjQ6dm9pZCB0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTEyNS17XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0xMzk9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKTtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jLTE0NS0gKi9cbm5ldC9pcHY0L3RjcF9jb25nLmM6MTQ2OmludCB0Y3BfdXBkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSwgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqb2xkX2NhKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0xNDcte1xubmV0L2lwdjQvdGNwX2NvbmcuYzoxNDg6XHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpleGlzdGluZztcbm5ldC9pcHY0L3RjcF9jb25nLmMtMTQ5LVx0aW50IHJldCA9IDA7XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0xODE9dTMyIHRjcF9jYV9nZXRfa2V5X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCAqZWNuX2NhKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0xODIte1xubmV0L2lwdjQvdGNwX2NvbmcuYzoxODM6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtMTg0LVx0dTMyIGtleSA9IFRDUF9DQV9VTlNQRUM7XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0xOTk9Y2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTIwMC17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjIwMTpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0yMDItXHRjaGFyICpyZXQgPSBOVUxMO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjE2PXZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE5LVx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2NvbmcuYzoyMjA6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjIxLVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjUwPXN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjUxOlx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNTIte1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjgxPWludCB0Y3Bfc2V0X2RlZmF1bHRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjgyLXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjgzOlx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XG5uZXQvaXB2NC90Y3BfY29uZy5jOjI4NDpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnByZXY7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTI4NS1cdGludCByZXQ7XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0zMTk9dm9pZCB0Y3BfZ2V0X2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYnVmLCBzaXplX3QgbWF4bGVuKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0zMjAte1xubmV0L2lwdjQvdGNwX2NvbmcuYzozMjE6XHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzIyLVx0c2l6ZV90IG9mZnMgPSAwO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MzM3PXZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTMzOC17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjMzOTpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0zNDAtXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0zNDg9dm9pZCB0Y3BfZ2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IG1heGxlbilcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzQ5LXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6MzUwOlx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTM1MS1cdHNpemVfdCBvZmZzID0gMDtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jPTM2OT1pbnQgdGNwX3NldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICp2YWwpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTM3MC17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjM3MTpcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0zNzItXHRjaGFyICpzYXZlZF9jbG9uZSwgKmNsb25lLCAqbmFtZTtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jPTQxMj1pbnQgdGNwX3NldF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGxvYWQsXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYy00MTUtXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jOjQxNjpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX2NvbmcuYy00MTctXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jPTUyOT1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmVub191bmRvX2N3bmQpO1xubmV0L2lwdjQvdGNwX2NvbmcuYy01MzAtXG5uZXQvaXB2NC90Y3BfY29uZy5jOjUzMTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9yZW5vID0ge1xubmV0L2lwdjQvdGNwX2NvbmcuYy01MzItXHQuZmxhZ3NcdFx0PSBUQ1BfQ09OR19OT05fUkVTVFJJQ1RFRCxcbi0tXG5uZXQvaXB2NC90Y3BfY3ViaWMuYz00NDk9X19icGZfa2Z1bmMgc3RhdGljIHZvaWQgY3ViaWN0Y3BfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTQ3NC1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jOjQ3NTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBjdWJpY3RjcCBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvdGNwX2N1YmljLmMtNDc2LVx0LmluaXRcdFx0PSBjdWJpY3RjcF9pbml0LFxuLS1cbm5ldC9pcHY0L3RjcF9kY3RjcC5jPTc3PU1PRFVMRV9QQVJNX0RFU0MoZGN0Y3BfYWxwaGFfb25faW5pdCwgXCYjMzQ7cGFyYW1ldGVyIGZvciBpbml0aWFsIGFscGhhIHZhbHVlXCYjMzQ7KTtcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTc4LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6Nzk6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGN0Y3BfcmVubztcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTgwLVxuLS1cbm5ldC9pcHY0L3RjcF9kY3RjcC5jPTI0Nz1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGRjdGNwX2N3bmRfdW5kbyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMjU0LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MjU1OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yNTYtXHQuaW5pdFx0XHQ9IGRjdGNwX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMjY5LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MjcwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwX3Jlbm8gX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTI3MS1cdC5zc3RocmVzaFx0PSB0Y3BfcmVub19zc3RocmVzaCxcbi0tXG5uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmM9MTUxPXN0YXRpYyB1MzIgaHN0Y3Bfc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYy0xNTktXG5uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmM6MTYwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9oaWdoc3BlZWQgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYy0xNjEtXHQuaW5pdFx0XHQ9IGhzdGNwX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX2h0Y3AuYz0yNjg9c3RhdGljIHZvaWQgaHRjcF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSlcbi0tXG5uZXQvaXB2NC90Y3BfaHRjcC5jLTI4OC1cbm5ldC9pcHY0L3RjcF9odGNwLmM6Mjg5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGh0Y3AgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9odGNwLmMtMjkwLVx0LmluaXRcdFx0PSBodGNwX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX2h5YmxhLmM9OTA9c3RhdGljIHZvaWQgaHlibGFfY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZClcbi0tXG5uZXQvaXB2NC90Y3BfaHlibGEuYy0xNjYtXG5uZXQvaXB2NC90Y3BfaHlibGEuYzoxNjc6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2h5YmxhIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfaHlibGEuYy0xNjgtXHQuaW5pdFx0XHQ9IGh5YmxhX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX2lsbGlub2lzLmM9MzA3PXN0YXRpYyBzaXplX3QgdGNwX2lsbGlub2lzX2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXG4tLVxubmV0L2lwdjQvdGNwX2lsbGlub2lzLmMtMzI5LVxubmV0L2lwdjQvdGNwX2lsbGlub2lzLmM6MzMwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9pbGxpbm9pcyBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvdGNwX2lsbGlub2lzLmMtMzMxLVx0LmluaXRcdFx0PSB0Y3BfaWxsaW5vaXNfaW5pdCxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MDU9c3RhdGljIHZvaWQgdGNwX3NuZGJ1Zl9leHBhbmQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYwNy1cdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjA4Olx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzID0gaW5ldF9jc2soc2spLVx1MDAzZWljc2tfY2Ffb3BzO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNjA5LVx0aW50IHNuZG1lbSwgcGVyX21zcztcbi0tXG5uZXQvaXB2NC90Y3BfbHAuYz0yNzQ9c3RhdGljIHZvaWQgdGNwX2xwX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxuLS1cbm5ldC9pcHY0L3RjcF9scC5jLTMyOS1cbm5ldC9pcHY0L3RjcF9scC5jOjMzMDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfbHAgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9scC5jLTMzMS1cdC5pbml0ID0gdGNwX2xwX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQ5Nz12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01MDMtXHRpZiAoY2Ffa2V5ICE9IFRDUF9DQV9VTlNQRUMpIHtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo1MDQ6XHRcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTUwNS1cbi0tXG5uZXQvaXB2NC90Y3BfbnYuYz00NTM9c3RhdGljIHNpemVfdCB0Y3Budl9nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBleHQsIGludCAqYXR0cixcbi0tXG5uZXQvaXB2NC90Y3BfbnYuYy00NjktXG5uZXQvaXB2NC90Y3BfbnYuYzo0NzA6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwbnYgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9udi5jLTQ3MS1cdC5pbml0XHRcdD0gdGNwbnZfaW5pdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjE1Nj1zdGF0aWMgdm9pZCB0Y3BfY3duZF92YWxpZGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaXNfY3duZF9saW1pdGVkKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIxNTcte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIxNTg6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHM7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjE1OS1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjc2PXN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI3Ny17XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI3ODpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2NhX29wcztcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjc5LVx0dTMyIG1pbl90c28sIHRzb19zZWdzO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MDgxPXN0YXRpYyB2b2lkIHRjcF9jYV9kc3RfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDA4My1cdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MDg0Olx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDA4NS1cdHUzMiBjYV9rZXkgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9DQ19BTEdPKTtcbi0tXG5uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYz0zND1zdGF0aWMgdTMyIHRjcF9zY2FsYWJsZV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMtNDAtXG5uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYzo0MTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3Bfc2NhbGFibGUgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jLTQyLVx0LnNzdGhyZXNoXHQ9IHRjcF9zY2FsYWJsZV9zc3RocmVzaCxcbi0tXG5uZXQvaXB2NC90Y3BfdmVnYXMuYz0zMTM9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3ZlZ2FzX2dldF9pbmZvKTtcbm5ldC9pcHY0L3RjcF92ZWdhcy5jLTMxNC1cbm5ldC9pcHY0L3RjcF92ZWdhcy5jOjMxNTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfdmVnYXMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF92ZWdhcy5jLTMxNi1cdC5pbml0XHRcdD0gdGNwX3ZlZ2FzX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX3Zlbm8uYz0yMDA9c3RhdGljIHUzMiB0Y3BfdmVub19zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3Zlbm8uYy0yMTItXG5uZXQvaXB2NC90Y3BfdmVuby5jOjIxMzpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfdmVubyBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvdGNwX3Zlbm8uYy0yMTQtXHQuaW5pdFx0XHQ9IHRjcF92ZW5vX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmM9MjYyPXN0YXRpYyBzaXplX3QgdGNwX3dlc3R3b29kX2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXG4tLVxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmMtMjc4LVxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmM6Mjc5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF93ZXN0d29vZCBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvdGNwX3dlc3R3b29kLmMtMjgwLVx0LmluaXRcdFx0PSB0Y3Bfd2VzdHdvb2RfaW5pdCxcbi0tXG5uZXQvaXB2NC90Y3BfeWVhaC5jPTE4OD1zdGF0aWMgdTMyIHRjcF95ZWFoX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfeWVhaC5jLTIwOC1cbm5ldC9pcHY0L3RjcF95ZWFoLmM6MjA5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF95ZWFoIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfeWVhaC5jLTIxMC1cdC5pbml0XHRcdD0gdGNwX3llYWhfaW5pdCxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTUyND1zdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTI2LVx0X191MzIgKmtlcm5fZnVuY19vZmY7XG50b29scy9saWIvYnBmL2xpYmJwZi5jOjUyNzpcdC8qIGUuZy4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBpbiBicGZfcHJvZyYjMzk7cyBidGYgZm9ybWF0ICovXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUyOC1cdHZvaWQgKmRhdGE7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy01MzItXHQgKlx0Wy4uLiBzb21lIG90aGVyIGtlcm5lbCBmaWVsZHMgLi4uXVxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1MzM6XHQgKlx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBkYXRhO1xudG9vbHMvbGliL2JwZi9saWJicGYuYy01MzQtXHQgKiB9XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xMDQ2PWZpbmRfc3RydWN0X29wc19rZXJuX3R5cGVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnRuYW1lX3Jhdyxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwODItXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjEwODM6XHQvKiBGaW5kIFwmIzM0O3N0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNcJiMzNDsgZnJvbVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDg0LVx0ICogc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3RjcF9jb25nZXN0aW9uX29wcyB7XG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwODUtXHQgKlx0WyAuLi4gXVxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxMDg2Olx0ICpcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGF0YTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA4Ny1cdCAqIH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2NjX2N1YmljLmMtNS0gKiAgICBpcyB0aGF0IHRoaXMgYnBmIHByb2dyYW0gcmVsaWVzIG9uIGBjb25nX2NvbnRyb2xgIHJhdGhlciB0aGFuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2NjX2N1YmljLmM6NjogKiAgICBgY29uZ19hdm9pZGAgaW4gdGhlIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2NjX2N1YmljLmMtNy0gKiAyLiBMb2dpYyBzdWNoIGFzIHRjcF9jd25kX3JlZHVjdGlvbiwgdGNwX2NvbmdfYXZvaWQsIGFuZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY2NfY3ViaWMuYz0xNjg9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9jY19jdWJpYy5jOjE2OTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNjX2N1YmljID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9jY19jdWJpYy5jLTE3MC1cdC5pbml0XHRcdD0gKHZvaWQgKilicGZfY3ViaWNfaW5pdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2N1YmljLmM9NTQ0PVNFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY3ViaWMuYzo1NDU6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBjdWJpYyA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY3ViaWMuYy01NDYtXHQuaW5pdFx0XHQ9ICh2b2lkICopYnBmX2N1YmljX2luaXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jPTIzOT1TRUMoXCYjMzQ7LnN0cnVjdF9vcHNcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwLmM6MjQwOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGN0Y3Bfbm91c2UgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwLmMtMjQxLVx0LmluaXRcdFx0PSAodm9pZCAqKWJwZl9kY3RjcF9pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZGN0Y3AuYz0yNDc9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jOjI0ODpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jLTI0OS1cdC5pbml0XHRcdD0gKHZvaWQgKilicGZfZGN0Y3BfaW5pdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYz0xOD1TRUMoXCYjMzQ7LnN0cnVjdF9vcHNcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYzoxOTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwX3JlbCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZGN0Y3BfcmVsZWFzZS5jLTIwLVx0LnJlbGVhc2VcdD0gKHZvaWQgKilkY3RjcF9ub3VzZV9yZWxlYXNlLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfdGNwX25vZ3BsLmM9MTM9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl90Y3Bfbm9ncGwuYzoxNDpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGJwZl9ub2dwbHRjcCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfdGNwX25vZ3BsLmMtMTUtXHQuaW5pdCAgICAgICAgICAgPSAodm9pZCAqKW5vZ3BsdGNwX2luaXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmM9MjE9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmM6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBpbmNvbXBsX2Nvbmdfb3BzID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmMtMjMtXHQvKiBJbnRlbnRpb25hbGx5IGxlYXZpbmcgb3V0IGFueSBvZiB0aGUgcmVxdWlyZWQgY29uZ19hdm9pZCgpIGFuZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYz0xMTI9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jOjExMzpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9jYV9rZnVuYyA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYy0xMTQtXHQuaW5pdFx0XHQ9ICh2b2lkICopaW5pdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3Vuc3VwcF9jb25nX29wLmM9MTc9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91bnN1cHBfY29uZ19vcC5jOjE4OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdW5zdXBwX2Nvbmdfb3AgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3Vuc3VwcF9jb25nX29wLmMtMTktXHQuZ2V0X2luZm8gPSAodm9pZCAqKXVuc3VwcF9jb25nX29wX2dldF9pbmZvLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW50cnVzdGVkX2J0Zl93cml0ZS5jPTIyPVNFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW50cnVzdGVkX2J0Zl93cml0ZS5jOjIzOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdW50cnVzdGVkX2J0Zl93cml0ZSA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW50cnVzdGVkX2J0Zl93cml0ZS5jLTI0LVx0LmluaXQgPSAodm9pZCAqKXVudHJ1c3RlZF9idGZfd3JpdGVfaW5pdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jPTQyPVNFQyhcJiMzNDsuc3RydWN0X29wcy5saW5rXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo0MzpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX3VwZGF0ZV8xID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYy00NC1cdC5pbml0ID0gKHZvaWQgKiljYV91cGRhdGVfMV9pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmM9NTE9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmtcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jOjUyOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgY2FfdXBkYXRlXzIgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jLTUzLVx0LmluaXQgPSAodm9pZCAqKWNhX3VwZGF0ZV8yX2luaXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYz02MD1TRUMoXCYjMzQ7LnN0cnVjdF9vcHMubGlua1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmM6NjE6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBjYV93cm9uZyA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmMtNjItXHQuY29uZ19jb250cm9sID0gKHZvaWQgKiljYV91cGRhdGVfY29uZ19jb250cm9sLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmM9Njg9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo2OTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX25vX2xpbmsgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jLTcwLVx0LmNvbmdfY29udHJvbCA9ICh2b2lkICopY2FfdXBkYXRlX2NvbmdfY29udHJvbCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3dyaXRlX3NrX3BhY2luZy5jPTU2PVNFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffd3JpdGVfc2tfcGFjaW5nLmM6NTc6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB3cml0ZV9za19wYWNpbmcgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3dyaXRlX3NrX3BhY2luZy5jLTU4LVx0LmluaXQgPSAodm9pZCAqKXdyaXRlX3NrX3BhY2luZ19pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9ub25fc2N4X2tmdW5jX2RlbnkuYnBmLmM9MzE9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L25vbl9zY3hfa2Z1bmNfZGVueS5icGYuYzozMjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9ub25fc2N4X2NhID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L25vbl9zY3hfa2Z1bmNfZGVueS5icGYuYy0zMy1cdC5zc3RocmVzaCAgID0gKHZvaWQgKil0Y3BfY2Ffc3N0aHJlc2gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzI5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gQlBGLVJlZ2lzdGVyZWQgVENQIENvbmdlc3Rpb24gQ29udHJvbCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgaW4gYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AgYW5kIHNvbWV0aGluZyYjMzk7cyBjYXRjaGluZyBteSBhdHRlbnRpb24uIEJQRiBjYW4gcmVnaXN0ZXIgYHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGNvb2wsIGJ1dCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIG5hbWUgaXMgaGFuZGxlZC4gVGhlIGNvZGUgdXNlcyBgYnBmX29ial9uYW1lX2NweWAgdG8gY29weSB0aGUgbmFtZSwgd2hpY2ggc2VlbXMgZmluZSDigJMgaXQgbnVsbC10ZXJtaW5hdGVzLCBzbyB0aGF0IHBhcnQmIzM5O3MgY292ZXJlZC4gVGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBhbGxvY2F0ZXMgdGhlIHJlc3Qgb2YgYHRjcF9jYWAsIGFuZCBnZW5lcmFsbHksIHRoYXQgbWVhbnMgemVyb2VkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZCBmb3IgYXZvaWRpbmcgZ2FyYmFnZSBkYXRhLgoKQnV0IHRoZW4gSSBzZWUgdGhpcyBzbmlwcGV0OgoKYGBgYwoJCWNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307Ci4uLgoJCXJjdV9yZWFkX2xvY2soKTsKCQljYV9vcHMgPSBSRUFEX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMpOwoJCW1lbWNweShjYV9uYW1lLCBjYV9vcHMtJmd0O25hbWUsIHNpemVvZihjYV9uYW1lKSk7CgkJcmN1X3JlYWRfdW5sb2NrKCk7CgoJCWlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBjYV9uYW1lLCBsZW4pKQpgYGAKCkFuZCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIGBtZW1jcHlgIGNvcGllcyAqZXhhY3RseSogYFRDUF9DQV9OQU1FX01BWGAgYnl0ZXMgZnJvbSBgY2Ffb3BzLSZndDtuYW1lYCBpbnRvIGBjYV9uYW1lYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB3aGlsZSBgYnBmX29ial9uYW1lX2NweWAgZW5zdXJlcyB0aGF0IHRoZSBuYW1lIGlzIG51bGwtdGVybWluYXRlZCwgaXQgKmRvZXNuJiMzOTt0KiB6ZXJvIG91dCBhbnkgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIGBuYW1lYCBmaWVsZCBvZiB0aGUgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0dXJlLiBJbiBvdGhlciB3b3JkcywgaWYgdGhlIG5hbWUgaXNuJiMzOTt0IGEgZnVsbCBgVENQX0NBX05BTUVfTUFYYCBjaGFyYWN0ZXJzIGxvbmcsIHRoZW4gdGhlcmUmIzM5O3MgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFmdGVyKiB0aGUgbnVsbCB0ZXJtaW5hdG9yLgoKU28sIGlmIGBjYV9vcHMtJmd0O25hbWVgICpkb2VzKiBoYXZlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKmFmdGVyKiB0aGUgbnVsbCB0ZXJtaW5hdG9yLCB0aG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzIGFyZSBjb3BpZWQgdG8gYGNhX25hbWVgLiBUaGVuLCB0aG9zZSBieXRlcyBpbiBgY2FfbmFtZWAgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIGBjb3B5X3RvX3NvY2twdHJgLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWssIGlzbiYjMzk7dCBpdD8gVGhhdCBjYW4mIzM5O3QgYmUgZ29vZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyAqYWN0dWFsbHkqIGEgcHJvYmxlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGNhX29wcy0mZ3Q7bmFtZWAgY2FuIGFjdHVhbGx5ICpoYXZlKiB1bmluaXRpYWxpemVkIGJ5dGVzLiBTcGVjaWZpY2FsbHksIGBjYV9vcHMtJmd0O25hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBgY2hhciBuYW1lW1RDUF9DQV9OQU1FX01BWF1gIGluc2lkZSBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AuCgpGb3IgYnVpbHQtaW4gY29uZ2VzdGlvbiBjb250cm9scywgc3RhdGljYWxseSBhbGxvY2F0ZWQsIHRob3NlIHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gQnV0IHdoYXQgYWJvdXQgQlBGIGNvbmdlc3Rpb24gY29udHJvbHM/IEkgbmVlZCB0byBnbyBsb29rIGFuZCBzZWUgaG93IEJQRiBhbGxvY2F0ZXMgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzE0PXN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI1LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcyNjpzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyNy1cdFx0XHRcdFx0ICAgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTE5ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwMC1cdC5tYXBfZGVsZXRlX2VsZW0gPSBicGZfc3RydWN0X29wc19tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwMTpcdC5tYXBfdXBkYXRlX2VsZW0gPSBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0sXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwMi1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbWAuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgc3BlY2lmaWNhbGx5IGlzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgYW5kIHdoYXQgcG90ZW50aWFsIGlzc3VlcyBtaWdodCBsdXJrIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHN1YnRsZSBnb3RjaGFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBjb25jdXJyZW5jeSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gZGF0YSByYWNlcyBvciBtZW1vcnkgY29ycnVwdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdXBkYXRpbmcgZWxlbWVudHMgd2l0aGluIGEgQlBGIG1hcC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSByZWFkL3dyaXRlIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBicm9hZGVyIEJQRiBmcmFtZXdvcmsuIElzIGl0IGhhbmRsaW5nIGVycm9ycyBncmFjZWZ1bGx5PyBBcmUgdGhlcmUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBsaWtlIGludGVnZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgdGhhdCBuZWVkIHRvIGJlIGNhcmVmdWxseSBjb25zaWRlcmVkPyBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGRvaW5nIGEgbG90IG9mIHBvaW50ZXIganVnZ2xpbmcgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjY6XHRzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIDcyNzpcdFx0XHRcdFx0XHQgICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxuIDcyODpcdHtcbiA3Mjk6XHRcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICopbWFwO1xuIDczMDpcdFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjID0gc3RfbWFwLVx1MDAzZXN0X29wc19kZXNjO1xuIDczMTpcdFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHMgPSBzdF9vcHNfZGVzYy1cdTAwM2VzdF9vcHM7XG4gNzMyOlx0XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKnV2YWx1ZSwgKmt2YWx1ZTtcbiA3MzM6XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbW9kdWxlX3R5cGU7XG4gNzM0Olx0XHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuIDczNTpcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0ID0gc3Rfb3BzX2Rlc2MtXHUwMDNldHlwZTtcbiA3MzY6XHRcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcztcbiA3Mzc6XHRcdHZvaWQgKnVkYXRhLCAqa2RhdGE7XG4gNzM4Olx0XHRpbnQgcHJvZ19mZCwgZXJyO1xuIDczOTpcdFx0dTMyIGksIHRyYW1wb2xpbmVfc3RhcnQsIGltYWdlX29mZiA9IDA7XG4gNzQwOlx0XHR2b2lkICpjdXJfaW1hZ2UgPSBOVUxMLCAqaW1hZ2UgPSBOVUxMO1xuIDc0MTpcdFx0c3RydWN0IGJwZl9saW5rICoqcGxpbms7XG4gNzQyOlx0XHRzdHJ1Y3QgYnBmX2tzeW0gKipwa3N5bTtcbiA3NDM6XHRcdGNvbnN0IGNoYXIgKnRuYW1lLCAqbW5hbWU7XG4gNzQ0Olx0XG4gNzQ1Olx0XHRpZiAoZmxhZ3MpXG4gNzQ2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0NzpcdFxuIDc0ODpcdFx0aWYgKCoodTMyICopa2V5ICE9IDApXG4gNzQ5Olx0XHRcdHJldHVybiAtRTJCSUc7XG4gNzUwOlx0XG4gNzUxOlx0XHRlcnIgPSBjaGVja196ZXJvX2hvbGVzKHN0X21hcC1cdTAwM2VidGYsIHN0X29wc19kZXNjLVx1MDAzZXZhbHVlX3R5cGUsIHZhbHVlKTtcbiA3NTI6XHRcdGlmIChlcnIpXG4gNzUzOlx0XHRcdHJldHVybiBlcnI7XG4gNzU0Olx0XG4gNzU1Olx0XHR1dmFsdWUgPSB2YWx1ZTtcbiA3NTY6XHRcdGVyciA9IGNoZWNrX3plcm9faG9sZXMoc3RfbWFwLVx1MDAzZWJ0ZiwgdCwgdXZhbHVlLVx1MDAzZWRhdGEpO1xuIDc1NzpcdFx0aWYgKGVycilcbiA3NTg6XHRcdFx0cmV0dXJuIGVycjtcbiA3NTk6XHRcbiA3NjA6XHRcdGlmICh1dmFsdWUtXHUwMDNlY29tbW9uLnN0YXRlIHx8IHJlZmNvdW50X3JlYWQoXHUwMDI2dXZhbHVlLVx1MDAzZWNvbW1vbi5yZWZjbnQpKVxuIDc2MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NjI6XHRcbiA3NjM6XHRcdHRub2RlcyA9IGt6YWxsb2Nfb2JqcygqdG5vZGVzLCBCUEZfVFJBTVBfTUFYKTtcbiA3NjQ6XHRcdGlmICghdG5vZGVzKVxuIDc2NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3NjY6XHRcbiA3Njc6XHRcdHV2YWx1ZSA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKilzdF9tYXAtXHUwMDNldXZhbHVlO1xuIDc2ODpcdFx0a3ZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKVx1MDAyNnN0X21hcC1cdTAwM2VrdmFsdWU7XG4gNzY5Olx0XG4gNzcwOlx0XHRtdXRleF9sb2NrKFx1MDAyNnN0X21hcC1cdTAwM2Vsb2NrKTtcbiA3NzE6XHRcbiA3NzI6XHRcdGlmIChrdmFsdWUtXHUwMDNlY29tbW9uLnN0YXRlICE9IEJQRl9TVFJVQ1RfT1BTX1NUQVRFX0lOSVQpIHtcbiA3NzM6XHRcdFx0ZXJyID0gLUVCVVNZO1xuIDc3NDpcdFx0XHRnb3RvIHVubG9jaztcbiA3NzU6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZGV0YWlscyBvbiBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiB1cGRhdGluZyBlbGVtZW50cyB3aXRoaW4gc3RydWN0LWJhc2VkIEJQRiBtYXBzLiBJJiMzOTttIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3aGVuIG11bHRpcGxlIEJQRiBwcm9ncmFtcyBhcmUgdHJ5aW5nIHRvIG1vZGlmeSB0aGUgc2FtZSBzdHJ1Y3R1cmUgc2ltdWx0YW5lb3VzbHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQsIGlmIGFueSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgQlBGIGV4ZWN1dGlvbiBtb2RlbC4gSSYjMzk7bGwgYWxzbyBiZSBleGFtaW5pbmcgaG93IGVycm9yIGhhbmRsaW5nIGlzIG1hbmFnZWQg4oCTIHBhcnRpY3VsYXJseSBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIGludmFsaWQga2V5L3ZhbHVlIGNvbWJpbmF0aW9ucy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbnMgYnVpbHQgaW50byB0aGUgdXBkYXRlIHByb2Nlc3M/IEFyZSB0aGVyZSBhbnkgbm90YWJsZSBkaWZmZXJlbmNlcyBpbiBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGNvbXBhcmVkIHRvIGBicGZfbWFwX3VwZGF0ZV9lbGVtYCBmb3Igb3RoZXIgbWFwIHR5cGVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHksIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gZGF0YSBjb25zaXN0ZW5jeSB3aXRoaW4gYSBCUEYtZHJpdmVuIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3NjpcdFxuIDc3NzpcdFx0bWVtY3B5KHV2YWx1ZSwgdmFsdWUsIG1hcC1cdTAwM2V2YWx1ZV9zaXplKTtcbiA3Nzg6XHRcbiA3Nzk6XHRcdHVkYXRhID0gXHUwMDI2dXZhbHVlLVx1MDAzZWRhdGE7XG4gNzgwOlx0XHRrZGF0YSA9IFx1MDAyNmt2YWx1ZS1cdTAwM2VkYXRhO1xuIDc4MTpcdFxuIDc4MjpcdFx0cGxpbmsgPSBzdF9tYXAtXHUwMDNlbGlua3M7XG4gNzgzOlx0XHRwa3N5bSA9IHN0X21hcC1cdTAwM2Vrc3ltcztcbiA3ODQ6XHRcdHRuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KHN0X21hcC1cdTAwM2VidGYsIHQtXHUwMDNlbmFtZV9vZmYpO1xuIDc4NTpcdFx0bW9kdWxlX3R5cGUgPSBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgc3Rfb3BzX2lkc1tJRFhfTU9EVUxFX0lEXSk7XG4gNzg2Olx0XHRmb3JfZWFjaF9tZW1iZXIoaSwgdCwgbWVtYmVyKSB7XG4gNzg3Olx0XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbXR5cGUsICpwdHlwZTtcbiA3ODg6XHRcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIDc4OTpcdFx0XHRzdHJ1Y3QgYnBmX3RyYW1wX2xpbmsgKmxpbms7XG4gNzkwOlx0XHRcdHN0cnVjdCBicGZfa3N5bSAqa3N5bTtcbiA3OTE6XHRcdFx0dTMyIG1vZmY7XG4gNzkyOlx0XG4gNzkzOlx0XHRcdG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcbiA3OTQ6XHRcdFx0bW5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc3RfbWFwLVx1MDAzZWJ0ZiwgbWVtYmVyLVx1MDAzZW5hbWVfb2ZmKTtcbiA3OTU6XHRcdFx0cHR5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihzdF9tYXAtXHUwMDNlYnRmLCBtZW1iZXItXHUwMDNldHlwZSwgTlVMTCk7XG4gNzk2Olx0XHRcdGlmIChwdHlwZSA9PSBtb2R1bGVfdHlwZSkge1xuIDc5NzpcdFx0XHRcdGlmICgqKHZvaWQgKiopKHVkYXRhICYjNDM7IG1vZmYpKVxuIDc5ODpcdFx0XHRcdFx0Z290byByZXNldF91bmxvY2s7XG4gNzk5Olx0XHRcdFx0Kih2b2lkICoqKShrZGF0YSAmIzQzOyBtb2ZmKSA9IEJQRl9NT0RVTEVfT1dORVI7XG4gODAwOlx0XHRcdFx0Y29udGludWU7XG4gODAxOlx0XHRcdH1cbiA4MDI6XHRcbiA4MDM6XHRcdFx0ZXJyID0gc3Rfb3BzLVx1MDAzZWluaXRfbWVtYmVyKHQsIG1lbWJlciwga2RhdGEsIHVkYXRhKTtcbiA4MDQ6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA4MDU6XHRcdFx0XHRnb3RvIHJlc2V0X3VubG9jaztcbiA4MDY6XHRcbiA4MDc6XHRcdFx0LyogVGhlIC1cdTAwM2Vpbml0X21lbWJlcigpIGhhcyBoYW5kbGVkIHRoaXMgbWVtYmVyICovXG4gODA4Olx0XHRcdGlmIChlcnIgXHUwMDNlIDApXG4gODA5Olx0XHRcdFx0Y29udGludWU7XG4gODEwOlx0XG4gODExOlx0XHRcdC8qIElmIHN0X29wcy1cdTAwM2Vpbml0X21lbWJlciBkb2VzIG5vdCBoYW5kbGUgaXQsXG4gODEyOlx0XHRcdCAqIHdlIHdpbGwgb25seSBoYW5kbGUgZnVuYyBwdHJzIGFuZCB6ZXJvLWVkIG1lbWJlcnNcbiA4MTM6XHRcdFx0ICogaGVyZS4gIFJlamVjdCBldmVyeXRoaW5nIGVsc2UuXG4gODE0Olx0XHRcdCAqL1xuIDgxNTpcdFxuIDgxNjpcdFx0XHQvKiBBbGwgbm9uIGZ1bmMgcHRyIG1lbWJlciBtdXN0IGJlIDAgKi9cbiA4MTc6XHRcdFx0aWYgKCFwdHlwZSB8fCAhYnRmX3R5cGVfaXNfZnVuY19wcm90byhwdHlwZSkpIHtcbiA4MTg6XHRcdFx0XHR1MzIgbXNpemU7XG4gODE5Olx0XG4gODIwOlx0XHRcdFx0bXR5cGUgPSBidGZfdHlwZV9ieV9pZChzdF9tYXAtXHUwMDNlYnRmLCBtZW1iZXItXHUwMDNldHlwZSk7XG4gODIxOlx0XHRcdFx0bXR5cGUgPSBidGZfcmVzb2x2ZV9zaXplKHN0X21hcC1cdTAwM2VidGYsIG10eXBlLCBcdTAwMjZtc2l6ZSk7XG4gODIyOlx0XHRcdFx0aWYgKElTX0VSUihtdHlwZSkpIHtcbiA4MjM6XHRcdFx0XHRcdGVyciA9IFBUUl9FUlIobXR5cGUpO1xuIDgyNDpcdFx0XHRcdFx0Z290byByZXNldF91bmxvY2s7XG4gODI1Olx0XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyMwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIERhdGEgRmxvdyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRhdGEgZmxvdyBiZXR0ZXIuIEl0IGxvb2tzIGxpa2UgYGtkYXRhYCBpcyBnZXR0aW5nIGl0cyBpbml0aWFsIHZhbHVlIGRpcmVjdGx5IGZyb20gYGt2YWx1ZS0mZ3Q7ZGF0YWAuIEFuZCBga3ZhbHVlYCwgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBpcyBhIGNvbXBvbmVudCBvZiB0aGlzIGBzdF9tYXBgIHN0cnVjdHVyZS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBxdWVzdGlvbnMgYWJvdXQgb3duZXJzaGlwIGFuZCBsaWZlY3ljbGUuIEkgbmVlZCB0byBiYWNrIHVwIGEgbGV2ZWwgaGVyZS4gTGV0IG1lIHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIGBzdF9tYXBgLiBXaGVyZSBpcyB0aGlzIHRoaW5nIGJlaW5nIGNyZWF0ZWQgYW5kIGhvdyBpcyBpdCBiZWluZyBwb3B1bGF0ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHRvIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IHBvc3NpYmxlIGlzc3VlcyB3aXRoIG1lbW9yeSwgZGF0YSBjb25zaXN0ZW5jeSwgb3IgZXZlbiBjb25jdXJyZW5jeS4gUmlnaHQgbm93LCB0aGlzIGNvbm5lY3Rpb24gaXMgYSBsaXR0bGUgdG9vIG9wYXF1ZSBmb3IgbXkgbGlraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RydWN0X29wc19tYXBfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwMjc9c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA2MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDYyOnN0YXRpYyBpbnQgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjMte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMDcxPXN0YXRpYyB1MzIgY291bnRfZnVuY19wdHJzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDgzLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwODQ6c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4NS17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTExOTQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGJwZl9zdHJ1Y3Rfb3BzX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NTpcdC5tYXBfYWxsb2NfY2hlY2sgPSBicGZfc3RydWN0X29wc19tYXBfYWxsb2NfY2hlY2ssXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NjpcdC5tYXBfYWxsb2MgPSBicGZfc3RydWN0X29wc19tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE5Ny1cdC5tYXBfZnJlZSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA3MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgQlBGIGVjb3N5c3RlbSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIGN1c3RvbSBtYXAgdHlwZXMgYW5kIHN0cnVjdHVyZSBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgd2hldGhlciBpdCYjMzk7cyBhZGhlcmluZyB0byB0aGUgZXhwZWN0ZWQgbWVtb3J5IG1vZGVsIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0uIEkgd2FudCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHVzaW5nIHRoZSBzdGFuZGFyZCBga21hbGxvY2Agb3IsIHBlcmhhcHMsIGEgbW9yZSBvcHRpbWl6ZWQsIEJQRi1zcGVjaWZpYyBhbGxvY2F0b3IuIEkgbmVlZCB0byBlbnN1cmUgaXQgaW50ZWdyYXRlcyBzZWFtbGVzc2x5IHdpdGggYW55IGV4aXN0aW5nIG1hcCBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIEJQRiB2ZXJpZmllci4gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbnQgYWNjZXNzIGlzc3VlcyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gYWxzbyBuZWVkcyB0byBiZSBvbiBteSByYWRhciwgZXNwZWNpYWxseSBpZiB0aGlzIG5ldyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgaGlnaC1mcmVxdWVuY3kgb3IgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbGltaXRzIOKAkyBkb2VzIHRoZSBhbGxvY2F0aW9uIGFjY291bnQgZm9yIHBlci1CUEYtcHJvZ3JhbSBtZW1vcnkgY2FwcyBvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gbWVtb3J5PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgd29ya3MhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDg0Olx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4xMDg1Olx0e1xuMTA4NjpcdFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjO1xuMTA4NzpcdFx0c2l6ZV90IHN0X21hcF9zaXplO1xuMTA4ODpcdFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xuMTA4OTpcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqdnQ7XG4xMDkwOlx0XHRzdHJ1Y3QgbW9kdWxlICptb2QgPSBOVUxMO1xuMTA5MTpcdFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbjEwOTI6XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbjEwOTM6XHRcdGludCByZXQ7XG4xMDk0Olx0XG4xMDk1Olx0XHRpZiAoYXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1ZUWVBFX0JURl9PQkpfRkQpIHtcbjEwOTY6XHRcdFx0LyogVGhlIG1hcCBob2xkcyBidGYgZm9yIGl0cyB3aG9sZSBsaWZlIHRpbWUuICovXG4xMDk3Olx0XHRcdGJ0ZiA9IGJ0Zl9nZXRfYnlfZmQoYXR0ci1cdTAwM2V2YWx1ZV90eXBlX2J0Zl9vYmpfZmQpO1xuMTA5ODpcdFx0XHRpZiAoSVNfRVJSKGJ0ZikpXG4xMDk5Olx0XHRcdFx0cmV0dXJuIEVSUl9DQVNUKGJ0Zik7XG4xMTAwOlx0XHRcdGlmICghYnRmX2lzX21vZHVsZShidGYpKSB7XG4xMTAxOlx0XHRcdFx0YnRmX3B1dChidGYpO1xuMTEwMjpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuMTEwMzpcdFx0XHR9XG4xMTA0Olx0XG4xMTA1Olx0XHRcdG1vZCA9IGJ0Zl90cnlfZ2V0X21vZHVsZShidGYpO1xuMTEwNjpcdFx0XHQvKiBtb2QgaG9sZHMgYSByZWZjbnQgdG8gYnRmLiBXZSBkb24mIzM5O3QgbmVlZCBhbiBleHRyYSByZWZjbnRcbjExMDc6XHRcdFx0ICogaGVyZS5cbjExMDg6XHRcdFx0ICovXG4xMTA5Olx0XHRcdGJ0Zl9wdXQoYnRmKTtcbjExMTA6XHRcdFx0aWYgKCFtb2QpXG4xMTExOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4xMTEyOlx0XHR9IGVsc2Uge1xuMTExMzpcdFx0XHRidGYgPSBicGZfZ2V0X2J0Zl92bWxpbnV4KCk7XG4xMTE0Olx0XHRcdGlmIChJU19FUlIoYnRmKSlcbjExMTU6XHRcdFx0XHRyZXR1cm4gRVJSX0NBU1QoYnRmKTtcbjExMTY6XHRcdFx0aWYgKCFidGYpXG4xMTE3Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcbjExMTg6XHRcdH1cbjExMTk6XHRcbjExMjA6XHRcdHN0X29wc19kZXNjID0gYnBmX3N0cnVjdF9vcHNfZmluZF92YWx1ZShidGYsIGF0dHItXHUwMDNlYnRmX3ZtbGludXhfdmFsdWVfdHlwZV9pZCk7XG4xMTIxOlx0XHRpZiAoIXN0X29wc19kZXNjKSB7XG4xMTIyOlx0XHRcdHJldCA9IC1FTk9UU1VQUDtcbjExMjM6XHRcdFx0Z290byBlcnJvdXQ7XG4xMTI0Olx0XHR9XG4xMTI1Olx0XG4xMTI2Olx0XHR2dCA9IHN0X29wc19kZXNjLVx1MDAzZXZhbHVlX3R5cGU7XG4xMTI3Olx0XHRpZiAoYXR0ci1cdTAwM2V2YWx1ZV9zaXplICE9IHZ0LVx1MDAzZXNpemUpIHtcbjExMjg6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjExMjk6XHRcdFx0Z290byBlcnJvdXQ7XG4xMTMwOlx0XHR9XG4xMTMxOlx0XG4xMTMyOlx0XHR0ID0gc3Rfb3BzX2Rlc2MtXHUwMDNldHlwZTtcbjExMzM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNjUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jYC4gSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbiwgc28gbGV0JiMzOTtzIHN0YXJ0IHJlYWRpbmcuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGFuYWx5emUgd2hhdCBpdCBkb2VzLCBiZWNhdXNlIEkga25vdyB0aGF0IG1hcHMgYXJlIGZ1bmRhbWVudGFsIHRvIGVCUEYmIzM5O3MgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRob3NlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZWRnZSBjYXNlcyBpdCBtaWdodCBoYW5kbGUsIGFueSBlcnJvciBjaGVja2luZyB0aGF0JiMzOTtzIGltcGxlbWVudGVkLCBhbmQgb2YgY291cnNlLCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBicm9hZGVyIGtlcm5lbCBlQlBGIGluZnJhc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgZm9yIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzNDpcdFx0c3RfbWFwX3NpemUgPSBzaXplb2YoKnN0X21hcCkgJiM0MztcbjExMzU6XHRcdFx0Lyoga3ZhbHVlIHN0b3JlcyB0aGVcbjExMzY6XHRcdFx0ICogc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3RjcF9jb25nZXN0aW9uc19vcHNcbjExMzc6XHRcdFx0ICovXG4xMTM4Olx0XHRcdCh2dC1cdTAwM2VzaXplIC0gc2l6ZW9mKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSkpO1xuMTEzOTpcdFxuMTE0MDpcdFx0c3RfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcF9zaXplLCBOVU1BX05PX05PREUpO1xuMTE0MTpcdFx0aWYgKCFzdF9tYXApIHtcbjExNDI6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjExNDM6XHRcdFx0Z290byBlcnJvdXQ7XG4xMTQ0Olx0XHR9XG4xMTQ1Olx0XG4xMTQ2Olx0XHRzdF9tYXAtXHUwMDNlc3Rfb3BzX2Rlc2MgPSBzdF9vcHNfZGVzYztcbjExNDc6XHRcdG1hcCA9IFx1MDAyNnN0X21hcC1cdTAwM2VtYXA7XG4xMTQ4Olx0XG4xMTQ5Olx0XHRzdF9tYXAtXHUwMDNldXZhbHVlID0gYnBmX21hcF9hcmVhX2FsbG9jKHZ0LVx1MDAzZXNpemUsIE5VTUFfTk9fTk9ERSk7XG4xMTUwOlx0XHRzdF9tYXAtXHUwMDNlZnVuY3NfY250ID0gY291bnRfZnVuY19wdHJzKGJ0ZiwgdCk7XG4xMTUxOlx0XHRzdF9tYXAtXHUwMDNlbGlua3MgPVxuMTE1MjpcdFx0XHRicGZfbWFwX2FyZWFfYWxsb2Moc3RfbWFwLVx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2xpbmsgKiksXG4xMTUzOlx0XHRcdFx0XHQgICBOVU1BX05PX05PREUpO1xuMTE1NDpcdFxuMTE1NTpcdFx0c3RfbWFwLVx1MDAzZWtzeW1zID1cbjExNTY6XHRcdFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cdTAwM2VmdW5jc19jbnQgKiBzaXplb2Yoc3RydWN0IGJwZl9rc3ltICopLFxuMTE1NzpcdFx0XHRcdFx0ICAgTlVNQV9OT19OT0RFKTtcbjExNTg6XHRcdGlmICghc3RfbWFwLVx1MDAzZXV2YWx1ZSB8fCAhc3RfbWFwLVx1MDAzZWxpbmtzIHx8ICFzdF9tYXAtXHUwMDNla3N5bXMpIHtcbjExNTk6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjExNjA6XHRcdFx0Z290byBlcnJvdXRfZnJlZTtcbjExNjE6XHRcdH1cbjExNjI6XHRcdHN0X21hcC1cdTAwM2VidGYgPSBidGY7XG4xMTYzOlx0XG4xMTY0Olx0XHRtdXRleF9pbml0KFx1MDAyNnN0X21hcC1cdTAwM2Vsb2NrKTtcbjExNjU6XHRcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIobWFwLCBhdHRyKTtcbjExNjY6XHRcbjExNjc6XHRcdHJldHVybiBtYXA7XG4xMTY4Olx0XG4xMTY5Olx0ZXJyb3V0X2ZyZWU6XG4xMTcwOlx0XHRfX2JwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlKG1hcCk7XG4xMTcxOlx0ZXJyb3V0OlxuMTE3MjpcdFx0bW9kdWxlX3B1dChtb2QpO1xuMTE3MzpcdFxuMTE3NDpcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbjExNzU6XHR9XG4xMTc2Olx0XG4xMTc3Olx0c3RhdGljIHU2NCBicGZfc3RydWN0X29wc19tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4xMTc4Olx0e1xuMTE3OTpcdFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG4xMTgwOlx0XHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MgPSBzdF9tYXAtXHUwMDNlc3Rfb3BzX2Rlc2M7XG4xMTgxOlx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZ0ID0gc3Rfb3BzX2Rlc2MtXHUwMDNldmFsdWVfdHlwZTtcbjExODI6XHRcdHU2NCB1c2FnZTtcbjExODM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxODcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTWVtb3J5IEFsbG9jYXRpb24gYW5kIFplcm9pbmc6IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gYGJwZl9tYXBfYXJlYV9hbGxvY2AgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSB1c2luZyB0byBhbGxvY2F0ZSBtZW1vcnkgaGVyZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzOiBkb2VzIHRoaXMgdGhpbmcgemVybyB0aGUgbWVtb3J5IGl0IGFsbG9jYXRlcz8gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgZGF0YSBhbmQgc3VidGxlIGJ1Z3MgYXJlIGEgcmVhbCBwYWluLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGF0IG1lbW9yeSBibG9jay4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBsb29rIGZvciBzb21lIHNvbGlkIGRvY3VtZW50YXRpb24gdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEJlc3QgY2FzZSBzY2VuYXJpbywgaXQmIzM5O3MgZXhwbGljaXRseSB6ZXJvZWQgZm9yIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkuIFdvcnN0IGNhc2UsIHdlIG5lZWQgdG8gZXhwbGljaXRseSBpbml0aWFsaXplIGl0IG91cnNlbHZlcyB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYmVmb3JlIHdlIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9hcmVhX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9Mjc2Nj12b2lkIGJwZl9tYXBfcHV0KHN0cnVjdCBicGZfbWFwICptYXApO1xuaW5jbHVkZS9saW51eC9icGYuaDoyNzY3OnZvaWQgKmJwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3Njgtdm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yOTktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAwOlx0YXJlbmEgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCphcmVuYSksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAxLVx0aWYgKCFhcmVuYSlcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcnJheV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0MS1cdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQyOlx0XHRhcnJheSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhhcnJheV9zaXplLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0My1cdH1cbi0tXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jPTk5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYmxvb21fbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMTQ0LVx0Yml0c2V0X2J5dGVzID0gQklUU19UT19MT05HUygodTY0KWJpdHNldF9tYXNrICYjNDM7IDEpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoxNDU6XHRibG9vbSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmJsb29tKSAmIzQzOyBiaXRzZXRfYnl0ZXMsIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE0Ni1cbi0tXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM9NDQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICppbnNuX2FycmF5X2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy00OC1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzo0OTpcdGluc25fYXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy01MC1cdGlmICghaW5zbl9hcnJheSlcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NzczPWJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzgwLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjc4MTpcdHNtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpzbWFwKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03ODItXHRpZiAoIXNtYXApXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwODQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzktXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE0MDpcdHN0X21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXBfc2l6ZSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTQxLVx0aWYgKCFzdF9tYXApIHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE0OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTQ5Olx0c3RfbWFwLVx1MDAzZXV2YWx1ZSA9IGJwZl9tYXBfYXJlYV9hbGxvYyh2dC1cdTAwM2VzaXplLCBOVU1BX05PX05PREUpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTAtXHRzdF9tYXAtXHUwMDNlZnVuY3NfY250ID0gY291bnRfZnVuY19wdHJzKGJ0ZiwgdCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1MS1cdHN0X21hcC1cdTAwM2VsaW5rcyA9XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE1MjpcdFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cdTAwM2VmdW5jc19jbnQgKiBzaXplb2Yoc3RydWN0IGJwZl9saW5rICopLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTMtXHRcdFx0XHQgICBOVU1BX05PX05PREUpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTU1LVx0c3RfbWFwLVx1MDAzZWtzeW1zID1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTU2Olx0XHRicGZfbWFwX2FyZWFfYWxsb2Moc3RfbWFwLVx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2tzeW0gKiksXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1Ny1cdFx0XHRcdCAgIE5VTUFfTk9fTk9ERSk7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYz04NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNwdV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDAtXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwMTpcdGNtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpjbWFwKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTAyLVx0aWYgKCFjbWFwKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtMTA3LVx0LyogQWxsb2MgYXJyYXkgZm9yIHBvc3NpYmxlIHJlbW90ZSBcJiMzNDtkZXN0aW5hdGlvblwmIzM0OyBDUFVzICovXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwODpcdGNtYXAtXHUwMDNlY3B1X21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhjbWFwLVx1MDAzZW1hcC5tYXhfZW50cmllcyAqXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTEwOS1cdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBicGZfY3B1X21hcF9lbnRyeSAqKSxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTkxPXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqZGV2X21hcF9jcmVhdGVfaGFzaCh1bnNpZ25lZCBpbnQgZW50cmllcyxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTk2LVxua2VybmVsL2JwZi9kZXZtYXAuYzo5NzpcdGhhc2ggPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgZW50cmllcyAqIHNpemVvZigqaGFzaCksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2Rldm1hcC5jLTk4LVx0aWYgKGhhc2ggIT0gTlVMTClcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTEzNj1zdGF0aWMgaW50IGRldl9tYXBfaW5pdF9tYXAoc3RydWN0IGJwZl9kdGFiICpkdGFiLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE1My1cdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2Rldm1hcC5jOjE1NDpcdFx0ZHRhYi1cdTAwM2VuZXRkZXZfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIGR0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTU1LVx0XHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgYnBmX2R0YWJfbmV0ZGV2ICopLFxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MTY0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqZGV2X21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE2OC1cbmtlcm5lbC9icGYvZGV2bWFwLmM6MTY5Olx0ZHRhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmR0YWIpLCBOVU1BX05PX05PREUpO1xua2VybmVsL2JwZi9kZXZtYXAuYy0xNzAtXHRpZiAoIWR0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE5PXN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI2LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzI3Olx0aHRhYi1cdTAwM2VlbGVtcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KWh0YWItXHUwMDNlZWxlbV9zaXplICogbnVtX2VudHJpZXMsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjgtXHRcdFx0XHRcdCBodGFiLVx1MDAzZW1hcC5udW1hX25vZGUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTU0NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTU1OC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjU1OTpcdGh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpodGFiKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTU2MC1cdGlmICghaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDEtXHRlcnIgPSAtRU5PTUVNO1xua2VybmVsL2JwZi9oYXNodGFiLmM6NjAyOlx0aHRhYi1cdTAwM2VidWNrZXRzID0gYnBmX21hcF9hcmVhX2FsbG9jKGh0YWItXHUwMDNlbl9idWNrZXRzICpcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTYwMy1cdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBidWNrZXQpLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3OTQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5OS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4MDA6XHRyaHRhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnJodGFiKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MDEtXHRpZiAoIXJodGFiKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jPTI5Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNncm91cF9zdG9yYWdlX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjYtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozMjc6XHRtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwKSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMyOC1cdGlmICghbWFwKVxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYz01NzE9c3RhdGljIHN0cnVjdCBicGZfbWFwICp0cmllX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy01ODctXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NTg4Olx0dHJpZSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnRyaWUpLCBOVU1BX05PX05PREUpO1xua2VybmVsL2JwZi9scG1fdHJpZS5jLTU4OS1cdGlmICghdHJpZSlcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz01MDM9c3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfb2ZmbG9hZF9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtNTE1LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6NTE2Olx0b2ZmbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqb2ZmbWFwKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxNy1cdGlmICghb2ZmbWFwKVxuLS1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jPTY1PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcXVldWVfc3RhY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTczLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM6NzQ6XHRxcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhxdWV1ZV9zaXplLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtNzUtXHRpZiAoIXFzKVxuLS1cbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmM9MTQ5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmV1c2Vwb3J0X2FycmF5X2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmMtMTU0LVx0LyogYWxsb2NhdGUgYWxsIG1hcCBlbGVtZW50cyBhbmQgemVyby1pbml0aWFsaXplIHRoZW0gKi9cbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmM6MTU1Olx0YXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2Moc3RydWN0X3NpemUoYXJyYXksIHB0cnMsIGF0dHItXHUwMDNlbWF4X2VudHJpZXMpLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9yZXVzZXBvcnRfYXJyYXkuYy0xNTYtXHRpZiAoIWFycmF5KVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTkzPXN0YXRpYyBzdHJ1Y3QgYnBmX3JpbmdidWYgKmJwZl9yaW5nYnVmX2FyZWFfYWxsb2Moc2l6ZV90IGRhdGFfc3osIGludCBudW1hX25vZGUpXG4tLVxua2VybmVsL2JwZi9yaW5nYnVmLmMtMTIyLVx0YXJyYXlfc2l6ZSA9IChucl9tZXRhX3BhZ2VzICYjNDM7IDIgKiBucl9kYXRhX3BhZ2VzKSAqIHNpemVvZigqcGFnZXMpO1xua2VybmVsL2JwZi9yaW5nYnVmLmM6MTIzOlx0cGFnZXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoYXJyYXlfc2l6ZSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTEyNC1cdGlmICghcGFnZXMpXG4tLVxua2VybmVsL2JwZi9yaW5nYnVmLmM9MTk0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmluZ2J1Zl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9yaW5nYnVmLmMtMjEyLVxua2VybmVsL2JwZi9yaW5nYnVmLmM6MjEzOlx0cmJfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqcmJfbWFwKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTIxNC1cdGlmICghcmJfbWFwKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz02OD1zdGF0aWMgaW50IHByZWFsbG9jX2VsZW1zX2FuZF9mcmVlbGlzdChzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcClcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzMtXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NzQ6XHRzbWFwLVx1MDAzZWVsZW1zID0gYnBmX21hcF9hcmVhX2FsbG9jKGVsZW1fc2l6ZSAqIHNtYXAtXHUwMDNlbWFwLm1heF9lbnRyaWVzLFxua2VybmVsL2JwZi9zdGFja21hcC5jLTc1LVx0XHRcdFx0XHQgc21hcC1cdTAwM2VtYXAubnVtYV9ub2RlKTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9OTM9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTEyNS1cdGNvc3QgPSBuX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKikgJiM0Mzsgc2l6ZW9mKCpzbWFwKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoxMjY6XHRzbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKGNvc3QsIGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cikpO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTEyNy1cdGlmICghc21hcClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zMDg9c3RhdGljIGludCBicGZfbWFwX2NvcHlfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzEtICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzI6c3RhdGljIHZvaWQgKl9fYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlLCBib29sIG1tYXBhYmxlKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzczLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MDgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MDk6dm9pZCAqYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDEwLXtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQxMTpcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxMi19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDE0PXZvaWQgKmJwZl9tYXBfYXJlYV9tbWFwYWJsZV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxNS17XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MTY6XHRyZXR1cm4gX19icGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlLCB0cnVlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxNy19XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDktXG5uZXQvY29yZS9zb2NrX21hcC5jOjUwOlx0c3RhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnN0YWIpLCBOVU1BX05PX05PREUpO1xubmV0L2NvcmUvc29ja19tYXAuYy01MS1cdGlmICghc3RhYilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU2LVxubmV0L2NvcmUvc29ja19tYXAuYzo1NzpcdHN0YWItXHUwMDNlc2tzID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgtXHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrICopLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA5OD1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfaGFzaF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMTI6XHRodGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqaHRhYiksIE5VTUFfTk9fTk9ERSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTMtXHRpZiAoIWh0YWIpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTI2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTI3Olx0aHRhYi1cdTAwM2VidWNrZXRzID0gYnBmX21hcF9hcmVhX2FsbG9jKGh0YWItXHUwMDNlYnVja2V0c19udW0gKlxubmV0L2NvcmUvc29ja19tYXAuYy0xMTI4LVx0XHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IGJwZl9zaHRhYl9idWNrZXQpLFxuLS1cbm5ldC94ZHAveHNrbWFwLmM9NjQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICp4c2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbm5ldC94ZHAveHNrbWFwLmMtNzctXG5uZXQveGRwL3hza21hcC5jOjc4Olx0bSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUpO1xubmV0L3hkcC94c2ttYXAuYy03OS1cdGlmICghbSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgX19icGZfbWFwX2FyZWFfYWxsb2NgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgX19icGZfbWFwX2FyZWFfYWxsb2NgLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBCUEYgbWFwIG1hbmFnZW1lbnQsIGxpa2VseSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiBvZiBtZW1vcnkgcmVnaW9ucyB1c2VkIHRvIHN0b3JlIG1hcCBkYXRhLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgdGhpcyB1c2luZyBhIHNwZWNpZmljIHNsYWIgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBiYXNpYyBsaWtlIGBrbWFsbG9jYD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGJlaW5nIGVuZm9yY2VkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZXk/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGFyZ3VtZW50cyBiZWluZyBwYXNzZWQg4oCTIHNpemUsIGZsYWdzLCBwb3NzaWJseSBOVU1BIG5vZGUgaW5mb3JtYXRpb24uIFRoZSBmbGFncyBhcmUgZ29pbmcgdG8gYmUga2V5LCBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgbGlrZSBgR0ZQX0tFUk5FTGAgYW5kIHBvdGVudGlhbGx5IG90aGVycyByZWxhdGVkIHRvIG1lbW9yeSB0eXBlcyBvciBsb2NraW5nLiBJ4oCZbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyBhbmQgY2FsbGVlcy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgQlBGIG1hcCBpbmZyYXN0cnVjdHVyZSwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IGJsZWVkIG92ZXIgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCBpZiB0aGVyZSBhcmUgbG9ja3MgaW52b2x2ZWQuIEFyZSB0aGVyZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBCUEYgbWFwIG9wZXJhdGlvbnMgYXJlIGRldGVybWluZWQsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBlc3NlbnRpYWwgZm9yIG9wdGltaXppbmcgdGhpbmdzIGRvd24gdGhlIHJvYWQuIEFscmlnaHQsIHRpbWUgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcyOlx0c3RhdGljIHZvaWQgKl9fYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlLCBib29sIG1tYXBhYmxlKVxuIDM3MzpcdHtcbiAzNzQ6XHRcdC8qIFdlIHJlYWxseSBqdXN0IHdhbnQgdG8gZmFpbCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgT09NIGtpbGxlclxuIDM3NTpcdFx0ICogdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB0aGVyZWZvcmUgd2Ugc2V0IF9fR0ZQX05PUkVUUlkgdG8ga21hbGxvYyxcbiAzNzY6XHRcdCAqIHdoaWNoIGlzIHVzZWQgZm9yIGxvd2VyIG9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuXG4gMzc3Olx0XHQgKlxuIDM3ODpcdFx0ICogSXQgaGFzIGJlZW4gb2JzZXJ2ZWQgdGhhdCBoaWdoZXIgb3JkZXIgYWxsb2NhdGlvbiByZXF1ZXN0cyBkb25lIGJ5XG4gMzc5Olx0XHQgKiB2bWFsbG9jIHdpdGggX19HRlBfTk9SRVRSWSBiZWluZyBzZXQgbWlnaHQgZmFpbCBkdWUgdG8gbm90IHRyeWluZ1xuIDM4MDpcdFx0ICogdG8gcmVjbGFpbSBtZW1vcnkgZnJvbSB0aGUgcGFnZSBjYWNoZSwgdGh1cyB3ZSBzZXRcbiAzODE6XHRcdCAqIF9fR0ZQX1JFVFJZX01BWUZBSUwgdG8gYXZvaWQgc3VjaCBzaXR1YXRpb25zLlxuIDM4MjpcdFx0ICovXG4gMzgzOlx0XG4gMzg0Olx0XHRnZnBfdCBnZnAgPSBicGZfbWVtY2dfZmxhZ3MoX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XG4gMzg1Olx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuIDM4NjpcdFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7XG4gMzg3Olx0XHR2b2lkICphcmVhO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKHNpemUgXHUwMDNlPSBTSVpFX01BWClcbiAzOTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzkxOlx0XG4gMzkyOlx0XHQvKiBrbWFsbG9jKCkmIzM5O2VkIG1lbW9yeSBjYW4mIzM5O3QgYmUgbW1hcCgpJiMzOTtlZCAqL1xuIDM5MzpcdFx0aWYgKG1tYXBhYmxlKSB7XG4gMzk0Olx0XHRcdEJVR19PTighUEFHRV9BTElHTkVEKHNpemUpKTtcbiAzOTU6XHRcdFx0YWxpZ24gPSBTSE1MQkE7XG4gMzk2Olx0XHRcdGZsYWdzID0gVk1fVVNFUk1BUDtcbiAzOTc6XHRcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2M9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSkge1xuIDM5ODpcdFx0XHRhcmVhID0ga21hbGxvY19ub2RlKHNpemUsIGdmcCB8IEdGUF9VU0VSIHwgX19HRlBfTk9SRVRSWSxcbiAzOTk6XHRcdFx0XHRcdCAgICBudW1hX25vZGUpO1xuIDQwMDpcdFx0XHRpZiAoYXJlYSAhPSBOVUxMKVxuIDQwMTpcdFx0XHRcdHJldHVybiBhcmVhO1xuIDQwMjpcdFx0fVxuIDQwMzpcdFxuIDQwNDpcdFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlKHNpemUsIGFsaWduLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbiA0MDU6XHRcdFx0XHRnZnAgfCBHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCwgUEFHRV9LRVJORUwsXG4gNDA2Olx0XHRcdFx0ZmxhZ3MsIG51bWFfbm9kZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiA0MDc6XHR9XG4gNDA4Olx0XG4gNDA5Olx0dm9pZCAqYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxuIDQxMDpcdHtcbiA0MTE6XHRcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcbiA0MTI6XHR9XG4gNDEzOlx0XG4gNDE0Olx0dm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxuIDQxNTpcdHtcbiA0MTY6XHRcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIHRydWUpO1xuIDQxNzpcdH1cbiA0MTg6XHRcbiA0MTk6XHR2b2lkIGJwZl9tYXBfYXJlYV9mcmVlKHZvaWQgKmFyZWEpXG4gNDIwOlx0e1xuIDQyMTpcdFx0a3ZmcmVlKGFyZWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg1NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25jZXJucyBSZWdhcmRpbmcgQlBGIE1hcCBVcGRhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYF9fYnBmX21hcF9hcmVhX2FsbG9jYCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgdXNpbmcgYF9fR0ZQX1pFUk9gLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgbWFwIGlzIHplcm9lZCBvdXQgaW5pdGlhbGx5LiBTbywgYHN0X21hcC0mZ3Q7dXZhbHVlYCBhbmQgYHN0X21hcC0mZ3Q7a3ZhbHVlYCBhcmUgZGVmaW5pdGVseSBzdGFydGluZyBhdCB6ZXJvLiBCdXQsIGhlcmUmIzM5O3Mgd2hlcmUgbXkgYWxhcm0gYmVsbHMgYXJlIHN0YXJ0aW5nIHRvIHJpbmcuCgpgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCBjb3BpZXMgdXNlciBkYXRhIGludG8gYHV2YWx1ZWAgdXNpbmcgYG1lbWNweWAuIFRoZSBrZXkgaXMgdGhhdCBgdmFsdWVgIGluIGBtZW1jcHkodXZhbHVlLCB2YWx1ZSwgbWFwLSZndDt2YWx1ZV9zaXplKWAgaXMgKmNvbWluZyBmcm9tIHVzZXIgc3BhY2UqLiBJcyB0aGF0IGRhdGEgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHRpbWUgaXQgZ2V0cyBjb3BpZWQgaW50byB0aGUga2VybmVsPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLgoKTGV0JiMzOTtzIHRyYWNlIGJhY2suIEkgc2VlIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSB0aGUgYG1hcF91cGRhdGVfZWxlbWAgc3lzY2FsbC4gVGhlIHN5c2NhbGwgaXMgY29weWluZyBgdmFsdWVfc2l6ZWAgYnl0ZXMgZnJvbSB1c2VyIHNwYWNlLiBPa2F5LCBzbyBpZiB1c2VyIHNwYWNlIHBhc3NlcyBzb21ldGhpbmcgd2l0aCB1bmluaXRpYWxpemVkIGJ5dGVzIOKAkyBtYXliZSBwYWRkaW5nLCBvciBzb21lIHVuaW5pdGlhbGl6ZWQgc3RydWN0IG1lbWJlcnMg4oCTIHRob3NlIGJ5dGVzIGNvdWxkIHBvdGVudGlhbGx5IGdldCBjb3BpZWQgc3RyYWlnaHQgaW50byBgdXZhbHVlYC4gQW5kIHRoZW4sIGBrdmFsdWVgIGlzIHN1YnNlcXVlbnRseSBpbml0aWFsaXplZCBmcm9tIGB1dmFsdWVgPwoKSSYjMzk7bSBzdGFydGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgLSBga2RhdGFgIGlzIGluaXRpYWxpemVkIGZyb20gYHVkYXRhYC4gTGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzY6XHRcbiA3Nzc6XHRcdG1lbWNweSh1dmFsdWUsIHZhbHVlLCBtYXAtXHUwMDNldmFsdWVfc2l6ZSk7XG4gNzc4Olx0XG4gNzc5Olx0XHR1ZGF0YSA9IFx1MDAyNnV2YWx1ZS1cdTAwM2VkYXRhO1xuIDc4MDpcdFx0a2RhdGEgPSBcdTAwMjZrdmFsdWUtXHUwMDNlZGF0YTtcbiA3ODE6XHRcbiA3ODI6XHRcdHBsaW5rID0gc3RfbWFwLVx1MDAzZWxpbmtzO1xuIDc4MzpcdFx0cGtzeW0gPSBzdF9tYXAtXHUwMDNla3N5bXM7XG4gNzg0Olx0XHR0bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChzdF9tYXAtXHUwMDNlYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKTtcbiA3ODU6XHRcdG1vZHVsZV90eXBlID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHN0X29wc19pZHNbSURYX01PRFVMRV9JRF0pO1xuIDc4NjpcdFx0Zm9yX2VhY2hfbWVtYmVyKGksIHQsIG1lbWJlcikge1xuIDc4NzpcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm10eXBlLCAqcHR5cGU7XG4gNzg4Olx0XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiA3ODk6XHRcdFx0c3RydWN0IGJwZl90cmFtcF9saW5rICpsaW5rO1xuIDc5MDpcdFx0XHRzdHJ1Y3QgYnBmX2tzeW0gKmtzeW07XG4gNzkxOlx0XHRcdHUzMiBtb2ZmO1xuIDc5MjpcdFxuIDc5MzpcdFx0XHRtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XG4gNzk0Olx0XHRcdG1uYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KHN0X21hcC1cdTAwM2VidGYsIG1lbWJlci1cdTAwM2VuYW1lX29mZik7XG4gNzk1Olx0XHRcdHB0eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoc3RfbWFwLVx1MDAzZWJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIE5VTEwpO1xuIDc5NjpcdFx0XHRpZiAocHR5cGUgPT0gbW9kdWxlX3R5cGUpIHtcbiA3OTc6XHRcdFx0XHRpZiAoKih2b2lkICoqKSh1ZGF0YSAmIzQzOyBtb2ZmKSlcbiA3OTg6XHRcdFx0XHRcdGdvdG8gcmVzZXRfdW5sb2NrO1xuIDc5OTpcdFx0XHRcdCoodm9pZCAqKikoa2RhdGEgJiM0MzsgbW9mZikgPSBCUEZfTU9EVUxFX09XTkVSO1xuIDgwMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDgwMTpcdFx0XHR9XG4gODAyOlx0XG4gODAzOlx0XHRcdGVyciA9IHN0X29wcy1cdTAwM2Vpbml0X21lbWJlcih0LCBtZW1iZXIsIGtkYXRhLCB1ZGF0YSk7XG4gODA0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gODA1Olx0XHRcdFx0Z290byByZXNldF91bmxvY2s7XG4gODA2Olx0XG4gODA3Olx0XHRcdC8qIFRoZSAtXHUwMDNlaW5pdF9tZW1iZXIoKSBoYXMgaGFuZGxlZCB0aGlzIG1lbWJlciAqL1xuIDgwODpcdFx0XHRpZiAoZXJyIFx1MDAzZSAwKVxuIDgwOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDgxMDpcdFxuIDgxMTpcdFx0XHQvKiBJZiBzdF9vcHMtXHUwMDNlaW5pdF9tZW1iZXIgZG9lcyBub3QgaGFuZGxlIGl0LFxuIDgxMjpcdFx0XHQgKiB3ZSB3aWxsIG9ubHkgaGFuZGxlIGZ1bmMgcHRycyBhbmQgemVyby1lZCBtZW1iZXJzXG4gODEzOlx0XHRcdCAqIGhlcmUuICBSZWplY3QgZXZlcnl0aGluZyBlbHNlLlxuIDgxNDpcdFx0XHQgKi9cbiA4MTU6XHRcbiA4MTY6XHRcdFx0LyogQWxsIG5vbiBmdW5jIHB0ciBtZW1iZXIgbXVzdCBiZSAwICovXG4gODE3Olx0XHRcdGlmICghcHR5cGUgfHwgIWJ0Zl90eXBlX2lzX2Z1bmNfcHJvdG8ocHR5cGUpKSB7XG4gODE4Olx0XHRcdFx0dTMyIG1zaXplO1xuIDgxOTpcdFxuIDgyMDpcdFx0XHRcdG10eXBlID0gYnRmX3R5cGVfYnlfaWQoc3RfbWFwLVx1MDAzZWJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUpO1xuIDgyMTpcdFx0XHRcdG10eXBlID0gYnRmX3Jlc29sdmVfc2l6ZShzdF9tYXAtXHUwMDNlYnRmLCBtdHlwZSwgXHUwMDI2bXNpemUpO1xuIDgyMjpcdFx0XHRcdGlmIChJU19FUlIobXR5cGUpKSB7XG4gODIzOlx0XHRcdFx0XHRlcnIgPSBQVFJfRVJSKG10eXBlKTtcbiA4MjQ6XHRcdFx0XHRcdGdvdG8gcmVzZXRfdW5sb2NrO1xuIDgyNTpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMTUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBjbGlja2VkOiBga2RhdGFgIGlzIGdldHRpbmcgYXV0b21hdGljYWxseSB6ZXJvZWQuIFRoYXQmIzM5O3MgYmVjYXVzZSBga3ZhbHVlYCDigJMgdGhlIGFjdHVhbCBkYXRhIHN0cnVjdHVyZSBpbiB0aGlzIGNvbnRleHQg4oCTIGxpdmVzIGluc2lkZSBgc3RfbWFwYCwgd2hpY2ggd2FzIGFsbG9jYXRlZCB1c2luZyBgYnBmX21hcF9hcmVhX2FsbG9jYC4gQW5kIHJlbWVtYmVyLCBgYnBmX21hcF9hcmVhX2FsbG9jYCAqZ3VhcmFudGVlcyogemVyby1pbml0aWFsaXphdGlvbi4gR290IGl0LgoKU28sIHRoZSBjb2RlIHRoZW4gdXNlcyBgZm9yX2VhY2hfbWVtYmVyYCB0byBjYXJlZnVsbHkgc3RlcCB0aHJvdWdoIGVhY2ggbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUuIFByZXR0eSBzdGFuZGFyZC4gRm9yIGVhY2ggbWVtYmVyIGVuY291bnRlcmVkLCBpdCBjYWxscyBgc3Rfb3BzLSZndDtpbml0X21lbWJlcmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgc3BlY2lmaWMuCgpJbiB0aGUgY2FzZSBvZiBgbmFtZWAsIGEgcGFydGljdWxhciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyB1c2VkLiBIb3dldmVyLCBpdCYjMzk7cyBjbGVhciB0aGF0IHdoZW4gdGhlIG1lbWJlciBpcyBgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgdGhlIGNvcnJlc3BvbmRpbmcgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgYGJwZl90Y3BfY2FfaW5pdF9tZW1iZXJgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gYW5hbHl6ZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBhbnkgbWVtYmVyIHNwZWNpZmljIHRvIHRoZSBjb25nZXN0aW9uIGFsZ29yaXRobS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9icGZfdGNwX2NhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdHN0YXRpYyBpbnQgYnBmX3RjcF9jYV9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gMjExOlx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4gMjEyOlx0XHRcdFx0XHQgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcbiAyMTM6XHR7XG4gMjE0Olx0XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp1dGNwX2NhO1xuIDIxNTpcdFx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhO1xuIDIxNjpcdFx0dTMyIG1vZmY7XG4gMjE3Olx0XG4gMjE4Olx0XHR1dGNwX2NhID0gKGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKil1ZGF0YTtcbiAyMTk6XHRcdHRjcF9jYSA9IChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICopa2RhdGE7XG4gMjIwOlx0XG4gMjIxOlx0XHRtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XG4gMjIyOlx0XHRzd2l0Y2ggKG1vZmYpIHtcbiAyMjM6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgZmxhZ3MpOlxuIDIyNDpcdFx0XHRpZiAodXRjcF9jYS1cdTAwM2VmbGFncyBcdTAwMjYgflRDUF9DT05HX01BU0spXG4gMjI1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjI2Olx0XHRcdHRjcF9jYS1cdTAwM2VmbGFncyA9IHV0Y3BfY2EtXHUwMDNlZmxhZ3M7XG4gMjI3Olx0XHRcdHJldHVybiAxO1xuIDIyODpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCBuYW1lKTpcbiAyMjk6XHRcdFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVx1MDAzZW5hbWUsIHV0Y3BfY2EtXHUwMDNlbmFtZSxcbiAyMzA6XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHRjcF9jYS1cdTAwM2VuYW1lKSkgXHUwMDNjPSAwKVxuIDIzMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzMjpcdFx0XHRyZXR1cm4gMTtcbiAyMzM6XHRcdH1cbiAyMzQ6XHRcbiAyMzU6XHRcdHJldHVybiAwO1xuIDIzNjpcdH1cbiAyMzc6XHRcbiAyMzg6XHRzdGF0aWMgaW50IGJwZl90Y3BfY2FfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gMjM5Olx0e1xuIDI0MDpcdFx0cmV0dXJuIHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xuIDI0MTpcdH1cbiAyNDI6XHRcbiAyNDM6XHRzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gMjQ0Olx0e1xuIDI0NTpcdFx0dGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKGtkYXRhKTtcbiAyNDY6XHR9XG4gMjQ3Olx0XG4gMjQ4Olx0c3RhdGljIGludCBicGZfdGNwX2NhX3VwZGF0ZSh2b2lkICprZGF0YSwgdm9pZCAqb2xkX2tkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gMjQ5Olx0e1xuIDI1MDpcdFx0cmV0dXJuIHRjcF91cGRhdGVfY29uZ2VzdGlvbl9jb250cm9sKGtkYXRhLCBvbGRfa2RhdGEpO1xuIDI1MTpcdH1cbiAyNTI6XHRcbiAyNTM6XHRzdGF0aWMgaW50IGJwZl90Y3BfY2FfdmFsaWRhdGUodm9pZCAqa2RhdGEpXG4gMjU0Olx0e1xuIDI1NTpcdFx0cmV0dXJuIHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xuIDI1NjpcdH1cbiAyNTc6XHRcbiAyNTg6XHRzdGF0aWMgdTMyIGJwZl90Y3BfY2Ffc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKVxuIDI1OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NjQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBPYmplY3QgTmFtaW5nIGluIEJQRioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBvYmplY3QgbmFtaW5nLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBgYnBmX29ial9uYW1lX2NweWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHdoYXQgdGhpcyBjb3B5IGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBvYmplY3QgbmFtZXMgYXJlIGhhbmRsZWQgdW5kZXIgdGhlIGhvb2QuIFdoYXQmIzM5O3MgdGhlIGltcGxlbWVudGF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cz8gSSBuZWVkIHRvIGFuYWx5emUgYGJwZl9vYmpfbmFtZV9jcHlgIGRpcmVjdGx5IHRvIGZ1bGx5IGdyYXNwIGl0cyBiZWhhdmlvciwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbmQgYW55IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBzb3VyY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX29ial9uYW1lX2NweSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzY19icGYuYz0zNDQ9c3RhdGljIGludCBibV9icGZfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTM1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJpbmZtdF9taXNjX29wcywgbmFtZSk6XG5mcy9iaW5mbXRfbWlzY19icGYuYzozNTQ6XHRcdGlmIChicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zNTUtXHRcdFx0XHQgICAgIHNpemVvZihvcHMtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTY1NT1zdHJ1Y3QgYnBmX21hcCAqYnBmX3Byb2dfYXJlbmEoc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6NjU2OmludCBicGZfb2JqX25hbWVfY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY1Ny1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjAzPWludCBicGZfZ2V0X2ZpbGVfZmxhZyhpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIyNC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEyMjU6aW50IGJwZl9vYmpfbmFtZV9jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGludCBzaXplKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIyNi17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI0NC19XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjQ1OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9vYmpfbmFtZV9jcHkpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI0Ni1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTU0MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1NDI6XHRlcnIgPSBicGZfb2JqX25hbWVfY3B5KG1hcC1cdTAwM2VuYW1lLCBhdHRyLVx1MDAzZW1hcF9uYW1lLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTU0My1cdFx0XHQgICAgICAgc2l6ZW9mKGF0dHItXHUwMDNlbWFwX25hbWUpKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yOTE3PXN0YXRpYyBpbnQgYnBmX3Byb2dfbG9hZCh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMjYtXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2Vsb2FkX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxMjc6XHRlcnIgPSBicGZfb2JqX25hbWVfY3B5KHByb2ctXHUwMDNlYXV4LVx1MDAzZW5hbWUsIGF0dHItXHUwMDNlcHJvZ19uYW1lLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyOC1cdFx0XHQgICAgICAgc2l6ZW9mKGF0dHItXHUwMDNlcHJvZ19uYW1lKSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz03OTM5PXN0YXRpYyBpbnQgYnBmX3NjeF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy03OTU5LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgbmFtZSk6XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjc5NjA6XHRcdHJldCA9IGJwZl9vYmpfbmFtZV9jcHkob3BzLVx1MDAzZW5hbWUsIHVvcHMtXHUwMDNlbmFtZSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzk2MS1cdFx0XHRcdCAgICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKTtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MjEwPXN0YXRpYyBpbnQgYnBmX3RjcF9jYV9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyOC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgbmFtZSk6XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjI5Olx0XHRpZiAoYnBmX29ial9uYW1lX2NweSh0Y3BfY2EtXHUwMDNlbmFtZSwgdXRjcF9jYS1cdTAwM2VuYW1lLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIzMC1cdFx0XHRcdCAgICAgc2l6ZW9mKHRjcF9jYS1cdTAwM2VuYW1lKSkgXHUwMDNjPSAwKVxuLS1cbm5ldC9zY2hlZC9icGZfcWRpc2MuYz0zNjE9c3RhdGljIGludCBicGZfcWRpc2NfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbm5ldC9zY2hlZC9icGZfcWRpc2MuYy0zODItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBRZGlzY19vcHMsIGlkKTpcbm5ldC9zY2hlZC9icGZfcWRpc2MuYzozODM6XHRcdGlmIChicGZfb2JqX25hbWVfY3B5KHFkaXNjX29wcy1cdTAwM2VpZCwgdXFkaXNjX29wcy1cdTAwM2VpZCxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYy0zODQtXHRcdFx0XHQgICAgIHNpemVvZihxZGlzY19vcHMtXHUwMDNlaWQpKSBcdTAwM2M9IDApXG4tLVxubmV0L3NtYy9zbWNfaHNfYnBmLmM9ODU9c3RhdGljIGludCBzbWNfYnBmX2hzX2N0cmxfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbm5ldC9zbWMvc21jX2hzX2JwZi5jLTk4LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc21jX2hzX2N0cmwsIG5hbWUpOlxubmV0L3NtYy9zbWNfaHNfYnBmLmM6OTk6XHRcdGlmIChicGZfb2JqX25hbWVfY3B5KGtfY3RybC1cdTAwM2VuYW1lLCB1X2N0cmwtXHUwMDNlbmFtZSxcbm5ldC9zbWMvc21jX2hzX2JwZi5jLTEwMC1cdFx0XHRcdCAgICAgc2l6ZW9mKHVfY3RybC1cdTAwM2VuYW1lKSkgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzkzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9vYmpfbmFtZV9jcHlgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLCBhbmQgSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBoYXZlIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgdG8gYmUgdHJ1bHkgdXNlZnVsLgoKKipEaXZpbmcgRGVlcCBpbnRvIGBicGZfb2JqX25hbWVfY3B5YCoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXM6ICpgYnBmX29ial9uYW1lX2NweWAuLi4gc291bmRzIGxpa2Ugd2UmIzM5O3JlIGNvcHlpbmcgb2JqZWN0IG5hbWVzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIEZhaXIgZW5vdWdoLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdywgd2hlcmUsIGFuZCB3aHkgaXQmIzM5O3MgdXNlZC4gSXMgaXQgYSBjcml0aWNhbCBwYXRoIGZ1bmN0aW9uPyBBIHV0aWxpdHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGltcGxlbWVudGF0aW9uPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbj8gV2hhdCBhcmUgdGhlIGNvbnN0cmFpbnRzIGl0IGhhcz8qCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgQlBGIGNvbXBvbmVudHMuICpJcyB0aGlzIGEgZGlyZWN0IGNvcHksIG9yIGlzIHRoZXJlIGFueSBzYW5pdGl6YXRpb24sIHZhbGlkYXRpb24sIG9yIHRydW5jYXRpb24gaGFwcGVuaW5nPyBUaGF0JiMzOTtzIHZpdGFsIHRvIGtub3cgaW1tZWRpYXRlbHkuKiBUaGUgc2l6ZSBwYXJhbWV0ZXJzIGFyZSBnb2luZyB0byBiZSBrZXksIGFuZCBJ4oCZbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG9mZi1ieS1vbmUgZXJyb3JzLiBBbHNvLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYW55IGxvY2tpbmcgbWVjaGFuaXNtczsgZGF0YSByYWNlcyBhcmUgbXkgbWFpbiB3b3JyeS4gV2hhdCBhcmUgdGhlIG1lbW9yeSBiYXJyaWVycz8gVGhpcyB3aWxsIGJlIGltcG9ydGFudCBpZiBtdWx0aXBsZSB0aHJlYWRzIGNhbiB1c2UgdGhpcy4KCkkmIzM5O2xsIGJlIGFza2luZyBteXNlbGYgcXVlc3Rpb25zIGFsb25nIHRoZSB3YXk6ICpXaGF0IGlzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZT8gV2hhdCBhcmUgdGhlIGFzc3VtcHRpb25zIG1hZGUgYnkgdGhlIGRldmVsb3BlcnM/IElzIHRoZSBjb2RlIHdlbGwtZG9jdW1lbnRlZCwgb3IgYW0gSSBnb2luZyB0byBoYXZlIHRvIHJldmVyc2UgZW5naW5lZXIgaXQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBlcnJvcnM/IEFyZSB0aGUgZXJyb3IgY29uZGl0aW9ucyBwcm9wZXJseSBoYW5kbGVkLCBvciBhcmUgdGhlcmUgc2lsZW50IGZhaWx1cmVzPyogSSYjMzk7bGwgYWxzbyB3YW50IHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIE1lbW9yeSBhbGxvY2F0aW9uLCBkYXRhIG1vdmVzLCBhbmQgY29weSBsb29wczsgdGhlc2UgY2FuIHNsb3cgdGhpbmdzIGRvd24uCgpPbmNlIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGludGVybmFsIHdvcmtpbmdzLCBJIHdpbGwgcGxhY2UgdGhpcyBmdW5jdGlvbiBpbiBjb250ZXh0LiAqSXMgaXQgcGFydCBvZiBhIGxhcmdlciBvYmplY3QgbWFuYWdlbWVudCBzeXN0ZW0gd2l0aGluIEJQRj8gSG93IGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlPyBJcyBpdCB1c2VkIGluIGFueSBzZW5zaXRpdmUgYXJlYXM/IEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgaW1wYWN0cyBvZiB0aGlzIHRoYXQgbWF5IGJlIGxlc3Mgb2J2aW91cz8qIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgQlBGIHN5c3RlbS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIG9wZXJhdGluZyBhcyBpbnRlbmRlZCwgYW5kIGhvdyBpdCBjb3VsZCBiZSBpbXByb3ZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIyNTpcdGludCBicGZfb2JqX25hbWVfY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbjEyMjY6XHR7XG4xMjI3Olx0XHRjb25zdCBjaGFyICplbmQgPSBzcmMgJiM0Mzsgc2l6ZTtcbjEyMjg6XHRcdGNvbnN0IGNoYXIgKm9yaWdfc3JjID0gc3JjO1xuMTIyOTpcdFxuMTIzMDpcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4xMjMxOlx0XHQvKiBDb3B5IGFsbCBpc2FsbnVtKCksICYjMzk7XyYjMzk7IGFuZCAmIzM5Oy4mIzM5OyBjaGFycy4gKi9cbjEyMzI6XHRcdHdoaWxlIChzcmMgXHUwMDNjIGVuZCBcdTAwMjZcdTAwMjYgKnNyYykge1xuMTIzMzpcdFx0XHRpZiAoIWlzYWxudW0oKnNyYykgXHUwMDI2XHUwMDI2XG4xMjM0Olx0XHRcdCAgICAqc3JjICE9ICYjMzk7XyYjMzk7IFx1MDAyNlx1MDAyNiAqc3JjICE9ICYjMzk7LiYjMzk7KVxuMTIzNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIzNjpcdFx0XHQqZHN0JiM0MzsmIzQzOyA9ICpzcmMmIzQzOyYjNDM7O1xuMTIzNzpcdFx0fVxuMTIzODpcdFxuMTIzOTpcdFx0LyogTm8gJiMzOTtcXDAmIzM5OyBmb3VuZCBpbiBcJiMzNDtzaXplXCYjMzQ7IG51bWJlciBvZiBieXRlcyAqL1xuMTI0MDpcdFx0aWYgKHNyYyA9PSBlbmQpXG4xMjQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI0MjpcdFxuMTI0MzpcdFx0cmV0dXJuIHNyYyAtIG9yaWdfc3JjO1xuMTI0NDpcdH1cbjEyNDU6XHRFWFBPUlRfU1lNQk9MX0dQTChicGZfb2JqX25hbWVfY3B5KTtcbjEyNDY6XHRcbjEyNDc6XHRpbnQgbWFwX2NoZWNrX25vX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuMTI0ODpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbjEyNDk6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLFxuMTI1MDpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcbjEyNTE6XHR7XG4xMjUyOlx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuMTI1MzpcdH1cbjEyNTQ6XHRcbjEyNTU6XHRzdGF0aWMgaW50IG1hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXG4xMjU2Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9rZXlfaWQsIHUzMiBidGZfdmFsdWVfaWQpXG4xMjU3Olx0e1xuMTI1ODpcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgKnZhbHVlX3R5cGU7XG4xMjU5Olx0XHR1MzIga2V5X3NpemUsIHZhbHVlX3NpemU7XG4xMjYwOlx0XHRpbnQgcmV0ID0gMDtcbjEyNjE6XHRcbjEyNjI6XHRcdC8qIFNvbWUgbWFwcyBhbGxvdyBrZXkgdG8gYmUgdW5zcGVjaWZpZWQuICovXG4xMjYzOlx0XHRpZiAoYnRmX2tleV9pZCkge1xuMTI2NDpcdFx0XHRrZXlfdHlwZSA9IGJ0Zl90eXBlX2lkX3NpemUoYnRmLCBcdTAwMjZidGZfa2V5X2lkLCBcdTAwMjZrZXlfc2l6ZSk7XG4xMjY1Olx0XHRcdGlmICgha2V5X3R5cGUgfHwga2V5X3NpemUgIT0gbWFwLVx1MDAzZWtleV9zaXplKVxuMTI2NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI2NzpcdFx0fSBlbHNlIHtcbjEyNjg6XHRcdFx0a2V5X3R5cGUgPSBidGZfdHlwZV9ieV9pZChidGYsIDApO1xuMTI2OTpcdFx0XHRpZiAoIW1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2NoZWNrX2J0ZilcbjEyNzA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNzE6XHRcdH1cbjEyNzI6XHRcbjEyNzM6XHRcdHZhbHVlX3R5cGUgPSBidGZfdHlwZV9pZF9zaXplKGJ0ZiwgXHUwMDI2YnRmX3ZhbHVlX2lkLCBcdTAwMjZ2YWx1ZV9zaXplKTtcbjEyNzQ6XHRcdGlmICghdmFsdWVfdHlwZSB8fCB2YWx1ZV9zaXplICE9IG1hcC1cdTAwM2V2YWx1ZV9zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTI5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29uZ2VzdGlvbiBDb250cm9sIE5hbWUgUmV0cmlldmFsKioKCk9rYXksIHNvIGBicGZfb2JqX25hbWVfY3B5YCBkb2VzIGEgYG1lbXNldGAgYmVmb3JlIGNvcHlpbmcsIHdoaWNoIG1lYW5zIHRoZSBkZXN0aW5hdGlvbiBhcnJheSwgc3BlY2lmaWNhbGx5IGB0Y3BfY2EtJmd0O25hbWVgLCBpcyBhbHdheXMgZnVsbHkgemVyb2VkIG91dCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGlzIGVuc3VyZXMgY29tcGxldGUgaW5pdGlhbGl6YXRpb24sIGluY2x1ZGluZyBwYWRkaW5nLCB1cCB0byBgVENQX0NBX05BTUVfTUFYYC4gQ29uc2VxdWVudGx5LCBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZXMgaW4gQlBGIGNvbnRleHRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkLiBCdWlsdC1pbiBjb25nZXN0aW9uIGNvbnRyb2xzIGFyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCwgd2hpY2ggaW5oZXJlbnRseSBtZWFucyB0aGV5IGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gVGhlcmVmb3JlLCB0aGUgYGNhX29wcy0mZ3Q7bmFtZWAgZmllbGQgaXMgY29uc2lzdGVudGx5IGluaXRpYWxpemVkLgoKSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBsb2NhbCB2YXJpYWJsZSBgY2FfbmFtZWAgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YC4gVGhlIGFycmF5IGBjYV9uYW1lYCBpcyBpbml0aWFsaXplZCB1c2luZyBge31gIHdoaWNoIHplcm9lcyBvdXQgdGhlIGVudGlyZSBhcnJheS4gVGhlbiwgYG1lbWNweWAgY29waWVzIGBUQ1BfQ0FfTkFNRV9NQVhgIGJ5dGVzIGZyb20gYGNhX29wcy0mZ3Q7bmFtZWAgaW50byBgY2FfbmFtZWAuICBCZWNhdXNlIGBjYV9vcHMtJmd0O25hbWVgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBgY2FfbmFtZWAgYWxzbyBiZWNvbWVzIGZ1bGx5IGluaXRpYWxpemVkLiAgRmluYWxseSwgYGNvcHlfdG9fc29ja3B0cmAgdHJhbnNmZXJzIGEgbnVtYmVyIG9mIGJ5dGVzIG5vIG1vcmUgdGhhbiB0aGUgc2l6ZSBvZiBgY2FfbmFtZWAgdG8gdXNlciBzcGFjZSwgZWxpbWluYXRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLgoKQnV0LCB3aGF0IGlmIGBjYV9vcHNgIGlzIE5VTEw/ICBJbiBgZG9fdGNwX2dldHNvY2tvcHRgLCBgY2Ffb3BzYCBpcyBvYnRhaW5lZCBmcm9tIGBpY3NrLSZndDtpY3NrX2NhX29wc2AuIENhbiBgaWNzay0mZ3Q7aWNza19jYV9vcHNgIGV2ZXIgYmUgTlVMTD8gIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBpdCYjMzk7cyBwb3NzaWJsZTogIGBpY3NrLSZndDtpY3NrX2NhX29wc2AgaXMgc2V0IHRvIE5VTEwgaW4gYG1wdGNwX2NhX3Jlc2V0YC4gSWYgYGNhX29wc2AgKmlzKiBOVUxMLCB0aGUgYG1lbWNweWAgd291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIhIFRoZSBwb3RlbnRpYWwgZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGlzIHRoZXJlLCB0aGVuLiBUaGlzIGlzIGhhcHBlbmluZyBpbiBNUFRDUCBjb2RlLCBidXQgYGRvX3RjcF9nZXRzb2Nrb3B0YCBpcyBmb3IgVENQIHNvY2tldHMuICBDb3VsZCBNUFRDUCBjb2RlIGNhbGwgYGRvX3RjcF9nZXRzb2Nrb3B0YD8gV2UgbmVlZCB0byB2ZXJpZnkgaWYgYGNhX29wc2AgY2FuIGJlIE5VTEwgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdGNwX2dldHNvY2tvcHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9NDk5PV9fcG9sbF90IHRjcF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuaW5jbHVkZS9uZXQvdGNwLmgtNTAwLVx0XHQgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpO1xuaW5jbHVkZS9uZXQvdGNwLmg6NTAxOmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbmluY2x1ZGUvbmV0L3RjcC5oLTUwMi1cdFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU2MDA9c3RhdGljIGludCBzb2xfdGNwX3NvY2tvcHRfY29uZ2VzdGlvbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKm9wdHZhbCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01NjEzLVx0XHRvcHR2YWxbLS0oKm9wdGxlbildID0gJiMzOTtcXDAmIzM5Oztcbm5ldC9jb3JlL2ZpbHRlci5jOjU2MTQ6XHRcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgVENQX0NPTkdFU1RJT04sXG5uZXQvY29yZS9maWx0ZXIuYy01NjE1LVx0XHRcdFx0XHQgS0VSTkVMX1NPQ0tQVFIob3B0dmFsKSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01NjUzPXN0YXRpYyBpbnQgc29sX3RjcF9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTcwMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjU3MDI6XHRcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgb3B0bmFtZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MDMtXHRcdFx0XHRcdCBLRVJORUxfU09DS1BUUihvcHR2YWwpLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0MTA9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtNDQ4MS1cbm5ldC9pcHY0L3RjcC5jOjQ0ODI6aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxubmV0L2lwdjQvdGNwLmMtNDQ4My1cdFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4tLVxubmV0L2lwdjQvdGNwLmM9NDg1Nz1ib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLCBpbnQgb3B0bmFtZSlcbm5ldC9pcHY0L3RjcC5jLTQ4NTgte1xubmV0L2lwdjQvdGNwLmM6NDg1OTpcdC8qIFRDUCBkb190Y3BfZ2V0c29ja29wdCBoYXMgb3B0aW1pemVkIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25cbm5ldC9pcHY0L3RjcC5jLTQ4NjAtXHQgKiB0byBhdm9pZCBleHRyYSBzb2NrZXQgbG9jayBmb3IgVENQX1pFUk9DT1BZX1JFQ0VJVkUuXG4tLVxubmV0L2lwdjQvdGNwLmM9NDg2OD1pbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NzYtXHRcdFx0XHRcdFx0XHRcdG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcC5jOjQ4Nzc6XHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBVU0VSX1NPQ0tQVFIob3B0dmFsKSxcbm5ldC9pcHY0L3RjcC5jLTQ4NzgtXHRcdFx0XHQgVVNFUl9TT0NLUFRSKG9wdGxlbikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzM3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiBgY2Ffb3BzYCBpcyBOVUxMLCB0aGVuIHRyeWluZyB0byBhY2Nlc3MgYGNhX29wcy0mZ3Q7bmFtZWAgd2lsbCB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGFua2Z1bGx5LCBJJiMzOTttIHByZXR0eSBzdXJlIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBvb3BzIG1lY2hhbmlzbXMgd2lsbCBjYXRjaCB0aGF0IGtpbmQgb2YgdGhpbmcuIEl0JiMzOTtzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZCDigJMgaXQmIzM5O3Mgbm90IGEgc2VjdXJpdHkgbGVhaywgbGlrZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHdvdWxkIGJlLiBTdGlsbCwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGtlcm5lbCBpc24mIzM5O3QgY3Jhc2hpbmchCgpIYW5nIG9uIGEgc2Vjb25k4oCmIERvZXMgYGRvX3RjcF9nZXRzb2Nrb3B0YCAqaXRzZWxmKiBkbyBhIG51bGwgY2hlY2sgb24gYGNhX29wc2A/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcXVlc3Rpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcG90ZW50aWFsIGRlcmVmZXJlbmNlIGlzIGV2ZW4gcG9zc2libGUuIEJlc3QgdG8gYmUgc3VyZSBhbmQgdHJhY2UgdGhlIGNhbGxzLiBBbHJpZ2h0LCBJJiMzOTtsbCBnbyBjaGVjayBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ1NzcgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YC4gVGhhdCBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU2MDpcdFx0XHRpbnQgYXR0cjtcbjQ1NjE6XHRcbjQ1NjI6XHRcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG40NTYzOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40NTY0Olx0XG40NTY1Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ1NjY6XHRcdFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMpO1xuNDU2NzpcdFx0XHRpZiAoY2Ffb3BzIFx1MDAyNlx1MDAyNiBjYV9vcHMtXHUwMDNlZ2V0X2luZm8pXG40NTY4Olx0XHRcdFx0c3ogPSBjYV9vcHMtXHUwMDNlZ2V0X2luZm8oc2ssIH4wVSwgXHUwMDI2YXR0ciwgXHUwMDI2aW5mbyk7XG40NTY5Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDU3MDpcdFxuNDU3MTpcdFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc3opO1xuNDU3MjpcdFx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXG40NTczOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40NTc0Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBcdTAwMjZpbmZvLCBsZW4pKVxuNDU3NTpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuNDU3NjpcdFx0XHRyZXR1cm4gMDtcbjQ1Nzc6XHRcdH1cbjQ1Nzg6XHRcdGNhc2UgVENQX1FVSUNLQUNLOlxuNDU3OTpcdFx0XHR2YWwgPSAhaW5ldF9jc2tfaW5fcGluZ3BvbmdfbW9kZShzayk7XG40NTgwOlx0XHRcdGJyZWFrO1xuNDU4MTpcdFxuNDU4MjpcdFx0Y2FzZSBUQ1BfQ09OR0VTVElPTjoge1xuNDU4MzpcdFx0XHRjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O1xuNDU4NDpcdFxuNDU4NTpcdFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbjQ1ODY6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjQ1ODc6XHRcdFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFRDUF9DQV9OQU1FX01BWCk7XG40NTg4Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcbjQ1ODk6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjQ1OTA6XHRcbjQ1OTE6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuNDU5MjpcdFx0XHRjYV9vcHMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcyk7XG40NTkzOlx0XHRcdG1lbWNweShjYV9uYW1lLCBjYV9vcHMtXHUwMDNlbmFtZSwgc2l6ZW9mKGNhX25hbWUpKTtcbjQ1OTQ6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG40NTk1Olx0XG40NTk2Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBjYV9uYW1lLCBsZW4pKVxuNDU5NzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuNDU5ODpcdFx0XHRyZXR1cm4gMDtcbjQ1OTk6XHRcdH1cbjQ2MDA6XHRcdGNhc2UgVENQX1VMUDpcbjQ2MDE6XHRcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG40NjAyOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40NjAzOlx0XHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfVUxQX05BTUVfTUFYKTtcbjQ2MDQ6XHRcdFx0aWYgKCFpY3NrLVx1MDAzZWljc2tfdWxwX29wcykge1xuNDYwNTpcdFx0XHRcdGxlbiA9IDA7XG40NjA2Olx0XHRcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxuNDYwNzpcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40NjA4Olx0XHRcdFx0cmV0dXJuIDA7XG40NjA5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1NjAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIENvbmdlc3Rpb24gQ29udHJvbCBOYW1lIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYFRDUF9DT05HRVNUSU9OYCAobGluZSA0NTkzKSB3aGVyZSBgY2Ffb3BzYCBpc24mIzM5O3QgZXhwbGljaXRseSBjaGVja2VkIGJlZm9yZSB0aGUgYG1lbWNweWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgY29uY2VybmluZyBiZWNhdXNlIGlmIGBjYV9vcHNgIGlzIE5VTEwsIGl0JiMzOTtsbCBjcmFzaC4gSG93ZXZlciwgYWZ0ZXIgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCB0aGlzIHNlZW1zIHVubGlrZWx5IGZvciBhIHN0YW5kYXJkIFRDUCBzb2NrZXQgYXMgYGljc2stJmd0O2ljc2tfY2Ffb3BzYCBpcyBpbml0aWFsaXplZCBpbiBgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sYC4gVGhlIG9ubHkgbGlrZWx5IHNjZW5hcmlvIHdoZXJlIGBjYV9vcHNgIGNvdWxkIGJlIE5VTEwgaXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIE1QVENQLiBFdmVuIHRoZW4sIHRoZSBOVUxMIGRlcmVmZXJlbmNlIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4KCk15IGZvY3VzIHF1aWNrbHkgc2hpZnRzIHRvIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgY2hhciBjYV9uYW1lW1RDUF9DQV9OQU1FX01BWF0gPSB7fTtgLiBUaGlzIGlzIGV4cGxpY2l0bHkgemVyb2VkLCByaWdodCBmcm9tIHRoZSBzdGFydC4gV2UgY29weSBgY2Ffb3BzLSZndDtuYW1lYCBpbnRvIGBjYV9uYW1lYCwgYW5kIHRoZW4gYGNhX25hbWVgIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHaXZlbiB0aGUgemVybyBpbml0aWFsaXphdGlvbiBvZiBgY2FfbmFtZWAgYW5kIHRoZSBmdWxseSBpbml0aWFsaXplZCBgY2Ffb3BzLSZndDtuYW1lYCwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrLgoKU28sIHRoZSBvcmlnaW5hbCBjb2RlIGNvcGllZCBkaXJlY3RseSBmcm9tIGBpY3NrLSZndDtpY3NrX2NhX29wcy0mZ3Q7bmFtZWAgdG8gdXNlciBzcGFjZS4gVGhlIG5ldyBjb2RlIGlzIGNvcHlpbmcgdG8gYSBsb2NhbCB6ZXJvLWluaXRpYWxpemVkIGJ1ZmZlciwgcHJvdGVjdGVkIGJ5IGFuIFJDVSBsb2NrLCBiZWZvcmUgY29weWluZyB0byB1c2VyIHNwYWNlLiBUaGlzIGNoYW5nZSBmaXhlcyBhIGRhdGEgcmFjZSBieSBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBvbGQgYGNhX29wc2Agd2FzIGZyZWVkLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgbWVtY3B5YCBkb2VzbiYjMzk7dCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGNvZGUgY29waWVzIGBzaXplb2YoY2FfbmFtZSlgLCB3aGljaCBpcyBgVENQX0NBX05BTUVfTUFYYC4gTm93LCBgY2Ffb3BzLSZndDtuYW1lYCBpcyBkZWNsYXJlZCBhcyBgY2hhciBuYW1lW1RDUF9DQV9OQU1FX01BWF07YCB3aXRoaW4gdGhlIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYC4gU28sIGBzaXplb2YoY2Ffb3BzLSZndDtuYW1lKWAgaXMgKmFsc28qIGV4YWN0bHkgYFRDUF9DQV9OQU1FX01BWGAuIFRoZSBgbWVtY3B5YCByZWFkcyBleGFjdGx5IHRoZSByaWdodCBhbW91bnQgb2YgbWVtb3J5IGZyb20gYW4gYWxsb2NhdGVkIGJ1ZmZlci4KCk9rYXksIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBwb3RlbnRpYWwgdGhhdCBgY2Ffb3BzLSZndDtuYW1lYCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEJhc2VkIG9uIHdoYXQgSSBrbm93IG9mIGJ1aWx0LWluIGNvbmdlc3Rpb24gY29udHJvbHMgdGhleSBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHRoZXJlZm9yZSB6ZXJvLWluaXRpYWxpemVkLiBCUEYgY29uZ2VzdGlvbiBjb250cm9scyB1c2UgYGJwZl9vYmpfbmFtZV9jcHlgIHdoaWNoIGRvZXMgYG1lbXNldChkc3QsIDAsIHNpemUpYCBiZWZvcmUgY29weWluZyB0aGUgbmFtZS4gU28sIGBjYV9vcHMtJmd0O25hbWVgIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4KCk5vdyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IFdoYXQgYWJvdXQgYSBrZXJuZWwgbW9kdWxlIHRoYXQgcmVnaXN0ZXJzIGEgY29uZ2VzdGlvbiBjb250cm9sIGFuZCAqZG9lc24mIzM5O3QqIHplcm8taW5pdGlhbGl6ZSB0aGUgYG5hbWVgIGZpZWxkPyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYHRjcF9jb25nZXN0aW9uX29wc2AgaW4gbW9kdWxlcy4gVXN1YWxseSwgbW9kdWxlcyBkZWZpbmUgdGhlbSBhcyBgc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgbXlfY2EgPSB7IC4uLiB9O2AuIFN0YXRpYyB2YXJpYWJsZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgdG8gYmUgY2VydGFpbiBpZiBhbnkgbW9kdWxlIGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgdGNwX2Nvbmdlc3Rpb25fb3BzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jLip0Y3BfY29uZ2VzdGlvbl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDMzMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBremFsbG9jLip0Y3BfY29uZ2VzdGlvbl9vcHNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGt6YWxsb2MuKnRjcF9jb25nZXN0aW9uX29wc2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3BlY2lmaWMgc2VhcmNoIHRlcm0sIHNvIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24gb2YgY29uZ2VzdGlvbiBjb250cm9sIG9iamVjdHMsIHNwZWNpZmljYWxseSB0aGUgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0dXJlLiBUaGUgYGt6YWxsb2NgIGZ1bmN0aW9uIGhpbnRzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB6ZXJvZWQgbWVtb3J5LiBLbm93aW5nIHRoZSBrZXJuZWwsIHRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3IGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0sIG9yIHBvdGVudGlhbGx5IG1vZGlmaWNhdGlvbnMgdG8gYW4gZXhpc3Rpbmcgb25lLCB3aGVyZSBhIGNsZWFuIGFsbG9jYXRpb24gaXMgY3J1Y2lhbC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGluaXRpYWxpemF0aW9uIGJ1Z3MgbHVya2luZyB3aXRoaW4gdGhvc2UgYWxsb2NhdGlvbiBwYXRocy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGUgYWxsb2NhdGlvbnMgYXJlIGRvaW5nLiBUaGlzIGxvb2tzIGludGVyZXN0aW5nLi4uIGxldCYjMzk7cyBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKnRjcF9jb25nZXN0aW9uX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTc1CgkJCQkJCQlvdXRwdXQ6IDI0NwoJCQkJCQkJdGhvdWdodHM6IDE3NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25nZXN0aW9uIENvbnRyb2wgQ29kZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGJlY2F1c2Ugb2YgdGhlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZS4gTXkgZmlyc3QgdGhvdWdodCB3YXMgdGhhdCB0aGUgY29kZSBtaWdodCBiZSBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkgYnkgY29weWluZyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG5hbWUgKGBjYV9vcHMtJmd0O25hbWVgKSB0byBhIGxvY2FsIGJ1ZmZlciBhbmQgdGhlbiB0byB1c2VyIHNwYWNlLgoKSSBjb25zaWRlcmVkIHRoYXQgaWYgdGhlIGBjYV9vcHMtJmd0O25hbWVgIGZpZWxkIGl0c2VsZiB3YXNuJiMzOTt0IGluaXRpYWxpemVkLCB3ZSBjb3VsZCBoYXZlIGEgcHJvYmxlbS4gSG93ZXZlciwgSSBxdWlja2x5IHJlYWxpemVkIHRoYXQgYWxsIGB0Y3BfY29uZ2VzdGlvbl9vcHNgIGFyZSBlaXRoZXIgc3RhdGljYWxseSBpbml0aWFsaXplZCBhdCBjb21waWxlIHRpbWUgKHRodXMgemVyb2VkKSBvciBhbGxvY2F0ZWQgdmlhIEJQRiwgd2hpY2ggaGFzIGJlZW4gdmVyaWZpZWQgdG8gemVyby1pbml0aWFsaXplIHRoZSBuYW1lIGZpZWxkLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBjYV9vcHMtJmd0O25hbWVgLgoKRXZlbiBpZiB0aGUgbmFtZSAqd2FzKiB1bmluaXRpYWxpemVkLCB0aGUgb3JpZ2luYWwgY29kZSBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlciBzcGFjZSwgc28gdGhlIHBhdGNoIGlzbiYjMzk7dCAqaW50cm9kdWNpbmcqIGEgbmV3IGlzc3VlIGJ1dCBpcyBjaGFuZ2luZyB0aGUgbWV0aG9kLiBUaGUgb3JpZ2luYWwgY29kZSBhbHJlYWR5IHVzZWQgYGxlbmAsIHVwIHRvIGBUQ1BfQ0FfTkFNRV9NQVhgLiBOb3csIHdlIGNvcHkgYHNpemVvZihjYV9uYW1lKWAgKHNhbWUgc2l6ZSBhcyBgVENQX0NBX05BTUVfTUFYYCkgZnJvbSBgY2Ffb3BzLSZndDtuYW1lYCB0byBhIGxvY2FsIGJ1ZmZlciBjYWxsZWQgYGNhX25hbWVgLCBhbmQgdGhlbiBjb3B5IGEgcG9ydGlvbiBvZiB0aGF0IGJ1ZmZlciB1cCB0byBgbGVuYCBieXRlcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29kZSByZWFkcyBleGFjdGx5IGBUQ1BfQ0FfTkFNRV9NQVhgIGZyb20gYGNhX29wcy0mZ3Q7bmFtZWAsIGJ1dCBvbmx5IHdyaXRlcyBgbGVuYCBieXRlcyB0byB1c2VyIHNwYWNlLiBFdmVuIGlmIHRoZXJlIGFyZSB1bmluaXRpYWxpemVkIGJ5dGVzIGF0IHRoZSBlbmQsIHRoZSBpc3N1ZSBpcyBub3QgdHJpZ2dlcmVkLgoKVGhlbiwgSSB0aG91Z2h0IGFib3V0IEtNU0FOLCBidXQgaWYgdGhlIGBjYV9vcHMtJmd0O25hbWVgICpkaWQqIGNvbnRhaW4gdW5pbml0aWFsaXplZCBieXRlcywgdGhlIGBtZW1jcHlgIHRvIGBjYV9uYW1lYCAqd291bGQqIHRyaWdnZXIgYSBLTVNBTiB3YXJuaW5nLiBCdXQgd2Uga25vdyBpdCYjMzk7cyBpbml0aWFsaXplZCwgc28gdGhlIEtNU0FOIGNvbmNlcm4gaXMgdW5mb3VuZGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgb3RoZXIgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBxdWlja2x5IHNlZSB0aGVzZSBjaGFuZ2VzIGFyZSBhYm91dCBhZGRpbmcgUkNVIGxvY2tpbmcgYW5kIGBSRUFEX09OQ0VgIG9yIGBXUklURV9PTkNFYCB0byBgaWNzay0mZ3Q7aWNza19jYV9vcHNgLiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCiogICBJbiBgZG9fdGNwX2dldHNvY2tvcHRgLCB3ZSBub3cgaGF2ZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYFJFQURfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcylgLCB3aGljaCBhZGRyZXNzZXMgZGF0YSByYWNlcy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4KKiAgIEluIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAsIGBXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBjYSlgIGlzIHVzZWQuCiogICBTYW1lIHRoaW5nIGZvciB0aGUgRENUQ1AgaW5pdGlhbGl6YXRpb24uIFdlIHNlZSBgV1JJVEVfT05DRShpbmV0X2NzayhzayktJmd0O2ljc2tfY2Ffb3BzLCAmYW1wO2RjdGNwX3Jlbm8pYC4KKiAgIFNpbWlsYXIgY2hhbmdlcyBpbiBgdGNwX2NhX29wZW5yZXFfY2hpbGRgIGFuZCBgdGNwX291dHB1dC5jYC4gQWdhaW4sIGp1c3QgYFdSSVRFX09OQ0VgLgoqICAgRmluYWxseSwgd2Ugc2VlIGBXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBOVUxMKWAgaW4gYG1wdGNwX2NhX3Jlc2V0YC4KCioqQ29uY2x1c2lvbioqCgpUaGUgcGF0Y2ggZm9jdXNlcyBvbiBmaXhpbmcgZGF0YSByYWNlcyBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFyb3VuZCB0aGUgYGljc2stJmd0O2ljc2tfY2Ffb3BzYCBwb2ludGVyLiBJbiBgZG9fdGNwX2dldHNvY2tvcHRgLCBpdCBjb3BpZXMgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBuYW1lIHRvIGEgbG9jYWwgYnVmZmVyIGBjYV9uYW1lYCB1bmRlciBSQ1UgbG9jayBiZWZvcmUgc2VuZGluZyBpdCB0byB1c2VyIHNwYWNlLiBUaGUgbG9jYWwgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2Ugb2YgdGhlIGNvcHksIGBjYV9vcHMtJmd0O25hbWVgLCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgd2l0aGluIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgYW5kIGlzIGFsc28gZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCwgZWl0aGVyIHN0YXRpY2FsbHkgb3IgYnkgQlBGJiMzOTtzIHplcm8taW5pdGlhbGl6YXRpb24uIFRoZXJlJiMzOTtzIG5vIHdheSB0aGlzIHBhdGNoIGlzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGxlYWtpbmcgaXQgdG8gdXNlciBzcGFjZS4KClRoZSBpc3N1ZSBhZGRyZXNzZWQgaGVyZSBpcyBkYXRhIHJhY2VzLCB3aGljaCBjYW4gbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIEtBU0FOIGFuZCBLQ1NBTiBhcmUgd2VsbCBzdWl0ZWQgdG8gZGV0ZWN0aW5nIHRob3NlIGlzc3VlcywgdGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSBmb3IgdGhpcyBzcGVjaWZpYyBwYXRjaC4gV2UgY2FuIHRoZXJlZm9yZSBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLiBUaGUgS01TQU4gcmVhc29uaW5nIGlzIHRoYXQgZHVlIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGNhX29wcy0mZ3Q7bmFtZWAgdGhlIEtNU0FOIGZ1enppbmcgd291bGQgbm90IHRyaWdnZXIgYW55IGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBkYXRhIHJhY2VzIG9uIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zLCBhbmQgYnkgY29weWluZyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG5hbWUgdG8gYSBsb2NhbCBidWZmZXIgdW5kZXIgUkNVIGxvY2sgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLiBUaGUgbG9jYWwgYnVmZmVyIGBjYV9uYW1lYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2ApLiBUaGUgc291cmNlIGJ1ZmZlciBgY2Ffb3BzLVx1MDAzZW5hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciwgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBicGZfb2JqX25hbWVfY3B5YCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgb24gYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXHUwMDNlbmFtZWAgaXMgYSBmaXhlZC1zaXplIGFycmF5IGluIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgd2hpY2ggaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCBvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSB2aWEgYGJwZl9vYmpfbmFtZV9jcHlgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgZGF0YSByYWNlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjA1LjAzMDYxOTY2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDA2NTA5MjY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUQ1BfQ09OR19EQ1RDUFwiLFxuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb190Y3BfZ2V0c29ja29wdFwiLFxuICAgIFwidGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xcIixcbiAgICBcInRjcF9jYV9vcGVucmVxX2NoaWxkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBvbiBgaWNzay1cXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXFx1MDAzZW5hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciwgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBicGZfb2JqX25hbWVfY3B5YCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXFx1MDAzZWljc2tfY2Ffb3BzYCBpbiBUQ1AgYW5kIE1QVENQIHNvY2tldHMuIEl0IGFkZHMgYFJFQURfT05DRWAsIGBXUklURV9PTkNFYCwgYW5kIFJDVSByZWFkIGxvY2tzIGFyb3VuZCB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBhY2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtaXNzZWQgcmFjZSBjb25kaXRpb25zIHJlbWFpbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6MDUuMDMwNjI1NDg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njg2OTk4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YTA5N2Y1YjQ1YzVkNjllZGU5NjYyMzVjODc2NWEzOTQwMWQxYzczXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjUxOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcXG5pbmRleCBiNDIzN2QwZTk5NGQ2Li5jNDU3NzZkM2VkOTBiIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwLmNcXG5AQCAtNDU2Miw5ICs0NTYyLDExIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuLVxcdFxcdGNhX29wcyA9IGljc2stXFx1MDAzZWljc2tfY2Ffb3BzO1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX2NhX29wcyk7XFxuIFxcdFxcdGlmIChjYV9vcHMgXFx1MDAyNlxcdTAwMjYgY2Ffb3BzLVxcdTAwM2VnZXRfaW5mbylcXG4gXFx0XFx0XFx0c3ogPSBjYV9vcHMtXFx1MDAzZWdldF9pbmZvKHNrLCB+MFUsIFxcdTAwMjZhdHRyLCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0XFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHN6KTtcXG4gXFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcXG5AQCAtNDU3NywxNiArNDU3OSwyNCBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuIFxcdFxcdHZhbCA9ICFpbmV0X2Nza19pbl9waW5ncG9uZ19tb2RlKHNrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRjYXNlIFRDUF9DT05HRVNUSU9OOlxcbitcXHRjYXNlIFRDUF9DT05HRVNUSU9OOiB7XFxuK1xcdFxcdGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307XFxuK1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTtcXG4gXFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBpY3NrLVxcdTAwM2VpY3NrX2NhX29wcy1cXHUwMDNlbmFtZSwgbGVuKSlcXG4rXFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXFx1MDAzZWljc2tfY2Ffb3BzKTtcXG4rXFx0XFx0bWVtY3B5KGNhX25hbWUsIGNhX29wcy1cXHUwMDNlbmFtZSwgc2l6ZW9mKGNhX25hbWUpKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgY2FfbmFtZSwgbGVuKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXG4rXFx0fVxcbiBcXHRjYXNlIFRDUF9VTFA6XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jb25nLmMgYi9uZXQvaXB2NC90Y3BfY29uZy5jXFxuaW5kZXggZTlmNmM3N2UwNjMxNi4uOGU4M2VmODFmYzE4NyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2NvbmcuY1xcbkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdGNhID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cXHUwMDNlaXB2NC50Y3BfY29uZ2VzdGlvbl9jb250cm9sKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFicGZfdHJ5X21vZHVsZV9nZXQoY2EsIGNhLVxcdTAwM2Vvd25lcikpKVxcbiBcXHRcXHRjYSA9IFxcdTAwMjZ0Y3BfcmVubztcXG4tXFx0aWNzay1cXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcXG4rXFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2NhX29wcywgY2EpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdG1lbXNldChpY3NrLVxcdTAwM2VpY3NrX2NhX3ByaXYsIDAsIHNpemVvZihpY3NrLVxcdTAwM2VpY3NrX2NhX3ByaXYpKTtcXG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbiBcXG4gXFx0dGNwX2NsZWFudXBfY29uZ2VzdGlvbl9jb250cm9sKHNrKTtcXG4tXFx0aWNzay1cXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcXG4rXFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2NhX29wcywgY2EpO1xcbiBcXHRpY3NrLVxcdTAwM2VpY3NrX2NhX3NldHNvY2tvcHQgPSAxO1xcbiBcXHRtZW1zZXQoaWNzay1cXHUwMDNlaWNza19jYV9wcml2LCAwLCBzaXplb2YoaWNzay1cXHUwMDNlaWNza19jYV9wcml2KSk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGN0Y3AuYyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jXFxuaW5kZXggMjc0ZTYyOGU3Y2Y4Ni4uOTlmNjhjMjk5MmQwZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jXFxuQEAgLTExMSw3ICsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0LyogTm8gRUNOIHN1cHBvcnQ/IEZhbGwgYmFjayB0byBSZW5vLiBBbHNvIG5lZWQgdG8gY2xlYXJcXG4gXFx0ICogRUNUIGZyb20gc2sgc2luY2UgaXQgaXMgc2V0IGR1cmluZyAzV0hTIGZvciBEQ1RDUC5cXG4gXFx0ICovXFxuLVxcdGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19jYV9vcHMgPSBcXHUwMDI2ZGN0Y3BfcmVubztcXG4rXFx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfY2Ffb3BzLCBcXHUwMDI2ZGN0Y3BfcmVubyk7XFxuIFxcdElORVRfRUNOX2RvbnR4bWl0KHNrKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXFxuaW5kZXggZjNmYTBiMThlZGEwNi4uMGRkZmQ1YWY2ZTU4ZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcXG5AQCAtNTA3LDcgKzUwNyw3IEBAIHZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIFxcdFxcdGNhID0gdGNwX2NhX2ZpbmRfa2V5KGNhX2tleSk7XFxuIFxcdFxcdGlmIChsaWtlbHkoY2EgXFx1MDAyNlxcdTAwMjYgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cXHUwMDNlb3duZXIpKSkge1xcbiBcXHRcXHRcXHRpY3NrLVxcdTAwM2VpY3NrX2NhX2RzdF9sb2NrZWQgPSB0Y3BfY2FfZHN0X2xvY2tlZChkc3QpO1xcbi1cXHRcXHRcXHRpY3NrLVxcdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKGljc2stXFx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XFxuIFxcdFxcdFxcdGNhX2dvdF9kc3QgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG5pbmRleCBmMjcwOWQ1ODVlZGJkLi43NDcyN2I3ZWI0NDZlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xcbkBAIC00MDkyLDcgKzQwOTIsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIFxcdGlmIChsaWtlbHkoY2EgXFx1MDAyNlxcdTAwMjYgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cXHUwMDNlb3duZXIpKSkge1xcbiBcXHRcXHRicGZfbW9kdWxlX3B1dChpY3NrLVxcdTAwM2VpY3NrX2NhX29wcywgaWNzay1cXHUwMDNlaWNza19jYV9vcHMtXFx1MDAzZW93bmVyKTtcXG4gXFx0XFx0aWNzay1cXHUwMDNlaWNza19jYV9kc3RfbG9ja2VkID0gdGNwX2NhX2RzdF9sb2NrZWQoZHN0KTtcXG4tXFx0XFx0aWNzay1cXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcXG4rXFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2NhX29wcywgY2EpO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li4wMDZkZTM5ZTgxNjU2IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzIxOCw3ICszMjE4LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2FfcmVzZXQoc3RydWN0IHNvY2sgKnNrKVxcbiBcXG4gXFx0Lyogbm8gbmVlZCB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvcHMsIHRoZSBuYW1lIHdpbGwgc3VmZmljZSAqL1xcbiBcXHR0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc2spO1xcbi1cXHRpY3NrLVxcdTAwM2VpY3NrX2NhX29wcyA9IE5VTEw7XFxuK1xcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19jYV9vcHMsIE5VTEwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjA1LjgwMDM5NzIwOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY3MDA3NjUwNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9DT05HX0RDVENQXCIsXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbFwiLFxuICAgIFwidGNwX2NhX29wZW5yZXFfY2hpbGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gYWNjZXNzaW5nIGBpY3NrLVxcdTAwM2VpY3NrX2NhX29wc2AgaW4gVENQIGFuZCBNUFRDUCBzb2NrZXRzLiBJdCBhZGRzIGBSRUFEX09OQ0VgLCBgV1JJVEVfT05DRWAsIGFuZCBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgYWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWlzc2VkIHJhY2UgY29uZGl0aW9ucyByZW1haW4uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhMDk3ZjViNDVjNWQ2OWVkZTk2NjIzNWM4NzY1YTM5NDAxZDFjNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNzo1MTowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmM0NTc3NmQzZWQ5MGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NTYyLDkgKzQ1NjIsMTEgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdFx0Y2Ffb3BzID0gaWNzay1cdTAwM2VpY3NrX2NhX29wcztcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRjYV9vcHMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcyk7XG4gXHRcdGlmIChjYV9vcHMgXHUwMDI2XHUwMDI2IGNhX29wcy1cdTAwM2VnZXRfaW5mbylcbiBcdFx0XHRzeiA9IGNhX29wcy1cdTAwM2VnZXRfaW5mbyhzaywgfjBVLCBcdTAwMjZhdHRyLCBcdTAwMjZpbmZvKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzeik7XG4gXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcbkBAIC00NTc3LDE2ICs0NTc5LDI0IEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0dmFsID0gIWluZXRfY3NrX2luX3Bpbmdwb25nX21vZGUoc2spO1xuIFx0XHRicmVhaztcbiBcbi1cdGNhc2UgVENQX0NPTkdFU1RJT046XG4rXHRjYXNlIFRDUF9DT05HRVNUSU9OOiB7XG4rXHRcdGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307XG4rXG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTtcbiBcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgaWNzay1cdTAwM2VpY3NrX2NhX29wcy1cdTAwM2VuYW1lLCBsZW4pKVxuK1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzKTtcbitcdFx0bWVtY3B5KGNhX25hbWUsIGNhX29wcy1cdTAwM2VuYW1lLCBzaXplb2YoY2FfbmFtZSkpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdHJldHVybiAwO1xuLVxuK1x0fVxuIFx0Y2FzZSBUQ1BfVUxQOlxuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuY1xuaW5kZXggZTlmNmM3N2UwNjMxNi4uOGU4M2VmODFmYzE4NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9jb25nLmNcbisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmNcbkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spXG4gXHRjYSA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNlaXB2NC50Y3BfY29uZ2VzdGlvbl9jb250cm9sKTtcbiBcdGlmICh1bmxpa2VseSghYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cdTAwM2Vvd25lcikpKVxuIFx0XHRjYSA9IFx1MDAyNnRjcF9yZW5vO1xuLVx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuK1x0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayxcbiBcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiBcbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4rXHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMsIGNhKTtcbiBcdGljc2stXHUwMDNlaWNza19jYV9zZXRzb2Nrb3B0ID0gMTtcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2RjdGNwLmMgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xuaW5kZXggMjc0ZTYyOGU3Y2Y4Ni4uOTlmNjhjMjk5MmQwZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9kY3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xuQEAgLTExMSw3ICsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaylcbiBcdC8qIE5vIEVDTiBzdXBwb3J0PyBGYWxsIGJhY2sgdG8gUmVuby4gQWxzbyBuZWVkIHRvIGNsZWFyXG4gXHQgKiBFQ1QgZnJvbSBzayBzaW5jZSBpdCBpcyBzZXQgZHVyaW5nIDNXSFMgZm9yIERDVENQLlxuIFx0ICovXG4tXHRpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMgPSBcdTAwMjZkY3RjcF9yZW5vO1xuK1x0V1JJVEVfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMsIFx1MDAyNmRjdGNwX3Jlbm8pO1xuIFx0SU5FVF9FQ05fZG9udHhtaXQoc2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbmluZGV4IGYzZmEwYjE4ZWRhMDYuLjBkZGZkNWFmNmU1OGYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xuQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFx0XHRjYSA9IHRjcF9jYV9maW5kX2tleShjYV9rZXkpO1xuIFx0XHRpZiAobGlrZWx5KGNhIFx1MDAyNlx1MDAyNiBicGZfdHJ5X21vZHVsZV9nZXQoY2EsIGNhLVx1MDAzZW93bmVyKSkpIHtcbiBcdFx0XHRpY3NrLVx1MDAzZWljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7XG4tXHRcdFx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuK1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpO1xuIFx0XHRcdGNhX2dvdF9kc3QgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggZjI3MDlkNTg1ZWRiZC4uNzQ3MjdiN2ViNDQ2ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtNDA5Miw3ICs0MDkyLDcgQEAgc3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFx0aWYgKGxpa2VseShjYSBcdTAwMjZcdTAwMjYgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cdTAwM2Vvd25lcikpKSB7XG4gXHRcdGJwZl9tb2R1bGVfcHV0KGljc2stXHUwMDNlaWNza19jYV9vcHMsIGljc2stXHUwMDNlaWNza19jYV9vcHMtXHUwMDNlb3duZXIpO1xuIFx0XHRpY3NrLVx1MDAzZWljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7XG4tXHRcdGljc2stXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcbitcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggYjQ3NGQwMzYyMGE3NS4uMDA2ZGUzOWU4MTY1NiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTMyMTgsNyArMzIxOCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NhX3Jlc2V0KHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdC8qIG5vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3BzLCB0aGUgbmFtZSB3aWxsIHN1ZmZpY2UgKi9cbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gTlVMTDtcbitcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjA1LjgwMDQwMDExOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDc5ODM5NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRDUC9NUFRDUCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBjbGVhbmluZyB1cCB0aGUgYWNjZXNzIHRvIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBpbiB0aGUgVENQIGFuZCBNUFRDUCBjb2RlLiBUaGV5J3JlIHRocm93aW5nIGluIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgdG8gYXZvaWQgZGF0YSByYWNlcywgd2hpY2ggaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIFRoZXkndmUgYWxzbyBhZGRlZCBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCB0aGUgcmVhZHMgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YCB3aGVuIGRlYWxpbmcgd2l0aCBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AgYW5kIGNhbGxpbmcgYGNhX29wcy1cdTAwM2VnZXRfaW5mb2Agb3IgY29weWluZyB0aGUgbmFtZS4gU2VlbXMgbGlrZSBhIHNvbGlkIG1vdmUsIGFkZHJlc3NpbmcgdGhvc2UgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcmVhZCB2dWxuZXJhYmlsaXRpZXMgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YCDigJMgdGhpbmsgYFRDUF9DQ19JTkZPYCBhbmQgYFRDUF9DT05HRVNUSU9OYCBvcHRpb25zLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUgVENQIGxvZ2ljLCBlc3BlY2lhbGx5IGluIGBkb190Y3BfZ2V0c29ja29wdGAsIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAsIGFuZCBzbyBvbi4gV2UgbmVlZCB0byBleHBsb3JlIHRoaXMuXG5cbkxldCdzIHByaW9yaXRpemUgc29tZSBmdW5jdGlvbnMgZm9yIGZ1enppbmc6IGBkb190Y3BfZ2V0c29ja29wdGAsIGRlZmluaXRlbHkuIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAgaXMgYW5vdGhlciBzb2xpZCBjYW5kaWRhdGUuIGB0Y3BfcmVpbml0X2Nvbmdlc3Rpb25fY29udHJvbGAsIGBkY3RjcF9pbml0YCwgYHRjcF9jYV9kc3RfaW5pdGAgYW5kIGBtcHRjcF9jYV9yZXNldGAsIHRob3NlIGFyZSBzdGF0aWMsIHNvIHRoZXkgbWlnaHQgYmUgdHJpY2tpZXIgdG8gZ2V0IHRvIGRpcmVjdGx5LCBidXQgc3RpbGwgcmVsZXZhbnQuIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAgaXMgbm9uLXN0YXRpYywgc28gd2Ugc2hvdWxkIGNvbnNpZGVyIHRoYXQgYXMgd2VsbC5cblxuT2theSwgY29uZmlybWluZyBgZG9fdGNwX2dldHNvY2tvcHRgIGlzIGluZGVlZCBub24tc3RhdGljLCBpbiBgbmV0L2lwdjQvdGNwLmNgLiBBbmQgYHRjcF9jYV9vcGVucmVxX2NoaWxkYCwgdGhhdCBvbmUncyBpbiBgbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jYC4gYHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sYCwgdGhhdCBvbmUgaXMgaW4gYG5ldC9pcHY0L3RjcF9jb25nLmNgLlxuXG5MYXN0bHksIGxldCdzIG5haWwgZG93biB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBXZSdsbCBuZWVkIGBORVRfSVBWNGAgKG9yIGp1c3QgYElORVRgKSBmb3Igc3VyZS4gYFRDUF9DT05HX0RDVENQYCBpZiB3ZSB3YW50IHRvIGhpdCBgZGN0Y3BfaW5pdGAsIGFuZCBgTVBUQ1BgIGlmIHdlJ3JlIHRhcmdldGluZyBgbXB0Y3BfY2FfcmVzZXRgLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBmdXp6ZXIncyBlbnZpcm9ubWVudC4gT2theSwgbGV0J3MgdmVyaWZ5IHRob3NlIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODA3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6MTYuMjgwMjQ0ODcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjI2MDc5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRDUF9DT05HX0RDVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NjE2PWNvbmZpZyBUQ1BfQ09OR19JTExJTk9JU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy02MjctXFxubmV0L2lwdjQvS2NvbmZpZzo2Mjg6Y29uZmlnIFRDUF9DT05HX0RDVENQXFxubmV0L2lwdjQvS2NvbmZpZy02MjktXFx0dHJpc3RhdGUgXFxcIkRhdGFDZW50ZXIgVENQIChEQ1RDUClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjE5LjQ0Mjg2MzUxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NzQ1ODgwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTVBUQ1AgQ29uZmlndXJhdGlvbiBDaGVjayAtIFRpbWUgdG8gRHJpbGwgRG93bioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgTVBUQ1AgY29uZmlndXJhdGlvbi4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IG5ldHdvcmsgdHJvdWJsZXNob290aW5nIG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG11bHRpcGF0aCBUQ1AuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgTVBUQ1Agc2V0dXAuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBwZXJoYXBzIHRoZSBzdWJmbG93IGxpbWl0cywgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0gaW4gdXNlIChob3BlZnVsbHkgc29tZXRoaW5nIHNlbnNpYmxlIGxpa2UgQkJSIG9yIFRDUC1DQSksIGFuZCB0aGUgb3ZlcmFsbCBNUFRDUCBwb2xpY3kuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLCB0aG91Z2gsIGVuc3VyaW5nIHRoZSBrZXJuZWwgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgY29uZmlndXJlZCBmb3IgTVBUQ1Agb3BlcmF0aW9uLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZXN0YWJsaXNoZWQgZmxvd3MgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG9idmlvdXMgbWlzY29uZmlndXJhdGlvbnMgb3IgdW5leHBlY3RlZCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIHRoZSBib3R0bGVuZWNrLiBVbHRpbWF0ZWx5LCBJJ2xsIGJlIHN0cml2aW5nIHRvIGRldGVybWluZSBpZiBNUFRDUCBpcyBldmVuICplbmFibGVkKiBhcyBpdCBzaG91bGQgYmUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6MjguMzE3NDU2Mzc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDAzNDEzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjMzLjAxNzgwOTAzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTA2MDU1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgZG9fdGNwX2dldHNvY2tvcHRgIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGBkb190Y3BfZ2V0c29ja29wdGAuIElzIGl0IHNvbWV0aGluZyB0aGF0J3MgaW50ZW5kZWQgdG8gYmUgYWNjZXNzZWQgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGNvbnRleHQsIG9yIGlzIGl0IGludGVybmFsIHRvIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGZ1bmN0aW9uPyBJbiBvdGhlciB3b3JkcywgaXMgaXQgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB0byB1c2VyLXNwYWNlLCBvciBpcyBpdCBub24tc3RhdGljLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBpdCBoYXMgYnJvYWRlciB2aXNpYmlsaXR5IHdpdGhpbiBpdHMgZGVmaW5lZCB0cmFuc2xhdGlvbiB1bml0LiBJIHdhbnQgdG8ga25vdyB3aGVyZSBhbmQgaG93IEkgY2FuIGFjY2VzcyB0aGlzIHJvdXRpbmUuIFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgd2lsbCBhZmZlY3QgaG93IEkgYXBwcm9hY2ggd2hhdGV2ZXIgSSdtIGRvaW5nLiBJZiBpdCdzIGV4cG9ydGVkLCB0aGUgaW1wbGljYXRpb25zIGFyZSB2ZXJ5IGRpZmZlcmVudCB0aGFuIGlmIGl0J3Mgc3RhdGljIGFuZCBsaW1pdGVkIHRvIGEgc3BlY2lmaWMgLmMgZmlsZS4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGNydWNpYWwgZm9yIG15IG92ZXJhbGwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjM2Ljc2ODQxNzc2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwNzY2Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBkb190Y3BfZ2V0c29ja29wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD00OTk9X19wb2xsX3QgdGNwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvdGNwLmgtNTAwLVxcdFxcdCAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6NTAxOmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG5pbmNsdWRlL25ldC90Y3AuaC01MDItXFx0XFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDQxMD1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dldF90aW1lc3RhbXBpbmdfb3B0X3N0YXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ0ODEtXFxubmV0L2lwdjQvdGNwLmM6NDQ4MjppbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxubmV0L2lwdjQvdGNwLmMtNDQ4My1cXHRcXHQgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6NDEuMjI5MTkwMzkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwMzg4OTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgKipcblxuT2theSwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IG9yIHJlLWVzdGFibGlzaG1lbnQgcGF0aC4gTXkgaW5pdGlhbCBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiB3aGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gQXJlIHdlIGxvb2tpbmcgYXQgaW5pdGlhbCBTWU4/IEEgcmV0cmFuc21pc3Npb24gYWZ0ZXIgYSBsb3NzIGV2ZW50PyBPciBwZXJoYXBzIGEgY29ubmVjdGlvbiByZXNldCB3aGVyZSB3ZSdyZSBzdGFydGluZyBmcmVzaD8gVGhlIGZ1bmN0aW9uJ3MgbmFtZSBpbXBsaWVzIHdlJ3JlIGFzc2lnbmluZyAob3IgcG90ZW50aWFsbHkgKnJlKi1hc3NpZ25pbmcpIGEgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIGV4aXN0aW5nIHNvY2tldCBvciBhIG5ldyBvbmUsIGFzIHRoZSBsb2dpYyB3aWxsIGRpZmZlci5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byByZW1lbWJlciB0aGUgdmFyaW91cyBwbGFjZXMgdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBjYWxsZWQgZnJvbS4gSXMgaXQgY2FsbGVkIGZyb20gdGhlIHNvY2tldCBjcmVhdGlvbiBwYXRoLCBvciBmcm9tIHRoZSBjb25uZWN0aW9uIGFjY2VwdGFuY2UgcGF0aD8gQXJlIHRoZXJlIGRpZmZlcmVudCBwYXRocyBmb3IgaW5pdGlhbCBjb25uZWN0aW9ucyB2ZXJzdXMgY29ubmVjdGlvbnMgd2hlcmUgd2UgYXJlIGhhbmRsaW5nIGEgbG9zcyBldmVudD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbi4gYHNrYCAoc29ja2V0IHN0cnVjdHVyZSkgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZvbHZlZCwgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCBvYmplY3QsIHBlcmhhcHMgYSBwcm90b2NvbC1zcGVjaWZpYyBzdHJ1Y3R1cmUsIHRvIHRlbGwgdXMgd2hpY2ggYWxnb3JpdGhtIGlzIGFwcHJvcHJpYXRlLlxuXG5XZSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGNoZWNrcyB0aGF0IGFyZSBiZWluZyBkb25lIHRvIGVuc3VyZSB0aGUgc2VsZWN0ZWQgYWxnb3JpdGhtIGlzIHZhbGlkIGZvciB0aGUgbmV0d29yayBuYW1lc3BhY2UgKGUuZy4gaWYgY2VydGFpbiBhbGdvcml0aG1zIGFyZSBkaXNhYmxlZCBvciBibGFja2xpc3RlZCkuIFdoYXQncyB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtIGlmIHRoZSBkZXNpcmVkIGFsZ29yaXRobSBpc24ndCBhdmFpbGFibGU/IElzIHRoZXJlIGEgZGVmYXVsdCBhbGdvcml0aG0/IEFsc28sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgbG9naWMgYXJvdW5kIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBvdmVycmlkZXMuIElzIHRoZXJlIGEgd2F5IGZvciBhcHBsaWNhdGlvbnMgKG9yIGV2ZW4gdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yKSB0byBkaWN0YXRlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtPyBUaGlzIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGdpdmVuIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgYWN0dWFsIGFzc2lnbm1lbnQgcHJvY2VzczogaG93IHRoZSBzZWxlY3RlZCBhbGdvcml0aG0gaXMgYWN0dWFsbHkgbGlua2VkIHRvIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgdG8gdGhlIGBpbmV0X2Nvbm5lY3Rpb25fc29ja2Agc3RydWN0dXJlIChvciBpdHMgZXF1aXZhbGVudHMpIG9yIHBvc3NpYmx5IG1hbmlwdWxhdGlvbiBvZiBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyB3aGVyZSBJJ2xsIHByb2JhYmx5IGZpbmQgcG9pbnRlcnMgdG8gdGhlIGFjdHVhbCBjb25nZXN0aW9uIGNvbnRyb2wgc3RhdGUgbWFjaGluZS4gQW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIG9yIGxvY2tpbmcgdGhhdCBtaWdodCBiZSBpbnZvbHZlZCBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseSwgZXNwZWNpYWxseSBpZiBtdWx0aXBsZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBtaWdodCBiZSBhY2Nlc3NpbmcgdGhpcyBmdW5jdGlvbi4gT3ZlcmFsbCwgaXQgaXMgZ29pbmcgdG8gYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBsZXQncyBsb29rIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTg5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6NDguNzMzMDgyODA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDEwMDIyOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9MTM5Mz1pbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMTM5NC1cXG5pbmNsdWRlL25ldC90Y3AuaDoxMzk1OnZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0xMzk2LXZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfY29uZy5jPTE5OT1jaGFyICp0Y3BfY2FfZ2V0X25hbWVfYnlfa2V5KHUzMiBrZXksIGNoYXIgKmJ1ZmZlcilcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE1LS8qIEFzc2lnbiBjaG9pY2Ugb2YgY29uZ2VzdGlvbiBjb250cm9sLiAqL1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjE2OnZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6NTMuMTQzMTE0MTc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDIzNDk1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgdGNwX2NhX29wZW5yZXFfY2hpbGRgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBpcyByYWNpbmcuIFRoaXMgbmFtZSBzY3JlYW1zIFwiY2hpbGQgY29ubmVjdGlvblwiIGFuZCBcIm9wZW4gcmVxdWVzdCxcIiB3aGljaCBsaWtlbHkgbWVhbnMgaXQncyBpbnZvbHZlZCBpbiBoYW5kbGluZyBuZXcgVENQIGNvbm5lY3Rpb25zIGluaXRpYXRlZCBmcm9tIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIElzIHRoaXMgcGFydCBvZiB0aGUgU1lOLUFDSyBoYW5kbGluZywgb3IgaXMgaXQgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgZWRnZSBjYXNlP1xuXG5JIG5lZWQgdG8gc2VlIGlmIHRoaXMgaXMgdGllZCBpbnRvIGEgc3BlY2lmaWMgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSwgb3IgaWYgaXQgaXMgYSBtb3JlIGdlbmVyYWwgZnVuY3Rpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2suIFRoZSBuYW1lICpzdWdnZXN0cyogaXQgaXMgY29uZ2VzdGlvbiBjb250cm9sIHJlbGF0ZWQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGhvb2tzIG9yIGNhbGwtb3V0cyB0byBzcGVjaWZpYyBjb25nZXN0aW9uIGNvbnRyb2wgaW1wbGVtZW50YXRpb25zIHdpdGhpbiB0aGUgY29kZS5cblxuTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBwcm9jZXNzIG9mIGhhbmRsaW5nIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3QsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBhbmQgbWF5YmUgZXZlbiBzZXR0aW5nIHVwIGluaXRpYWwgY29uZ2VzdGlvbiBjb250cm9sIHBhcmFtZXRlcnMgKmJlZm9yZSogdGhlIGNvbm5lY3Rpb24gaXMgZnVsbHkgZXN0YWJsaXNoZWQuIEl0J3MgYWxtb3N0IGxpa2UgYSBzdGFnaW5nIGFyZWEgZm9yIGEgbmV3IHNvY2tldCBiZWZvcmUgdGhlIHRocmVlLXdheSBoYW5kc2hha2UgaXMgY29tcGxldGUuIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgdG91Y2hpbmcsIHBhcnRpY3VsYXJseSBhbnl0aGluZyByZWxhdGVkIHRvIHNvY2tldHMsIFRDUCBjb250cm9sIGJsb2NrcyAobGlrZSBgdGNwY2JgKSwgYW5kIGxpa2VseSBhbnkgY29uZ2VzdGlvbiBjb250cm9sIHN0YXRlLiBBbHNvLCBJIG5lZWQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTElTVEVOIHF1ZXVlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGFueSBsb2NraW5nIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBhcmlzZSB3aXRoIG11bHRpcGxlIGNvbmN1cnJlbnQgY29ubmVjdGlvbiBhdHRlbXB0cy4gVGhhdCdzIGFsd2F5cyBhIHBvaW50IG9mIHZ1bG5lcmFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MzEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo1MTo1OC4wNDU0NjcyMDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTk4MTQ2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0Y3BfY2Ffb3BlbnJlcV9jaGlsZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD01NTc9c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC01NTktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvdGNwLmg6NTYwOnZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTU2MS1zdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQ3MD1zdGF0aWMgdm9pZCB0Y3BfZWNuX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5Ni1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDk3OnZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUyOjAyLjY0NTI4ODIxNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTY1OTgxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aXRoaW4gdGhlIFRDUCBhbmQgTVBUQ1Agc3RhY2ssIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaG93IHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BlcmF0aW9ucyAoYGljc2stXHUwMDNlaWNza19jYV9vcHNgKSBhcmUgaGFuZGxlZC4gVGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgdGhlIGp1ZGljaW91cyB1c2Ugb2YgYFJFQURfT05DRWAsIGBXUklURV9PTkNFYCBtZW1vcnkgYmFycmllcnMgYW5kIFJDVSByZWFkIGxvY2tzLiBFc3NlbnRpYWxseSwgdGhleSdyZSBib2xzdGVyaW5nIHRoZSBhdG9taWMgYWNjZXNzIGd1YXJhbnRlZXMgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGRhdGEgc3RydWN0dXJlLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgd2hlcmUgdGhlIGZpeCBpcyBpbXBsZW1lbnRlZCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAgYW5kIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAsIHRoYXQgZGVmaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBvcGVyYXRpb25zIGJlaW5nIGFkZHJlc3NlZC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgbG93LWxldmVsIHJldHJpZXZhbCBvZiBjb25nZXN0aW9uIGNvbnRyb2wgb3B0aW9ucywgd2hpY2ggaXMgYSBzZW5zaXRpdmUgYXJlYS4gSSBzZWUgdGhleSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGNhc2VzIHdpdGggYFRDUF9DT05HX0RDVENQYCBhbmQgYE1QVENQYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlaXIgbW9yZSBjb21wbGV4IGNvbmdlc3Rpb24gY29udHJvbCBsb2dpYyBhbmQgY29uY3VycmVuY3kgbW9kZWxzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIFRoZSBpbXBhY3QgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCdzIGZpeGluZyB0aGUgd2F5IHRoZXNlIGxvdy1sZXZlbCBmdW5jdGlvbnMgYXJlIGFjY2Vzc2luZyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG9wZXJhdGlvbnMsIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkLiBTbywgSSBuZWVkIHRvIHByaW9yaXRpemUgcmlnb3JvdXMgZnV6emluZyBhbmQgdGVzdGluZyB3aXRoIGFuIGVtcGhhc2lzIG9uIGNvbmN1cnJlbnQgYWNjZXNzLiBJIHdhbnQgdG8gbG9vayBmb3IgYW55IG92ZXJsb29rZWQgcmFjZXMsIGFuZCByZWdyZXNzaW9uIHRlc3RpbmcgdG8gZW5zdXJlIG5vIG5ldyBwcm9ibGVtcyB3ZXJlIGluYWR2ZXJ0ZW50bHkgaW50cm9kdWNlZC4gVGhpcyBpcyB0aGUga2luZCBvZiBmaXggdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzY5LCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo1MjoxMi42MTEyODM3OTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY3NTg3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9DT05HX0RDVENQXCIsXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbFwiLFxuICAgIFwidGNwX2NhX29wZW5yZXFfY2hpbGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gYWNjZXNzaW5nIGBpY3NrLVxcdTAwM2VpY3NrX2NhX29wc2AgaW4gVENQIGFuZCBNUFRDUCBzb2NrZXRzLiBJdCBhZGRzIGBSRUFEX09OQ0VgLCBgV1JJVEVfT05DRWAsIGFuZCBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgYWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWlzc2VkIHJhY2UgY29uZGl0aW9ucyByZW1haW4uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0NPTkdfRENUQ1BcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fdGNwX2dldHNvY2tvcHRcIixcbiAgICBcInRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sXCIsXG4gICAgXCJ0Y3BfY2Ffb3BlbnJlcV9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXFx1MDAzZWljc2tfY2Ffb3BzYCBpbiBUQ1AgYW5kIE1QVENQIHNvY2tldHMuIEl0IGFkZHMgYFJFQURfT05DRWAsIGBXUklURV9PTkNFYCwgYW5kIFJDVSByZWFkIGxvY2tzIGFyb3VuZCB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBhY2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtaXNzZWQgcmFjZSBjb25kaXRpb25zIHJlbWFpbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTI6MTIuODA4MDU1NDUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIyODc2MzA3MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo1MjoxMi44MDkwNTkxMzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODMyMjg2NTk1OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBvbiBgaWNzay1cXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXFx1MDAzZW5hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciwgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBicGZfb2JqX25hbWVfY3B5YCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhMDk3ZjViNDVjNWQ2OWVkZTk2NjIzNWM4NzY1YTM5NDAxZDFjNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNzo1MTowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmM0NTc3NmQzZWQ5MGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NTYyLDkgKzQ1NjIsMTEgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdFx0Y2Ffb3BzID0gaWNzay1cdTAwM2VpY3NrX2NhX29wcztcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRjYV9vcHMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcyk7XG4gXHRcdGlmIChjYV9vcHMgXHUwMDI2XHUwMDI2IGNhX29wcy1cdTAwM2VnZXRfaW5mbylcbiBcdFx0XHRzeiA9IGNhX29wcy1cdTAwM2VnZXRfaW5mbyhzaywgfjBVLCBcdTAwMjZhdHRyLCBcdTAwMjZpbmZvKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzeik7XG4gXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcbkBAIC00NTc3LDE2ICs0NTc5LDI0IEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0dmFsID0gIWluZXRfY3NrX2luX3Bpbmdwb25nX21vZGUoc2spO1xuIFx0XHRicmVhaztcbiBcbi1cdGNhc2UgVENQX0NPTkdFU1RJT046XG4rXHRjYXNlIFRDUF9DT05HRVNUSU9OOiB7XG4rXHRcdGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307XG4rXG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTtcbiBcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgaWNzay1cdTAwM2VpY3NrX2NhX29wcy1cdTAwM2VuYW1lLCBsZW4pKVxuK1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzKTtcbitcdFx0bWVtY3B5KGNhX25hbWUsIGNhX29wcy1cdTAwM2VuYW1lLCBzaXplb2YoY2FfbmFtZSkpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdHJldHVybiAwO1xuLVxuK1x0fVxuIFx0Y2FzZSBUQ1BfVUxQOlxuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuY1xuaW5kZXggZTlmNmM3N2UwNjMxNi4uOGU4M2VmODFmYzE4NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9jb25nLmNcbisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmNcbkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spXG4gXHRjYSA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNlaXB2NC50Y3BfY29uZ2VzdGlvbl9jb250cm9sKTtcbiBcdGlmICh1bmxpa2VseSghYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cdTAwM2Vvd25lcikpKVxuIFx0XHRjYSA9IFx1MDAyNnRjcF9yZW5vO1xuLVx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuK1x0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayxcbiBcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiBcbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4rXHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMsIGNhKTtcbiBcdGljc2stXHUwMDNlaWNza19jYV9zZXRzb2Nrb3B0ID0gMTtcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2RjdGNwLmMgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xuaW5kZXggMjc0ZTYyOGU3Y2Y4Ni4uOTlmNjhjMjk5MmQwZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9kY3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xuQEAgLTExMSw3ICsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaylcbiBcdC8qIE5vIEVDTiBzdXBwb3J0PyBGYWxsIGJhY2sgdG8gUmVuby4gQWxzbyBuZWVkIHRvIGNsZWFyXG4gXHQgKiBFQ1QgZnJvbSBzayBzaW5jZSBpdCBpcyBzZXQgZHVyaW5nIDNXSFMgZm9yIERDVENQLlxuIFx0ICovXG4tXHRpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMgPSBcdTAwMjZkY3RjcF9yZW5vO1xuK1x0V1JJVEVfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMsIFx1MDAyNmRjdGNwX3Jlbm8pO1xuIFx0SU5FVF9FQ05fZG9udHhtaXQoc2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbmluZGV4IGYzZmEwYjE4ZWRhMDYuLjBkZGZkNWFmNmU1OGYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xuQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFx0XHRjYSA9IHRjcF9jYV9maW5kX2tleShjYV9rZXkpO1xuIFx0XHRpZiAobGlrZWx5KGNhIFx1MDAyNlx1MDAyNiBicGZfdHJ5X21vZHVsZV9nZXQoY2EsIGNhLVx1MDAzZW93bmVyKSkpIHtcbiBcdFx0XHRpY3NrLVx1MDAzZWljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7XG4tXHRcdFx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuK1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpO1xuIFx0XHRcdGNhX2dvdF9kc3QgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggZjI3MDlkNTg1ZWRiZC4uNzQ3MjdiN2ViNDQ2ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtNDA5Miw3ICs0MDkyLDcgQEAgc3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFx0aWYgKGxpa2VseShjYSBcdTAwMjZcdTAwMjYgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cdTAwM2Vvd25lcikpKSB7XG4gXHRcdGJwZl9tb2R1bGVfcHV0KGljc2stXHUwMDNlaWNza19jYV9vcHMsIGljc2stXHUwMDNlaWNza19jYV9vcHMtXHUwMDNlb3duZXIpO1xuIFx0XHRpY3NrLVx1MDAzZWljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7XG4tXHRcdGljc2stXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcbitcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggYjQ3NGQwMzYyMGE3NS4uMDA2ZGUzOWU4MTY1NiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTMyMTgsNyArMzIxOCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NhX3Jlc2V0KHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdC8qIG5vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3BzLCB0aGUgbmFtZSB3aWxsIHN1ZmZpY2UgKi9cbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gTlVMTDtcbitcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUyOjEyLjgwOTA2MTY1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYxODQ5NTE3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIG91dHNldCwgSSBzZWUgdGhpcyBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIFRDUC9JUCBzdGFjazogYG5ldC9pcHY0L3RjcC5jYCwgYG5ldC9pcHY0L3RjcF9jb25nLmNgLCBgbmV0L2lwdjQvdGNwX2RjdGNwLmNgLCBgbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jYCwgYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2AsIGFuZCBldmVuIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AuIFRoYXQgaW5kaWNhdGVzIHRoaXMgaXMgYSByYXRoZXIgYnJvYWQgY2hhbmdlLCBsaWtlbHkgYWZmZWN0aW5nIGhvdyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbSBpcyBoYW5kbGVkIGF0IHNldmVyYWwgbGF5ZXJzLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgcmFjZSBmaXhlcywgc3BlY2lmaWNhbGx5IGludm9sdmluZyBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gTWFrZXMgc2Vuc2U7IHRoYXQncyBhIGNsYXNzaWMgc2lnbmFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgYFRDUF9DT05HRVNUSU9OYCBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGhlcmUgaGFzIG15IGltbWVkaWF0ZSBhdHRlbnRpb246XG5cbmBgYGNcblx0Y2FzZSBUQ1BfQ09OR0VTVElPTjoge1xuXHRcdGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307XG5cblx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcblx0XHRcdHJldHVybiAtRUZBVUxUO1xuXHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfQ0FfTkFNRV9NQVgpO1xuXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcblx0XHRcdHJldHVybiAtRUZBVUxUO1xuXG5cdFx0cmN1X3JlYWRfbG9jaygpO1xuXHRcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzKTtcblx0XHRtZW1jcHkoY2FfbmFtZSwgY2Ffb3BzLVx1MDAzZW5hbWUsIHNpemVvZihjYV9uYW1lKSk7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cblx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgY2FfbmFtZSwgbGVuKSlcblx0XHRcdHJldHVybiAtRUZBVUxUO1xuXHRcdHJldHVybiAwO1xuXHR9XG5gYGBcblxuVGhlIGludGVudCBpcyBjbGVhcjogcmV0cmlldmUgdGhlIGN1cnJlbnQgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSdzIG5hbWUgYW5kIHJldHVybiBpdCB0byB0aGUgdXNlci4gVGhlIGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2AgaW5pdGlhbGl6YXRpb24gaXMgZ29vZDsgemVyb2luZyB0aGUgYnVmZmVyIGlzIGEgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLiBUaGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGBSRUFEX09OQ0VgIGFyZSB0aGVyZSwgYXMgZXhwZWN0ZWQsIGZvciBzYWZldHkuIFRoZW4sIHRoZSBjcml0aWNhbCBzdGVwOiBgbWVtY3B5KGNhX25hbWUsIGNhX29wcy1cdTAwM2VuYW1lLCBzaXplb2YoY2FfbmFtZSkpO2AuIFRoYXQncyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSBhIHBvdGVudGlhbCBwcm9ibGVtLiBgc2l6ZW9mKGNhX25hbWUpYCBpcyBgVENQX0NBX05BTUVfTUFYYCwgYnV0IGlzIGBjYV9vcHMtXHUwMDNlbmFtZWAgKmd1YXJhbnRlZWQqIHRvIGJlIHRoYXQgc2l6ZT8gSWYgYGNhX29wcy1cdTAwM2VuYW1lYCBpcyBhIHZhcmlhYmxlIGxlbmd0aCBzdHJpbmcgb3IgYSBzaG9ydGVyIGZpeGVkLXNpemUgYXJyYXksIHRoaXMgYG1lbWNweWAgY291bGQgcmVhZCBwYXN0IHRoZSBib3VuZHMgb2YgYGNhX29wcy1cdTAwM2VuYW1lYCwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyLXJlYWQuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdHlwZSBgY2Ffb3BzLVx1MDAzZW5hbWVgIGFjdHVhbGx5IGlzLiBUaW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjU3OjA4Ljk5NDAxNzQ4OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3Njc4NzU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTEzMDY9c3RydWN0IHJhdGVfc2FtcGxlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTEzMjQtXFxuaW5jbHVkZS9uZXQvdGNwLmg6MTMyNTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHtcXG5pbmNsdWRlL25ldC90Y3AuaC0xMzI2LS8qIGZhc3QgcGF0aCBmaWVsZHMgYXJlIHB1dCBmaXJzdCB0byBmaWxsIG9uZSBjYWNoZSBsaW5lICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjU3OjE0LjY3MDgxMjI5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEwMjU4Mjk5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFRDUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBUQ1AgY29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyByZXRyYW5zbWlzc2lvbiBiZWhhdmlvci4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpc24ndCBxdWl0ZSByaWdodCB3aXRoIGhvdyBpdCdzIGhhbmRsaW5nIGRlbGF5ZWQgQUNLcyBpbiB0aGlzIHBhcnRpY3VsYXIgZWRnZSBjYXNlIEknbSBkZWJ1Z2dpbmcuIFRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUg4oCTIGFuZCBJJ20gc3RhcnRpbmcgd2l0aCBgaW5jbHVkZS9uZXQvdGNwLmhgLiBNb3JlIHByZWNpc2VseSwgSSdsbCBiZSBsb29raW5nIGFyb3VuZCBsaW5lIDEzMjUuIFRoaXMgYXJlYSBvZnRlbiBkZWFscyB3aXRoIHRoZSBtb3JlIGludHJpY2F0ZSBkZXRhaWxzIG9mIFRDUCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgdGltZXIgbWFuYWdlbWVudDsgSSdtIGhvcGluZyBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGdvdmVybmluZyByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cyBvciBBQ0sgcHJvY2Vzc2luZyB0aGVyZSwgd2hpY2ggbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGlzc3VlLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIEkgY2FuIGZpbmQgbXkgYW5zd2VyIGRpcmVjdGx5LCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHN0YWNrLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6MDUuNjk2NjQ5MjA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC90Y3AuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMzI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzI1OlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMge1xcbjEzMjY6XFx0LyogZmFzdCBwYXRoIGZpZWxkcyBhcmUgcHV0IGZpcnN0IHRvIGZpbGwgb25lIGNhY2hlIGxpbmUgKi9cXG4xMzI3OlxcdFxcbjEzMjg6XFx0XFx0LyogQSBjb25nZXN0aW9uIGNvbnRyb2wgKENDKSBtdXN0IHByb3ZpZGUgb25lIG9mIGVpdGhlcjpcXG4xMzI5OlxcdFxcdCAqXFxuMTMzMDpcXHRcXHQgKiAoYSkgYSBjb25nX2F2b2lkIGZ1bmN0aW9uLCBpZiB0aGUgQ0Mgd2FudHMgdG8gdXNlIHRoZSBjb3JlIFRDUFxcbjEzMzE6XFx0XFx0ICogICAgIHN0YWNrJ3MgZGVmYXVsdCBmdW5jdGlvbmFsaXR5IHRvIGltcGxlbWVudCBhIFxcXCJjbGFzc2ljXFxcIlxcbjEzMzI6XFx0XFx0ICogICAgIChSZW5vL0NVQklDLXN0eWxlKSByZXNwb25zZSB0byBwYWNrZXQgbG9zcywgUkZDMzE2OCBFQ04sXFxuMTMzMzpcXHRcXHQgKiAgICAgaWRsZSBwZXJpb2RzLCBwYWNpbmcgcmF0ZSBjb21wdXRhdGlvbnMsIGV0Yy5cXG4xMzM0OlxcdFxcdCAqXFxuMTMzNTpcXHRcXHQgKiAoYikgYSBjb25nX2NvbnRyb2wgZnVuY3Rpb24sIGlmIHRoZSBDQyB3YW50cyBjdXN0b20gYmVoYXZpb3IgYW5kXFxuMTMzNjpcXHRcXHQgKiAgICAgIGNvbXBsZXRlIGNvbnRyb2wgb2YgYWxsIGNvbmdlc3Rpb24gY29udHJvbCBiZWhhdmlvcnMuXFxuMTMzNzpcXHRcXHQgKi9cXG4xMzM4OlxcdFxcdC8qIChhKSBcXFwiY2xhc3NpY1xcXCIgcmVzcG9uc2U6IGNhbGN1bGF0ZSBuZXcgY3duZC5cXG4xMzM5OlxcdFxcdCAqL1xcbjEzNDA6XFx0XFx0dm9pZCAoKmNvbmdfYXZvaWQpKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywgdTMyIGFja2VkKTtcXG4xMzQxOlxcdFxcdC8qIChiKSBcXFwiY3VzdG9tXFxcIiByZXNwb25zZTogY2FsbCB3aGVuIHBhY2tldHMgYXJlIGRlbGl2ZXJlZCB0byB1cGRhdGVcXG4xMzQyOlxcdFxcdCAqIGN3bmQgYW5kIHBhY2luZyByYXRlLCBhZnRlciBhbGwgdGhlIGNhX3N0YXRlIHByb2Nlc3NpbmcuXFxuMTM0MzpcXHRcXHQgKi9cXG4xMzQ0OlxcdFxcdHZvaWQgKCpjb25nX2NvbnRyb2wpKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywgaW50IGZsYWcsIGNvbnN0IHN0cnVjdCByYXRlX3NhbXBsZSAqcnMpO1xcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHQvKiByZXR1cm4gc2xvdyBzdGFydCB0aHJlc2hvbGQgKHJlcXVpcmVkKSAqL1xcbjEzNDc6XFx0XFx0dTMyICgqc3N0aHJlc2gpKHN0cnVjdCBzb2NrICpzayk7XFxuMTM0ODpcXHRcXG4xMzQ5OlxcdFxcdC8qIGNhbGwgYmVmb3JlIGNoYW5naW5nIGNhX3N0YXRlIChvcHRpb25hbCkgKi9cXG4xMzUwOlxcdFxcdHZvaWQgKCpzZXRfc3RhdGUpKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKTtcXG4xMzUxOlxcdFxcbjEzNTI6XFx0XFx0LyogY2FsbCB3aGVuIGN3bmQgZXZlbnQgb2NjdXJzIChvcHRpb25hbCkgKi9cXG4xMzUzOlxcdFxcdHZvaWQgKCpjd25kX2V2ZW50KShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gdGNwX2NhX2V2ZW50IGV2KTtcXG4xMzU0OlxcdFxcbjEzNTU6XFx0XFx0LyogY2FsbCB3aGVuIENBX0VWRU5UX1RYX1NUQVJUIGN3bmQgZXZlbnQgb2NjdXJzIChvcHRpb25hbCkgKi9cXG4xMzU2OlxcdFxcdHZvaWQgKCpjd25kX2V2ZW50X3R4X3N0YXJ0KShzdHJ1Y3Qgc29jayAqc2spO1xcbjEzNTc6XFx0XFxuMTM1ODpcXHRcXHQvKiBjYWxsIHdoZW4gYWNrIGFycml2ZXMgKG9wdGlvbmFsKSAqL1xcbjEzNTk6XFx0XFx0dm9pZCAoKmluX2Fja19ldmVudCkoc3RydWN0IHNvY2sgKnNrLCB1MzIgZmxhZ3MpO1xcbjEzNjA6XFx0XFxuMTM2MTpcXHRcXHQvKiBob29rIGZvciBwYWNrZXQgYWNrIGFjY291bnRpbmcgKG9wdGlvbmFsKSAqL1xcbjEzNjI6XFx0XFx0dm9pZCAoKnBrdHNfYWNrZWQpKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSk7XFxuMTM2MzpcXHRcXG4xMzY0OlxcdFxcdC8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzIChvcHRpb25hbCkgKi9cXG4xMzY1OlxcdFxcdHUzMiAoKm1pbl90c29fc2Vncykoc3RydWN0IHNvY2sgKnNrKTtcXG4xMzY2OlxcdFxcbjEzNjc6XFx0XFx0LyogbmV3IHZhbHVlIG9mIGN3bmQgYWZ0ZXIgbG9zcyAocmVxdWlyZWQpICovXFxuMTM2ODpcXHRcXHR1MzIgICgqdW5kb19jd25kKShzdHJ1Y3Qgc29jayAqc2spO1xcbjEzNjk6XFx0XFx0LyogcmV0dXJucyB0aGUgbXVsdGlwbGllciB1c2VkIGluIHRjcF9zbmRidWZfZXhwYW5kIChvcHRpb25hbCkgKi9cXG4xMzcwOlxcdFxcdHUzMiAoKnNuZGJ1Zl9leHBhbmQpKHN0cnVjdCBzb2NrICpzayk7XFxuMTM3MTpcXHRcXG4xMzcyOlxcdC8qIGNvbnRyb2wvc2xvdyBwYXRocyBwdXQgbGFzdCAqL1xcbjEzNzM6XFx0XFx0LyogZ2V0IGluZm8gZm9yIGluZXRfZGlhZyAob3B0aW9uYWwpICovXFxuMTM3NDpcXHRcXHRzaXplX3QgKCpnZXRfaW5mbykoc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAyOjA1LjY5Njk1MTU4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE3NDIwNzIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSBwZXJzcGVjdGl2ZSBvbiBleGFtaW5pbmcgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgOlxuXG4qKkRpdmluZyBEZWVwIGludG8gVENQIENvbmdlc3Rpb24gQ29udHJvbCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYC4gSSBrbm93IHRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgZm9yIGFueSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtIHdpdGhpbiB0aGUgVENQIHN0YWNrLCBzbyBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGZpZWxkcyBhbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGRlZmluZWQgaGVyZS4gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB2YXJpb3VzIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zIGludGVyYWN0IHdpdGggdGhpcy4gU3BlY2lmaWNhbGx5LCBJIGFtIHRoaW5raW5nIGFib3V0IGhvdyBhbGdvcml0aG1zIGhhbmRsZSB0aGVpciBsb2dpYyBieSB1c2luZyB0aG9zZSBvcGVyYXRpb25zLiBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9uIHBvaW50ZXJzIGRlZmluZWQgd2l0aGluIHRoaXMgc3RydWN0PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgbWF5YmUgd2hlcmUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBkaXZlcmdlPyBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IG5ldyBhbGdvcml0aG1zIGFyZSBhYmxlIHRvIFwicGx1ZyBpblwiIHRvIHRoZSBrZXJuZWwgdXNpbmcgdGhpcyBtZWNoYW5pc20uIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyZmFjZSBwcmVjaXNlbHkgd2lsbCBiZSBjcml0aWNhbC4gSSBhbSB0aGlua2luZyBhYm91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIG9mIHRoZSBUQ1Agc3RhY2sgYW5kIGhvdyBpdCBtYW5hZ2VzIHRvIG1ha2UgdGhhdCBtb2R1bGFyLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyBpbnNpZ2h0cyB0aGUgY29kZSBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6MTUuODcxMTYyNTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3RjcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzU6XFx0XFx0XFx0XFx0ICAgdW5pb24gdGNwX2NjX2luZm8gKmluZm8pO1xcbjEzNzY6XFx0XFxuMTM3NzpcXHRcXHRjaGFyIFxcdFxcdFxcdG5hbWVbVENQX0NBX05BTUVfTUFYXTtcXG4xMzc4OlxcdFxcdHN0cnVjdCBtb2R1bGVcXHRcXHQqb3duZXI7XFxuMTM3OTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4xMzgwOlxcdFxcdHUzMlxcdFxcdFxcdGtleTtcXG4xMzgxOlxcdFxcdHUzMlxcdFxcdFxcdGZsYWdzO1xcbjEzODI6XFx0XFxuMTM4MzpcXHRcXHQvKiBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAob3B0aW9uYWwpICovXFxuMTM4NDpcXHRcXHR2b2lkICgqaW5pdCkoc3RydWN0IHNvY2sgKnNrKTtcXG4xMzg1OlxcdFxcdC8qIGNsZWFudXAgcHJpdmF0ZSBkYXRhICAob3B0aW9uYWwpICovXFxuMTM4NjpcXHRcXHR2b2lkICgqcmVsZWFzZSkoc3RydWN0IHNvY2sgKnNrKTtcXG4xMzg3OlxcdH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4xMzg4OlxcdFxcbjEzODk6XFx0aW50IHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XFxuMTM5MDpcXHR2b2lkIHRjcF91bnJlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0eXBlKTtcXG4xMzkxOlxcdGludCB0Y3BfdXBkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0eXBlLFxcbjEzOTI6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpvbGRfdHlwZSk7XFxuMTM5MzpcXHRpbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSk7XFxuMTM5NDpcXHRcXG4xMzk1OlxcdHZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKTtcXG4xMzk2OlxcdHZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XFxuMTM5NzpcXHR2b2lkIHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spO1xcbjEzOTg6XFx0aW50IHRjcF9zZXRfZGVmYXVsdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcXG4xMzk5OlxcdHZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUpO1xcbjE0MDA6XFx0dm9pZCB0Y3BfZ2V0X2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4xNDAxOlxcdHZvaWQgdGNwX2dldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICpidWYsIHNpemVfdCBsZW4pO1xcbjE0MDI6XFx0aW50IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYWxsb3dlZCk7XFxuMTQwMzpcXHRpbnQgdGNwX3NldF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGxvYWQsXFxuMTQwNDpcXHRcXHRcXHRcXHQgICAgICAgYm9vbCBjYXBfbmV0X2FkbWluKTtcXG4xNDA1OlxcdHUzMiB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrZWQpO1xcbjE0MDY6XFx0dm9pZCB0Y3BfY29uZ19hdm9pZF9haShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgdywgdTMyIGFja2VkKTtcXG4xNDA3OlxcdFxcbjE0MDg6XFx0dTMyIHRjcF9yZW5vX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzayk7XFxuMTQwOTpcXHR1MzIgdGNwX3Jlbm9fdW5kb19jd25kKHN0cnVjdCBzb2NrICpzayk7XFxuMTQxMDpcXHR2b2lkIHRjcF9yZW5vX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWQpO1xcbjE0MTE6XFx0ZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm87XFxuMTQxMjpcXHRcXG4xNDEzOlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnRjcF9jYV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpO1xcbjE0MTQ6XFx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmRfa2V5KHUzMiBrZXkpO1xcbjE0MTU6XFx0dTMyIHRjcF9jYV9nZXRfa2V5X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCAqZWNuX2NhKTtcXG4xNDE2OlxcdCNpZmRlZiBDT05GSUdfSU5FVFxcbjE0MTc6XFx0Y2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpO1xcbjE0MTg6XFx0I2Vsc2VcXG4xNDE5OlxcdHN0YXRpYyBpbmxpbmUgY2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpXFxuMTQyMDpcXHR7XFxuMTQyMTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDIyOlxcdH1cXG4xNDIzOlxcdCNlbmRpZlxcbjE0MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAyOjE1Ljg3MTQ4NzY3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzQ3MDE5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmdlc3Rpb24gQ29udHJvbCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc2VlIHRoYXQgYG5hbWVgIGlzIGRlY2xhcmVkIGFzIGEgZml4ZWQtc2l6ZSBjaGFyYWN0ZXIgYXJyYXk6IGBjaGFyIG5hbWVbVENQX0NBX05BTUVfTUFYXWAuIFJpZ2h0IGF3YXksIHRoZSBgbWVtY3B5YCBpcyBjb3B5aW5nIGBUQ1BfQ0FfTkFNRV9NQVhgIGJ5dGVzIGZyb20gYGNhX29wcy1cdTAwM2VuYW1lYCBpbnRvIGBjYV9uYW1lYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgc2luY2UgYGNhX29wcy1cdTAwM2VuYW1lYCBpcyBpdHNlbGYgYSBmaXhlZC1zaXplIGFycmF5IG9mIHRoZSBzYW1lIHNpemUsIHRoaXMgbG9va3MgbGlrZSBhIHBlcmZlY3RseSBzYWZlIGNvcHkg4oCTIG5vIHBvdGVudGlhbCBmb3IgcmVhZGluZyBvdXRzaWRlIG9mIGJvdW5kcy4gVGhhdOKAmXMgZ29vZC5cblxuQnV0IEkgbmVlZCB0byBiZSAqc3VyZSouIE15IGV4cGVydCBpbnR1aXRpb24gaXMga2lja2luZyBpbiwgYW5kIEkgc3RhcnQgd29uZGVyaW5nOiBpcyBgY2Ffb3BzLVx1MDAzZW5hbWVgICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgdGhlc2UgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0cz8gVXN1YWxseSwgdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMgdmFyaWFibGVzIGRlZmluZWQgaW4ga2VybmVsIG1vZHVsZXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhhdCdzIHRoZSBjb21tb24gY2FzZSwgYW5kIHVzdWFsbHkgbm90IHNvbWV0aGluZyB0byBzd2VhdC5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMuIEknbSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlIG1pZ2h0IGJlIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0dXJlcyB3aGVyZSBgbmFtZWAgbWlnaHQgKm5vdCogYmUgZnVsbHkgemVyb2VkLiBOb3csIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgQlBGIGxhbmRzY2FwZS4gV2l0aCBCUEYgYmVpbmcgYWJsZSB0byByZWdpc3RlciBjb25nZXN0aW9uIGNvbnRyb2xzLCB0aGF04oCZcyBhIG5ldyBhdHRhY2sgdmVjdG9yLiBJIHNob3VsZCBjaGVjayBgYnBmX3RjcF9jYWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdWNoIGR5bmFtaWMgaW5zdGFuY2VzLiBHb3R0YSBjb3ZlciBhbGwgbXkgYmFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMjoyMS42NDYxOTM5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMjIxMzU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MjE9dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wbXR1X2Nvb2tpZSAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3N5bmNfbXNzLHRjcF9jdXJyZW50X21zcyx0Y3BfLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICAgICAgICAgICBpY3NrX2NhX29wcyAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3BfdHNvX3NlZ3MsdGMuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTIzLXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgIGljc2tfYWZfb3BzICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3Bfc2VuZF9zeW5fZC4uLlxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD0yOD1zdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXQ7XFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaDoyOTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzO1xcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzAtXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPTgxPXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTk2LVxcdF9fdTMyXFx0XFx0XFx0ICBpY3NrX3BtdHVfY29va2llO1xcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg6OTc6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqaWNza19jYV9vcHM7XFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC05OC1cXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzICppY3NrX2FmX29wcztcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaD01NT1zdHJ1Y3QgbmV0bnNfaXB2NCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMjM2LVxcdGludCBzeXNjdGxfdGNwX2Zhc3RvcGVuO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaDoyMzc6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX3JjdSAgKnRjcF9jb25nZXN0aW9uX2NvbnRyb2w7XFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oLTIzOC1cXHRzdHJ1Y3QgdGNwX2Zhc3RvcGVuX2NvbnRleHQgX19yY3UgKnRjcF9mYXN0b3Blbl9jdHg7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0xMzA2PXN0cnVjdCByYXRlX3NhbXBsZSB7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0xMzI0LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjEzMjU6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMTMyNi0vKiBmYXN0IHBhdGggZmllbGRzIGFyZSBwdXQgZmlyc3QgdG8gZmlsbCBvbmUgY2FjaGUgbGluZSAqL1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMTM4OC1cXG5pbmNsdWRlL25ldC90Y3AuaDoxMzg5OmludCB0Y3BfcmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnR5cGUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjEzOTA6dm9pZCB0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MTM5MTppbnQgdGNwX3VwZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSxcXG5pbmNsdWRlL25ldC90Y3AuaDoxMzkyOlxcdFxcdFxcdFxcdCAgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqb2xkX3R5cGUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjEzOTM6aW50IHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTEzOTQtXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0xNDEwPXZvaWQgdGNwX3Jlbm9fY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZCk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MTQxMTpleHRlcm4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfcmVubztcXG5pbmNsdWRlL25ldC90Y3AuaC0xNDEyLVxcbmluY2x1ZGUvbmV0L3RjcC5oOjE0MTM6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MTQxNDpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2FfZmluZF9rZXkodTMyIGtleSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMTQxNS11MzIgdGNwX2NhX2dldF9rZXlfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLCBib29sICplY25fY2EpO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9MTcxNj1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvdGNwLmgtMTcxNy17XFxuaW5jbHVkZS9uZXQvdGNwLmg6MTcxODpcXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktXFx1MDAzZWljc2tfY2Ffb3BzO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MTktXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTE5ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjA3LS8qIFxcXCJjb25zdCB2b2lkICpcXFwiIGJlY2F1c2Ugc29tZSBzdWJzeXN0ZW0gaXNcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwODogKiBwYXNzaW5nIGEgY29uc3QgKGUuZy4gY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjA5LSAqL1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTE1Mj1icGZfdGNwX2NhX2dldF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCxcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xNjktXFx0XFx0aWYgKHByb2dfb3BzX21vZmYocHJvZykgIT1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTcwOlxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCByZWxlYXNlKSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTcxLVxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX3NldHNvY2tvcHRfbm9kZWxheV9wcm90bztcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xODAtXFx0XFx0aWYgKHByb2dfb3BzX21vZmYocHJvZykgIT1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTgxOlxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCByZWxlYXNlKSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTgyLVxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX2dldHNvY2tvcHRfcHJvdG87XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MjEwPXN0YXRpYyBpbnQgYnBmX3RjcF9jYV9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEzLXtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjE0OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnV0Y3BfY2E7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIxNTpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2E7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIxNi1cXHR1MzIgbW9mZjtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjE3LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMTg6XFx0dXRjcF9jYSA9IChjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICopdWRhdGE7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIxOTpcXHR0Y3BfY2EgPSAoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqKWtkYXRhO1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjAtXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjIyLVxcdHN3aXRjaCAobW9mZikge1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMjM6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCBmbGFncyk6XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyNC1cXHRcXHRpZiAodXRjcF9jYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+VENQX0NPTkdfTUFTSylcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjctXFx0XFx0cmV0dXJuIDE7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIyODpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMsIG5hbWUpOlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjktXFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVxcdTAwM2VuYW1lLCB1dGNwX2NhLVxcdTAwM2VuYW1lLFxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTMxMT1zdGF0aWMgdm9pZCBfX2JwZl90Y3BfY2FfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzE0LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTU6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgX19icGZfb3BzX3RjcF9jb25nZXN0aW9uX29wcyA9IHtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzE2LVxcdC5zc3RocmVzaCA9IGJwZl90Y3BfY2Ffc3N0aHJlc2gsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0yMDk9aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjEzLXtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMTQ6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxNS1cXHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmhhbmRsZXI7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NDgyPWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ1NTYtXFx0Y2FzZSBUQ1BfQ0NfSU5GTzoge1xcbm5ldC9pcHY0L3RjcC5jOjQ1NTc6XFx0XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzO1xcbm5ldC9pcHY0L3RjcC5jLTQ1NTgtXFx0XFx0dW5pb24gdGNwX2NjX2luZm8gaW5mbztcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTUxNzA9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2Fib3J0KTtcXG5uZXQvaXB2NC90Y3AuYy01MTcxLVxcbm5ldC9pcHY0L3RjcC5jOjUxNzI6ZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm87XFxubmV0L2lwdjQvdGNwLmMtNTE3My1cXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTMwPV9fYnBmX2tmdW5jIHN0YXRpYyB2b2lkIGJicl9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmMtMTE0My1cXG5uZXQvaXB2NC90Y3BfYmJyLmM6MTE0NDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX2Jici5jLTExNDUtXFx0LmZsYWdzXFx0XFx0PSBUQ1BfQ09OR19OT05fUkVTVFJJQ1RFRCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9iaWMuYz0xOTA9c3RhdGljIHZvaWQgYmljdGNwX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9iaWMuYy0yMDEtXFxubmV0L2lwdjQvdGNwX2JpYy5jOjIwMjpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBiaWN0Y3AgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfYmljLmMtMjAzLVxcdC5pbml0XFx0XFx0PSBiaWN0Y3BfaW5pdCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9jZGcuYz0zODc9c3RhdGljIHZvaWQgdGNwX2NkZ19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9jZGcuYy0zOTQtXFxubmV0L2lwdjQvdGNwX2NkZy5jOjM5NTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfY2RnIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX2NkZy5jLTM5Ni1cXHQuY29uZ19hdm9pZCA9IHRjcF9jZGdfY29uZ19hdm9pZCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjM9c3RhdGljIExJU1RfSEVBRCh0Y3BfY29uZ19saXN0KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjUtLyogU2ltcGxlIGxpbmVhciBzZWFyY2gsIGRvbid0IGV4cGVjdCBtYW55IGVudHJpZXMhICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzoyNjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2FfZmluZChjb25zdCBjaGFyICpuYW1lKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjcte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6Mjg6XFx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqZTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTI5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0zOD12b2lkIHRjcF9zZXRfY2Ffc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1OCBjYV9zdGF0ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtNDktLyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3UgbG9jayBoZWxkICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo1MDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmRfYXV0b2xvYWQoY29uc3QgY2hhciAqbmFtZSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTUxLXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjUyOlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhID0gdGNwX2NhX2ZpbmQobmFtZSk7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy01My1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtNjUtLyogU2ltcGxlIGxpbmVhciBzZWFyY2gsIG5vdCBtdWNoIGluIGhlcmUuICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo2NjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2FfZmluZF9rZXkodTMyIGtleSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTY3LXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjY4OlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmU7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy02OS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtNzctXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo3ODppbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTc5LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtOTItICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo5MzppbnQgdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTk0LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MTE2PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2wpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0xMjMtICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzoxMjQ6dm9pZCB0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0xMjUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0xMzk9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMTQ1LSAqL1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MTQ2OmludCB0Y3BfdXBkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSwgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqb2xkX2NhKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMTQ3LXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjE0ODpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpleGlzdGluZztcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTE0OS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MTgxPXUzMiB0Y3BfY2FfZ2V0X2tleV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgKmVjbl9jYSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTE4Mi17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzoxODM6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy0xODQtXFx0dTMyIGtleSA9IFRDUF9DQV9VTlNQRUM7XFxuLS1cXG5uZXQvaXB2NC90Y3BfY29uZy5jPTE5OT1jaGFyICp0Y3BfY2FfZ2V0X25hbWVfYnlfa2V5KHUzMiBrZXksIGNoYXIgKmJ1ZmZlcilcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTIwMC17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzoyMDE6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yMDItXFx0Y2hhciAqcmV0ID0gTlVMTDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjE2PXZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yMTktXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjIwOlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjIxLVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0yNTA9c3RhdGljIHZvaWQgdGNwX3JlaW5pdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjUxOlxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNTIte1xcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0yODE9aW50IHRjcF9zZXRfZGVmYXVsdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjgyLXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjI4MzpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjI4NDpcXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpwcmV2O1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjg1LVxcdGludCByZXQ7XFxuLS1cXG5uZXQvaXB2NC90Y3BfY29uZy5jPTMxOT12b2lkIHRjcF9nZXRfYXZhaWxhYmxlX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICpidWYsIHNpemVfdCBtYXhsZW4pXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0zMjAte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MzIxOlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzIyLVxcdHNpemVfdCBvZmZzID0gMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MzM3PXZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUpXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0zMzgte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MzM5OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzQwLVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0zNDg9dm9pZCB0Y3BfZ2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IG1heGxlbilcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTM0OS17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzozNTA6XFx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy0zNTEtXFx0c2l6ZV90IG9mZnMgPSAwO1xcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0zNjk9aW50IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqdmFsKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzcwLXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjM3MTpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTM3Mi1cXHRjaGFyICpzYXZlZF9jbG9uZSwgKmNsb25lLCAqbmFtZTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9NDEyPWludCB0Y3Bfc2V0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgbG9hZCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtNDE1LVxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjQxNjpcXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTQxNy1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9NTI5PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yZW5vX3VuZG9fY3duZCk7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy01MzAtXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo1MzE6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfcmVubyA9IHtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTUzMi1cXHQuZmxhZ3NcXHRcXHQ9IFRDUF9DT05HX05PTl9SRVNUUklDVEVELFxcbi0tXFxubmV0L2lwdjQvdGNwX2N1YmljLmM9NDQ5PV9fYnBmX2tmdW5jIHN0YXRpYyB2b2lkIGN1YmljdGNwX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTQ3NC1cXG5uZXQvaXB2NC90Y3BfY3ViaWMuYzo0NzU6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgY3ViaWN0Y3AgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfY3ViaWMuYy00NzYtXFx0LmluaXRcXHRcXHQ9IGN1YmljdGNwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYz03Nz1NT0RVTEVfUEFSTV9ERVNDKGRjdGNwX2FscGhhX29uX2luaXQsIFxcXCJwYXJhbWV0ZXIgZm9yIGluaXRpYWwgYWxwaGEgdmFsdWVcXFwiKTtcXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy03OC1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYzo3OTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBkY3RjcF9yZW5vO1xcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTgwLVxcbi0tXFxubmV0L2lwdjQvdGNwX2RjdGNwLmM9MjQ3PV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgZGN0Y3BfY3duZF91bmRvKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTI1NC1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYzoyNTU6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGN0Y3AgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yNTYtXFx0LmluaXRcXHRcXHQ9IGRjdGNwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yNjktXFxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MjcwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwX3Jlbm8gX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yNzEtXFx0LnNzdGhyZXNoXFx0PSB0Y3BfcmVub19zc3RocmVzaCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYz0xNTE9c3RhdGljIHUzMiBoc3RjcF9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMtMTU5LVxcbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYzoxNjA6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2hpZ2hzcGVlZCBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYy0xNjEtXFx0LmluaXRcXHRcXHQ9IGhzdGNwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaHRjcC5jPTI2OD1zdGF0aWMgdm9pZCBodGNwX3N0YXRlKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2h0Y3AuYy0yODgtXFxubmV0L2lwdjQvdGNwX2h0Y3AuYzoyODk6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgaHRjcCBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF9odGNwLmMtMjkwLVxcdC5pbml0XFx0XFx0PSBodGNwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaHlibGEuYz05MD1zdGF0aWMgdm9pZCBoeWJsYV9jb25nX2F2b2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywgdTMyIGFja2VkKVxcbi0tXFxubmV0L2lwdjQvdGNwX2h5YmxhLmMtMTY2LVxcbm5ldC9pcHY0L3RjcF9oeWJsYS5jOjE2NzpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfaHlibGEgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfaHlibGEuYy0xNjgtXFx0LmluaXRcXHRcXHQ9IGh5YmxhX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaWxsaW5vaXMuYz0zMDc9c3RhdGljIHNpemVfdCB0Y3BfaWxsaW5vaXNfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBleHQsIGludCAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbGxpbm9pcy5jLTMyOS1cXG5uZXQvaXB2NC90Y3BfaWxsaW5vaXMuYzozMzA6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2lsbGlub2lzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX2lsbGlub2lzLmMtMzMxLVxcdC5pbml0XFx0XFx0PSB0Y3BfaWxsaW5vaXNfaW5pdCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTYwNT1zdGF0aWMgdm9pZCB0Y3Bfc25kYnVmX2V4cGFuZChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MDctXFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjA4OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19jYV9vcHM7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjA5LVxcdGludCBzbmRtZW0sIHBlcl9tc3M7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbHAuYz0yNzQ9c3RhdGljIHZvaWQgdGNwX2xwX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2xwLmMtMzI5LVxcbm5ldC9pcHY0L3RjcF9scC5jOjMzMDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfbHAgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfbHAuYy0zMzEtXFx0LmluaXQgPSB0Y3BfbHBfaW5pdCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00OTc9dm9pZCB0Y3BfY2Ffb3BlbnJlcV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01MDMtXFx0aWYgKGNhX2tleSAhPSBUQ1BfQ0FfVU5TUEVDKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjUwNDpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTA1LVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmM9NDUzPXN0YXRpYyBzaXplX3QgdGNwbnZfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbnYuYy00NjktXFxubmV0L2lwdjQvdGNwX252LmM6NDcwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcG52IF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX252LmMtNDcxLVxcdC5pbml0XFx0XFx0PSB0Y3Budl9pbml0LFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIxNTY9c3RhdGljIHZvaWQgdGNwX2N3bmRfdmFsaWRhdGUoc3RydWN0IHNvY2sgKnNrLCBib29sIGlzX2N3bmRfbGltaXRlZClcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjE1Ny17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIxNTg6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzID0gaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2NhX29wcztcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjE1OS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjc2PXN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNzcte1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjc4OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19jYV9vcHM7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNzktXFx0dTMyIG1pbl90c28sIHRzb19zZWdzO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQwODE9c3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQwODMtXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MDg0OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MDg1LVxcdHUzMiBjYV9rZXkgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9DQ19BTEdPKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jPTM0PXN0YXRpYyB1MzIgdGNwX3NjYWxhYmxlX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jLTQwLVxcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jOjQxOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9zY2FsYWJsZSBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jLTQyLVxcdC5zc3RocmVzaFxcdD0gdGNwX3NjYWxhYmxlX3NzdGhyZXNoLFxcbi0tXFxubmV0L2lwdjQvdGNwX3ZlZ2FzLmM9MzEzPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF92ZWdhc19nZXRfaW5mbyk7XFxubmV0L2lwdjQvdGNwX3ZlZ2FzLmMtMzE0LVxcbm5ldC9pcHY0L3RjcF92ZWdhcy5jOjMxNTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfdmVnYXMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfdmVnYXMuYy0zMTYtXFx0LmluaXRcXHRcXHQ9IHRjcF92ZWdhc19pbml0LFxcbi0tXFxubmV0L2lwdjQvdGNwX3Zlbm8uYz0yMDA9c3RhdGljIHUzMiB0Y3BfdmVub19zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfdmVuby5jLTIxMi1cXG5uZXQvaXB2NC90Y3BfdmVuby5jOjIxMzpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfdmVubyBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF92ZW5vLmMtMjE0LVxcdC5pbml0XFx0XFx0PSB0Y3BfdmVub19pbml0LFxcbi0tXFxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmM9MjYyPXN0YXRpYyBzaXplX3QgdGNwX3dlc3R3b29kX2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfd2VzdHdvb2QuYy0yNzgtXFxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmM6Mjc5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF93ZXN0d29vZCBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF93ZXN0d29vZC5jLTI4MC1cXHQuaW5pdFxcdFxcdD0gdGNwX3dlc3R3b29kX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfeWVhaC5jPTE4OD1zdGF0aWMgdTMyIHRjcF95ZWFoX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF95ZWFoLmMtMjA4LVxcbm5ldC9pcHY0L3RjcF95ZWFoLmM6MjA5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF95ZWFoIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX3llYWguYy0yMTAtXFx0LmluaXRcXHRcXHQ9IHRjcF95ZWFoX2luaXQsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTUyND1zdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy01MjYtXFx0X191MzIgKmtlcm5fZnVuY19vZmY7XFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1Mjc6XFx0LyogZS5nLiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGluIGJwZl9wcm9nJ3MgYnRmIGZvcm1hdCAqL1xcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTI4LVxcdHZvaWQgKmRhdGE7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUzMi1cXHQgKlxcdFsuLi4gc29tZSBvdGhlciBrZXJuZWwgZmllbGRzIC4uLl1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjUzMzpcXHQgKlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGF0YTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUzNC1cXHQgKiB9XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTEwNDY9ZmluZF9zdHJ1Y3Rfb3BzX2tlcm5fdHlwZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdG5hbWVfcmF3LFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDgyLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTA4MzpcXHQvKiBGaW5kIFxcXCJzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzXFxcIiBmcm9tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDg0LVxcdCAqIHN0cnVjdCBicGZfc3RydWN0X29wc190Y3BfY29uZ2VzdGlvbl9vcHMge1xcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA4NS1cXHQgKlxcdFsgLi4uIF1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjEwODY6XFx0ICpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRhdGE7XFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDg3LVxcdCAqIH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY2NfY3ViaWMuYy01LSAqICAgIGlzIHRoYXQgdGhpcyBicGYgcHJvZ3JhbSByZWxpZXMgb24gYGNvbmdfY29udHJvbGAgcmF0aGVyIHRoYW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2NjX2N1YmljLmM6NjogKiAgICBgY29uZ19hdm9pZGAgaW4gdGhlIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9jY19jdWJpYy5jLTctICogMi4gTG9naWMgc3VjaCBhcyB0Y3BfY3duZF9yZWR1Y3Rpb24sIHRjcF9jb25nX2F2b2lkLCBhbmRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY2NfY3ViaWMuYz0xNjg9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9jY19jdWJpYy5jOjE2OTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNjX2N1YmljID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY2NfY3ViaWMuYy0xNzAtXFx0LmluaXRcXHRcXHQ9ICh2b2lkICopYnBmX2N1YmljX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2N1YmljLmM9NTQ0PVNFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY3ViaWMuYzo1NDU6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBjdWJpYyA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2N1YmljLmMtNTQ2LVxcdC5pbml0XFx0XFx0PSAodm9pZCAqKWJwZl9jdWJpY19pbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jPTIzOT1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwLmM6MjQwOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGN0Y3Bfbm91c2UgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jLTI0MS1cXHQuaW5pdFxcdFxcdD0gKHZvaWQgKilicGZfZGN0Y3BfaW5pdCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZGN0Y3AuYz0yNDc9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jOjI0ODpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZGN0Y3AuYy0yNDktXFx0LmluaXRcXHRcXHQ9ICh2b2lkICopYnBmX2RjdGNwX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYz0xOD1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYzoxOTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwX3JlbCA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYy0yMC1cXHQucmVsZWFzZVxcdD0gKHZvaWQgKilkY3RjcF9ub3VzZV9yZWxlYXNlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl90Y3Bfbm9ncGwuYz0xMz1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3RjcF9ub2dwbC5jOjE0OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgYnBmX25vZ3BsdGNwID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfdGNwX25vZ3BsLmMtMTUtXFx0LmluaXQgICAgICAgICAgID0gKHZvaWQgKilub2dwbHRjcF9pbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmM9MjE9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmM6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBpbmNvbXBsX2Nvbmdfb3BzID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfaW5jb21wbF9jb25nX29wcy5jLTIzLVxcdC8qIEludGVudGlvbmFsbHkgbGVhdmluZyBvdXQgYW55IG9mIHRoZSByZXF1aXJlZCBjb25nX2F2b2lkKCkgYW5kXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmM9MTEyPVNFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYzoxMTM6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfY2Ffa2Z1bmMgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jLTExNC1cXHQuaW5pdFxcdFxcdD0gKHZvaWQgKilpbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91bnN1cHBfY29uZ19vcC5jPTE3PVNFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW5zdXBwX2Nvbmdfb3AuYzoxODpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHVuc3VwcF9jb25nX29wID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW5zdXBwX2Nvbmdfb3AuYy0xOS1cXHQuZ2V0X2luZm8gPSAodm9pZCAqKXVuc3VwcF9jb25nX29wX2dldF9pbmZvLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91bnRydXN0ZWRfYnRmX3dyaXRlLmM9MjI9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91bnRydXN0ZWRfYnRmX3dyaXRlLmM6MjM6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB1bnRydXN0ZWRfYnRmX3dyaXRlID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW50cnVzdGVkX2J0Zl93cml0ZS5jLTI0LVxcdC5pbml0ID0gKHZvaWQgKil1bnRydXN0ZWRfYnRmX3dyaXRlX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jPTQyPVNFQyhcXFwiLnN0cnVjdF9vcHMubGlua1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo0MzpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX3VwZGF0ZV8xID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmMtNDQtXFx0LmluaXQgPSAodm9pZCAqKWNhX3VwZGF0ZV8xX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jPTUxPVNFQyhcXFwiLnN0cnVjdF9vcHMubGlua1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo1MjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX3VwZGF0ZV8yID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmMtNTMtXFx0LmluaXQgPSAodm9pZCAqKWNhX3VwZGF0ZV8yX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jPTYwPVNFQyhcXFwiLnN0cnVjdF9vcHMubGlua1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo2MTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX3dyb25nID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmMtNjItXFx0LmNvbmdfY29udHJvbCA9ICh2b2lkICopY2FfdXBkYXRlX2NvbmdfY29udHJvbCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmM9Njg9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo2OTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX25vX2xpbmsgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYy03MC1cXHQuY29uZ19jb250cm9sID0gKHZvaWQgKiljYV91cGRhdGVfY29uZ19jb250cm9sLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV93cml0ZV9za19wYWNpbmcuYz01Nj1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3dyaXRlX3NrX3BhY2luZy5jOjU3OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgd3JpdGVfc2tfcGFjaW5nID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffd3JpdGVfc2tfcGFjaW5nLmMtNTgtXFx0LmluaXQgPSAodm9pZCAqKXdyaXRlX3NrX3BhY2luZ19pbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L25vbl9zY3hfa2Z1bmNfZGVueS5icGYuYz0zMT1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbm9uX3NjeF9rZnVuY19kZW55LmJwZi5jOjMyOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX25vbl9zY3hfY2EgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L25vbl9zY3hfa2Z1bmNfZGVueS5icGYuYy0zMy1cXHQuc3N0aHJlc2ggICA9ICh2b2lkICopdGNwX2NhX3NzdGhyZXNoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMjoyNi40NDg0MTk3OThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1MzE5NjE0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBCUEYtUmVnaXN0ZXJlZCBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgaW4gYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AgYW5kIHNvbWV0aGluZydzIGNhdGNoaW5nIG15IGF0dGVudGlvbi4gQlBGIGNhbiByZWdpc3RlciBgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgd2hpY2ggaXMgY29vbCwgYnV0IEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBuYW1lIGlzIGhhbmRsZWQuIFRoZSBjb2RlIHVzZXMgYGJwZl9vYmpfbmFtZV9jcHlgIHRvIGNvcHkgdGhlIG5hbWUsIHdoaWNoIHNlZW1zIGZpbmUg4oCTIGl0IG51bGwtdGVybWluYXRlcywgc28gdGhhdCBwYXJ0J3MgY292ZXJlZC4gVGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBhbGxvY2F0ZXMgdGhlIHJlc3Qgb2YgYHRjcF9jYWAsIGFuZCBnZW5lcmFsbHksIHRoYXQgbWVhbnMgemVyb2VkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZCBmb3IgYXZvaWRpbmcgZ2FyYmFnZSBkYXRhLlxuXG5CdXQgdGhlbiBJIHNlZSB0aGlzIHNuaXBwZXQ6XG5cbmBgYGNcblx0XHRjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O1xuLi4uXG5cdFx0cmN1X3JlYWRfbG9jaygpO1xuXHRcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzKTtcblx0XHRtZW1jcHkoY2FfbmFtZSwgY2Ffb3BzLVx1MDAzZW5hbWUsIHNpemVvZihjYV9uYW1lKSk7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cblx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgY2FfbmFtZSwgbGVuKSlcbmBgYFxuXG5BbmQgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBgbWVtY3B5YCBjb3BpZXMgKmV4YWN0bHkqIGBUQ1BfQ0FfTkFNRV9NQVhgIGJ5dGVzIGZyb20gYGNhX29wcy1cdTAwM2VuYW1lYCBpbnRvIGBjYV9uYW1lYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB3aGlsZSBgYnBmX29ial9uYW1lX2NweWAgZW5zdXJlcyB0aGF0IHRoZSBuYW1lIGlzIG51bGwtdGVybWluYXRlZCwgaXQgKmRvZXNuJ3QqIHplcm8gb3V0IGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgYG5hbWVgIGZpZWxkIG9mIHRoZSBgdGNwX2Nvbmdlc3Rpb25fb3BzYCBzdHJ1Y3R1cmUuIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgbmFtZSBpc24ndCBhIGZ1bGwgYFRDUF9DQV9OQU1FX01BWGAgY2hhcmFjdGVycyBsb25nLCB0aGVuIHRoZXJlJ3MgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFmdGVyKiB0aGUgbnVsbCB0ZXJtaW5hdG9yLlxuXG5TbywgaWYgYGNhX29wcy1cdTAwM2VuYW1lYCAqZG9lcyogaGF2ZSB1bmluaXRpYWxpemVkIGJ5dGVzICphZnRlciogdGhlIG51bGwgdGVybWluYXRvciwgdGhvc2UgdW5pbml0aWFsaXplZCBieXRlcyBhcmUgY29waWVkIHRvIGBjYV9uYW1lYC4gVGhlbiwgdGhvc2UgYnl0ZXMgaW4gYGNhX25hbWVgIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBgY29weV90b19zb2NrcHRyYC4gVGhhdCdzIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWssIGlzbid0IGl0PyBUaGF0IGNhbid0IGJlIGdvb2QuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyAqYWN0dWFsbHkqIGEgcHJvYmxlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGNhX29wcy1cdTAwM2VuYW1lYCBjYW4gYWN0dWFsbHkgKmhhdmUqIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFNwZWNpZmljYWxseSwgYGNhX29wcy1cdTAwM2VuYW1lYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgYGNoYXIgbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdYCBpbnNpZGUgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLlxuXG5Gb3IgYnVpbHQtaW4gY29uZ2VzdGlvbiBjb250cm9scywgc3RhdGljYWxseSBhbGxvY2F0ZWQsIHRob3NlIHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gQnV0IHdoYXQgYWJvdXQgQlBGIGNvbmdlc3Rpb24gY29udHJvbHM/IEkgbmVlZCB0byBnbyBsb29rIGFuZCBzZWUgaG93IEJQRiBhbGxvY2F0ZXMgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLiBUaGF0J3MgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MjksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6MzYuOTgwMzg1MDE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMxNDQyOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzE0PXN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MjUtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcyNjpzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MjctXFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMTk0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBicGZfc3RydWN0X29wc19tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMDAtXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwMTpcXHQubWFwX3VwZGF0ZV9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjAyLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMjo0MS40MTE4MzU5NjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MjMxMjA2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYC4gTGV0J3MgZ2V0IHJpZ2h0IGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHNwZWNpZmljYWxseSBpcyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgbHVyayB3aXRoaW4gaXRzIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHN1YnRsZSBnb3RjaGFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBjb25jdXJyZW5jeSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gZGF0YSByYWNlcyBvciBtZW1vcnkgY29ycnVwdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdCdzIGRlYWxpbmcgd2l0aCB1cGRhdGluZyBlbGVtZW50cyB3aXRoaW4gYSBCUEYgbWFwLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgcmVhZC93cml0ZSBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBJcyBpdCBoYW5kbGluZyBlcnJvcnMgZ3JhY2VmdWxseT8gQXJlIHRoZXJlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbGlrZSBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHRoYXQgbmVlZCB0byBiZSBjYXJlZnVsbHkgY29uc2lkZXJlZD8gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGRvaW5nIGEgbG90IG9mIHBvaW50ZXIganVnZ2xpbmcgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6NTIuMzM0OTY2MjEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI2OlxcdHN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIDcyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbiA3Mjg6XFx0e1xcbiA3Mjk6XFx0XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XFxuIDczMDpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MgPSBzdF9tYXAtXFx1MDAzZXN0X29wc19kZXNjO1xcbiA3MzE6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHMgPSBzdF9vcHNfZGVzYy1cXHUwMDNlc3Rfb3BzO1xcbiA3MzI6XFx0XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICp1dmFsdWUsICprdmFsdWU7XFxuIDczMzpcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1vZHVsZV90eXBlO1xcbiA3MzQ6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcXG4gNzM1OlxcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCA9IHN0X29wc19kZXNjLVxcdTAwM2V0eXBlO1xcbiA3MzY6XFx0XFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzO1xcbiA3Mzc6XFx0XFx0dm9pZCAqdWRhdGEsICprZGF0YTtcXG4gNzM4OlxcdFxcdGludCBwcm9nX2ZkLCBlcnI7XFxuIDczOTpcXHRcXHR1MzIgaSwgdHJhbXBvbGluZV9zdGFydCwgaW1hZ2Vfb2ZmID0gMDtcXG4gNzQwOlxcdFxcdHZvaWQgKmN1cl9pbWFnZSA9IE5VTEwsICppbWFnZSA9IE5VTEw7XFxuIDc0MTpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmsgKipwbGluaztcXG4gNzQyOlxcdFxcdHN0cnVjdCBicGZfa3N5bSAqKnBrc3ltO1xcbiA3NDM6XFx0XFx0Y29uc3QgY2hhciAqdG5hbWUsICptbmFtZTtcXG4gNzQ0OlxcdFxcbiA3NDU6XFx0XFx0aWYgKGZsYWdzKVxcbiA3NDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc0NzpcXHRcXG4gNzQ4OlxcdFxcdGlmICgqKHUzMiAqKWtleSAhPSAwKVxcbiA3NDk6XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0ZXJyID0gY2hlY2tfemVyb19ob2xlcyhzdF9tYXAtXFx1MDAzZWJ0Ziwgc3Rfb3BzX2Rlc2MtXFx1MDAzZXZhbHVlX3R5cGUsIHZhbHVlKTtcXG4gNzUyOlxcdFxcdGlmIChlcnIpXFxuIDc1MzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NTQ6XFx0XFxuIDc1NTpcXHRcXHR1dmFsdWUgPSB2YWx1ZTtcXG4gNzU2OlxcdFxcdGVyciA9IGNoZWNrX3plcm9faG9sZXMoc3RfbWFwLVxcdTAwM2VidGYsIHQsIHV2YWx1ZS1cXHUwMDNlZGF0YSk7XFxuIDc1NzpcXHRcXHRpZiAoZXJyKVxcbiA3NTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0aWYgKHV2YWx1ZS1cXHUwMDNlY29tbW9uLnN0YXRlIHx8IHJlZmNvdW50X3JlYWQoXFx1MDAyNnV2YWx1ZS1cXHUwMDNlY29tbW9uLnJlZmNudCkpXFxuIDc2MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0dG5vZGVzID0ga3phbGxvY19vYmpzKCp0bm9kZXMsIEJQRl9UUkFNUF9NQVgpO1xcbiA3NjQ6XFx0XFx0aWYgKCF0bm9kZXMpXFxuIDc2NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzY2OlxcdFxcbiA3Njc6XFx0XFx0dXZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKXN0X21hcC1cXHUwMDNldXZhbHVlO1xcbiA3Njg6XFx0XFx0a3ZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKVxcdTAwMjZzdF9tYXAtXFx1MDAzZWt2YWx1ZTtcXG4gNzY5OlxcdFxcbiA3NzA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c3RfbWFwLVxcdTAwM2Vsb2NrKTtcXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0aWYgKGt2YWx1ZS1cXHUwMDNlY29tbW9uLnN0YXRlICE9IEJQRl9TVFJVQ1RfT1BTX1NUQVRFX0lOSVQpIHtcXG4gNzczOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4gNzc0OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiA3NzU6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMjo1Mi4zMzUyMDEzNzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1MzcwNzI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbWAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBkZXRhaWxzIG9uIGBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW1gLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHVwZGF0aW5nIGVsZW1lbnRzIHdpdGhpbiBzdHJ1Y3QtYmFzZWQgQlBGIG1hcHMuIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiBtdWx0aXBsZSBCUEYgcHJvZ3JhbXMgYXJlIHRyeWluZyB0byBtb2RpZnkgdGhlIHNhbWUgc3RydWN0dXJlIHNpbXVsdGFuZW91c2x5LiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQsIGlmIGFueSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgQlBGIGV4ZWN1dGlvbiBtb2RlbC4gSSdsbCBhbHNvIGJlIGV4YW1pbmluZyBob3cgZXJyb3IgaGFuZGxpbmcgaXMgbWFuYWdlZCDigJMgcGFydGljdWxhcmx5IGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBhbmQgaW52YWxpZCBrZXkvdmFsdWUgY29tYmluYXRpb25zLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucyBidWlsdCBpbnRvIHRoZSB1cGRhdGUgcHJvY2Vzcz8gQXJlIHRoZXJlIGFueSBub3RhYmxlIGRpZmZlcmVuY2VzIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGJlaGF2ZXMgY29tcGFyZWQgdG8gYGJwZl9tYXBfdXBkYXRlX2VsZW1gIGZvciBvdGhlciBtYXAgdHlwZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBkYXRhIGNvbnNpc3RlbmN5IHdpdGhpbiBhIEJQRi1kcml2ZW4gc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI3NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6NTkuNDg4OTEyNTg3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzc2OlxcdFxcbiA3Nzc6XFx0XFx0bWVtY3B5KHV2YWx1ZSwgdmFsdWUsIG1hcC1cXHUwMDNldmFsdWVfc2l6ZSk7XFxuIDc3ODpcXHRcXG4gNzc5OlxcdFxcdHVkYXRhID0gXFx1MDAyNnV2YWx1ZS1cXHUwMDNlZGF0YTtcXG4gNzgwOlxcdFxcdGtkYXRhID0gXFx1MDAyNmt2YWx1ZS1cXHUwMDNlZGF0YTtcXG4gNzgxOlxcdFxcbiA3ODI6XFx0XFx0cGxpbmsgPSBzdF9tYXAtXFx1MDAzZWxpbmtzO1xcbiA3ODM6XFx0XFx0cGtzeW0gPSBzdF9tYXAtXFx1MDAzZWtzeW1zO1xcbiA3ODQ6XFx0XFx0dG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc3RfbWFwLVxcdTAwM2VidGYsIHQtXFx1MDAzZW5hbWVfb2ZmKTtcXG4gNzg1OlxcdFxcdG1vZHVsZV90eXBlID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHN0X29wc19pZHNbSURYX01PRFVMRV9JRF0pO1xcbiA3ODY6XFx0XFx0Zm9yX2VhY2hfbWVtYmVyKGksIHQsIG1lbWJlcikge1xcbiA3ODc6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptdHlwZSwgKnB0eXBlO1xcbiA3ODg6XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiA3ODk6XFx0XFx0XFx0c3RydWN0IGJwZl90cmFtcF9saW5rICpsaW5rO1xcbiA3OTA6XFx0XFx0XFx0c3RydWN0IGJwZl9rc3ltICprc3ltO1xcbiA3OTE6XFx0XFx0XFx0dTMyIG1vZmY7XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdFxcdG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcXG4gNzk0OlxcdFxcdFxcdG1uYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KHN0X21hcC1cXHUwMDNlYnRmLCBtZW1iZXItXFx1MDAzZW5hbWVfb2ZmKTtcXG4gNzk1OlxcdFxcdFxcdHB0eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoc3RfbWFwLVxcdTAwM2VidGYsIG1lbWJlci1cXHUwMDNldHlwZSwgTlVMTCk7XFxuIDc5NjpcXHRcXHRcXHRpZiAocHR5cGUgPT0gbW9kdWxlX3R5cGUpIHtcXG4gNzk3OlxcdFxcdFxcdFxcdGlmICgqKHZvaWQgKiopKHVkYXRhICsgbW9mZikpXFxuIDc5ODpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc2V0X3VubG9jaztcXG4gNzk5OlxcdFxcdFxcdFxcdCoodm9pZCAqKikoa2RhdGEgKyBtb2ZmKSA9IEJQRl9NT0RVTEVfT1dORVI7XFxuIDgwMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODAxOlxcdFxcdFxcdH1cXG4gODAyOlxcdFxcbiA4MDM6XFx0XFx0XFx0ZXJyID0gc3Rfb3BzLVxcdTAwM2Vpbml0X21lbWJlcih0LCBtZW1iZXIsIGtkYXRhLCB1ZGF0YSk7XFxuIDgwNDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gODA1OlxcdFxcdFxcdFxcdGdvdG8gcmVzZXRfdW5sb2NrO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHRcXHQvKiBUaGUgLVxcdTAwM2Vpbml0X21lbWJlcigpIGhhcyBoYW5kbGVkIHRoaXMgbWVtYmVyICovXFxuIDgwODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2UgMClcXG4gODA5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRcXHQvKiBJZiBzdF9vcHMtXFx1MDAzZWluaXRfbWVtYmVyIGRvZXMgbm90IGhhbmRsZSBpdCxcXG4gODEyOlxcdFxcdFxcdCAqIHdlIHdpbGwgb25seSBoYW5kbGUgZnVuYyBwdHJzIGFuZCB6ZXJvLWVkIG1lbWJlcnNcXG4gODEzOlxcdFxcdFxcdCAqIGhlcmUuICBSZWplY3QgZXZlcnl0aGluZyBlbHNlLlxcbiA4MTQ6XFx0XFx0XFx0ICovXFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdFxcdC8qIEFsbCBub24gZnVuYyBwdHIgbWVtYmVyIG11c3QgYmUgMCAqL1xcbiA4MTc6XFx0XFx0XFx0aWYgKCFwdHlwZSB8fCAhYnRmX3R5cGVfaXNfZnVuY19wcm90byhwdHlwZSkpIHtcXG4gODE4OlxcdFxcdFxcdFxcdHUzMiBtc2l6ZTtcXG4gODE5OlxcdFxcbiA4MjA6XFx0XFx0XFx0XFx0bXR5cGUgPSBidGZfdHlwZV9ieV9pZChzdF9tYXAtXFx1MDAzZWJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlKTtcXG4gODIxOlxcdFxcdFxcdFxcdG10eXBlID0gYnRmX3Jlc29sdmVfc2l6ZShzdF9tYXAtXFx1MDAzZWJ0ZiwgbXR5cGUsIFxcdTAwMjZtc2l6ZSk7XFxuIDgyMjpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKG10eXBlKSkge1xcbiA4MjM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihtdHlwZSk7XFxuIDgyNDpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc2V0X3VubG9jaztcXG4gODI1OlxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6NTkuNDg5MTUxMjE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODQ3MzgwNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIERhdGEgRmxvdyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGF0YSBmbG93IGJldHRlci4gSXQgbG9va3MgbGlrZSBga2RhdGFgIGlzIGdldHRpbmcgaXRzIGluaXRpYWwgdmFsdWUgZGlyZWN0bHkgZnJvbSBga3ZhbHVlLVx1MDAzZWRhdGFgLiBBbmQgYGt2YWx1ZWAsIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBpcyBhIGNvbXBvbmVudCBvZiB0aGlzIGBzdF9tYXBgIHN0cnVjdHVyZS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBxdWVzdGlvbnMgYWJvdXQgb3duZXJzaGlwIGFuZCBsaWZlY3ljbGUuIEkgbmVlZCB0byBiYWNrIHVwIGEgbGV2ZWwgaGVyZS4gTGV0IG1lIHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIGBzdF9tYXBgLiBXaGVyZSBpcyB0aGlzIHRoaW5nIGJlaW5nIGNyZWF0ZWQgYW5kIGhvdyBpcyBpdCBiZWluZyBwb3B1bGF0ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHRvIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IHBvc3NpYmxlIGlzc3VlcyB3aXRoIG1lbW9yeSwgZGF0YSBjb25zaXN0ZW5jeSwgb3IgZXZlbiBjb25jdXJyZW5jeS4gUmlnaHQgbm93LCB0aGlzIGNvbm5lY3Rpb24gaXMgYSBsaXR0bGUgdG9vIG9wYXF1ZSBmb3IgbXkgbGlraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDM6MTUuMzM2NTM1NjU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDIxMzYxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTAyNz1zdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwNjI6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjMte1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwNzE9c3RhdGljIHUzMiBjb3VudF9mdW5jX3B0cnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4My1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4NDpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4NS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTE5ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NTpcXHQubWFwX2FsbG9jX2NoZWNrID0gYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jX2NoZWNrLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk2OlxcdC5tYXBfYWxsb2MgPSBicGZfc3RydWN0X29wc19tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExOTctXFx0Lm1hcF9mcmVlID0gYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjE5LjM1NzkwNjcxNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzk5NDc2MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfc3RydWN0X29wc19tYXBfYWxsb2NgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgQlBGIGVjb3N5c3RlbSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIGN1c3RvbSBtYXAgdHlwZXMgYW5kIHN0cnVjdHVyZSBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgd2hldGhlciBpdCdzIGFkaGVyaW5nIHRvIHRoZSBleHBlY3RlZCBtZW1vcnkgbW9kZWwgd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgc3Vic3lzdGVtLiBJIHdhbnQgdG8gY29uZmlybSBpZiBpdCdzIHVzaW5nIHRoZSBzdGFuZGFyZCBga21hbGxvY2Agb3IsIHBlcmhhcHMsIGEgbW9yZSBvcHRpbWl6ZWQsIEJQRi1zcGVjaWZpYyBhbGxvY2F0b3IuIEkgbmVlZCB0byBlbnN1cmUgaXQgaW50ZWdyYXRlcyBzZWFtbGVzc2x5IHdpdGggYW55IGV4aXN0aW5nIG1hcCBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIEJQRiB2ZXJpZmllci4gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbnQgYWNjZXNzIGlzc3VlcyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gYWxzbyBuZWVkcyB0byBiZSBvbiBteSByYWRhciwgZXNwZWNpYWxseSBpZiB0aGlzIG5ldyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgaGlnaC1mcmVxdWVuY3kgb3IgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciByZXNvdXJjZSBsaW1pdHMg4oCTIGRvZXMgdGhlIGFsbG9jYXRpb24gYWNjb3VudCBmb3IgcGVyLUJQRi1wcm9ncmFtIG1lbW9yeSBjYXBzIG9yIHRoZSBvdmVyYWxsIHN5c3RlbSBtZW1vcnk/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgaG93IGl0IHdvcmtzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA3MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjI0Ljc1NzM4ODE0MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODQ6XFx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMTA4NTpcXHR7XFxuMTA4NjpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2M7XFxuMTA4NzpcXHRcXHRzaXplX3Qgc3RfbWFwX3NpemU7XFxuMTA4ODpcXHRcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxuMTA4OTpcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICp2dDtcXG4xMDkwOlxcdFxcdHN0cnVjdCBtb2R1bGUgKm1vZCA9IE5VTEw7XFxuMTA5MTpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbjEwOTI6XFx0XFx0c3RydWN0IGJ0ZiAqYnRmO1xcbjEwOTM6XFx0XFx0aW50IHJldDtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0aWYgKGF0dHItXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX1ZUWVBFX0JURl9PQkpfRkQpIHtcXG4xMDk2OlxcdFxcdFxcdC8qIFRoZSBtYXAgaG9sZHMgYnRmIGZvciBpdHMgd2hvbGUgbGlmZSB0aW1lLiAqL1xcbjEwOTc6XFx0XFx0XFx0YnRmID0gYnRmX2dldF9ieV9mZChhdHRyLVxcdTAwM2V2YWx1ZV90eXBlX2J0Zl9vYmpfZmQpO1xcbjEwOTg6XFx0XFx0XFx0aWYgKElTX0VSUihidGYpKVxcbjEwOTk6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGJ0Zik7XFxuMTEwMDpcXHRcXHRcXHRpZiAoIWJ0Zl9pc19tb2R1bGUoYnRmKSkge1xcbjExMDE6XFx0XFx0XFx0XFx0YnRmX3B1dChidGYpO1xcbjExMDI6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuMTEwMzpcXHRcXHRcXHR9XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdFxcdG1vZCA9IGJ0Zl90cnlfZ2V0X21vZHVsZShidGYpO1xcbjExMDY6XFx0XFx0XFx0LyogbW9kIGhvbGRzIGEgcmVmY250IHRvIGJ0Zi4gV2UgZG9uJ3QgbmVlZCBhbiBleHRyYSByZWZjbnRcXG4xMTA3OlxcdFxcdFxcdCAqIGhlcmUuXFxuMTEwODpcXHRcXHRcXHQgKi9cXG4xMTA5OlxcdFxcdFxcdGJ0Zl9wdXQoYnRmKTtcXG4xMTEwOlxcdFxcdFxcdGlmICghbW9kKVxcbjExMTE6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuMTExMjpcXHRcXHR9IGVsc2Uge1xcbjExMTM6XFx0XFx0XFx0YnRmID0gYnBmX2dldF9idGZfdm1saW51eCgpO1xcbjExMTQ6XFx0XFx0XFx0aWYgKElTX0VSUihidGYpKVxcbjExMTU6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGJ0Zik7XFxuMTExNjpcXHRcXHRcXHRpZiAoIWJ0ZilcXG4xMTE3OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7XFxuMTExODpcXHRcXHR9XFxuMTExOTpcXHRcXG4xMTIwOlxcdFxcdHN0X29wc19kZXNjID0gYnBmX3N0cnVjdF9vcHNfZmluZF92YWx1ZShidGYsIGF0dHItXFx1MDAzZWJ0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQpO1xcbjExMjE6XFx0XFx0aWYgKCFzdF9vcHNfZGVzYykge1xcbjExMjI6XFx0XFx0XFx0cmV0ID0gLUVOT1RTVVBQO1xcbjExMjM6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuMTEyNDpcXHRcXHR9XFxuMTEyNTpcXHRcXG4xMTI2OlxcdFxcdHZ0ID0gc3Rfb3BzX2Rlc2MtXFx1MDAzZXZhbHVlX3R5cGU7XFxuMTEyNzpcXHRcXHRpZiAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSB2dC1cXHUwMDNlc2l6ZSkge1xcbjExMjg6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMTI5OlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbjExMzA6XFx0XFx0fVxcbjExMzE6XFx0XFxuMTEzMjpcXHRcXHR0ID0gc3Rfb3BzX2Rlc2MtXFx1MDAzZXR5cGU7XFxuMTEzMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDM6MjQuNzU3NjUyODYyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjQ4OTcyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jYC4gSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbiwgc28gbGV0J3Mgc3RhcnQgcmVhZGluZy4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHdoYXQgaXQgZG9lcywgYmVjYXVzZSBJIGtub3cgdGhhdCBtYXBzIGFyZSBmdW5kYW1lbnRhbCB0byBlQlBGJ3MgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRob3NlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZWRnZSBjYXNlcyBpdCBtaWdodCBoYW5kbGUsIGFueSBlcnJvciBjaGVja2luZyB0aGF0J3MgaW1wbGVtZW50ZWQsIGFuZCBvZiBjb3Vyc2UsIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGVCUEYgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGlzIGZvciBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjI5LjEyMjU1MzI2MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzQ6XFx0XFx0c3RfbWFwX3NpemUgPSBzaXplb2YoKnN0X21hcCkgK1xcbjExMzU6XFx0XFx0XFx0Lyoga3ZhbHVlIHN0b3JlcyB0aGVcXG4xMTM2OlxcdFxcdFxcdCAqIHN0cnVjdCBicGZfc3RydWN0X29wc190Y3BfY29uZ2VzdGlvbnNfb3BzXFxuMTEzNzpcXHRcXHRcXHQgKi9cXG4xMTM4OlxcdFxcdFxcdCh2dC1cXHUwMDNlc2l6ZSAtIHNpemVvZihzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUpKTtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0c3RfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcF9zaXplLCBOVU1BX05PX05PREUpO1xcbjExNDE6XFx0XFx0aWYgKCFzdF9tYXApIHtcXG4xMTQyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTE0MzpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4xMTQ0OlxcdFxcdH1cXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0c3RfbWFwLVxcdTAwM2VzdF9vcHNfZGVzYyA9IHN0X29wc19kZXNjO1xcbjExNDc6XFx0XFx0bWFwID0gXFx1MDAyNnN0X21hcC1cXHUwMDNlbWFwO1xcbjExNDg6XFx0XFxuMTE0OTpcXHRcXHRzdF9tYXAtXFx1MDAzZXV2YWx1ZSA9IGJwZl9tYXBfYXJlYV9hbGxvYyh2dC1cXHUwMDNlc2l6ZSwgTlVNQV9OT19OT0RFKTtcXG4xMTUwOlxcdFxcdHN0X21hcC1cXHUwMDNlZnVuY3NfY250ID0gY291bnRfZnVuY19wdHJzKGJ0ZiwgdCk7XFxuMTE1MTpcXHRcXHRzdF9tYXAtXFx1MDAzZWxpbmtzID1cXG4xMTUyOlxcdFxcdFxcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2xpbmsgKiksXFxuMTE1MzpcXHRcXHRcXHRcXHRcXHQgICBOVU1BX05PX05PREUpO1xcbjExNTQ6XFx0XFxuMTE1NTpcXHRcXHRzdF9tYXAtXFx1MDAzZWtzeW1zID1cXG4xMTU2OlxcdFxcdFxcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2tzeW0gKiksXFxuMTE1NzpcXHRcXHRcXHRcXHRcXHQgICBOVU1BX05PX05PREUpO1xcbjExNTg6XFx0XFx0aWYgKCFzdF9tYXAtXFx1MDAzZXV2YWx1ZSB8fCAhc3RfbWFwLVxcdTAwM2VsaW5rcyB8fCAhc3RfbWFwLVxcdTAwM2Vrc3ltcykge1xcbjExNTk6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xMTYwOlxcdFxcdFxcdGdvdG8gZXJyb3V0X2ZyZWU7XFxuMTE2MTpcXHRcXHR9XFxuMTE2MjpcXHRcXHRzdF9tYXAtXFx1MDAzZWJ0ZiA9IGJ0ZjtcXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2c3RfbWFwLVxcdTAwM2Vsb2NrKTtcXG4xMTY1OlxcdFxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIobWFwLCBhdHRyKTtcXG4xMTY2OlxcdFxcbjExNjc6XFx0XFx0cmV0dXJuIG1hcDtcXG4xMTY4OlxcdFxcbjExNjk6XFx0ZXJyb3V0X2ZyZWU6XFxuMTE3MDpcXHRcXHRfX2JwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlKG1hcCk7XFxuMTE3MTpcXHRlcnJvdXQ6XFxuMTE3MjpcXHRcXHRtb2R1bGVfcHV0KG1vZCk7XFxuMTE3MzpcXHRcXG4xMTc0OlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuMTE3NTpcXHR9XFxuMTE3NjpcXHRcXG4xMTc3OlxcdHN0YXRpYyB1NjQgYnBmX3N0cnVjdF9vcHNfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbjExNzg6XFx0e1xcbjExNzk6XFx0XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XFxuMTE4MDpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MgPSBzdF9tYXAtXFx1MDAzZXN0X29wc19kZXNjO1xcbjExODE6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2dCA9IHN0X29wc19kZXNjLVxcdTAwM2V2YWx1ZV90eXBlO1xcbjExODI6XFx0XFx0dTY0IHVzYWdlO1xcbjExODM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjI5LjEyMjc1ODkzMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTYyMjU2MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTWVtb3J5IEFsbG9jYXRpb24gYW5kIFplcm9pbmc6IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBgYnBmX21hcF9hcmVhX2FsbG9jYCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgdXNpbmcgdG8gYWxsb2NhdGUgbWVtb3J5IGhlcmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpczogZG9lcyB0aGlzIHRoaW5nIHplcm8gdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXM/IFdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgZGF0YSBhbmQgc3VidGxlIGJ1Z3MgYXJlIGEgcmVhbCBwYWluLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGF0IG1lbW9yeSBibG9jay4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGxvb2sgZm9yIHNvbWUgc29saWQgZG9jdW1lbnRhdGlvbiB0byB2ZXJpZnkgdGhpcyBiZWhhdmlvci4gQmVzdCBjYXNlIHNjZW5hcmlvLCBpdCdzIGV4cGxpY2l0bHkgemVyb2VkIGZvciBzZWN1cml0eSBhbmQgc3RhYmlsaXR5LiBXb3JzdCBjYXNlLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBpdCBvdXJzZWx2ZXMgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBsZWFrYWdlIG9yIHVuZGVmaW5lZCBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBMZXQncyBtYWtlIHN1cmUgYmVmb3JlIHdlIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxODcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjM0LjI4NTAxODU1MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzODU0OTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX2FyZWFfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0yNzY2PXZvaWQgYnBmX21hcF9wdXQoc3RydWN0IGJwZl9tYXAgKm1hcCk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyNzY3OnZvaWQgKmJwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzY4LXZvaWQgKmJwZl9tYXBfYXJlYV9tbWFwYWJsZV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI5OS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAwOlxcdGFyZW5hID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqYXJlbmEpLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDEtXFx0aWYgKCFhcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFycmF5X21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDEtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQyOlxcdFxcdGFycmF5ID0gYnBmX21hcF9hcmVhX2FsbG9jKGFycmF5X3NpemUsIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0My1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jPTk5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYmxvb21fbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xNDQtXFx0Yml0c2V0X2J5dGVzID0gQklUU19UT19MT05HUygodTY0KWJpdHNldF9tYXNrICsgMSkgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7XFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoxNDU6XFx0Ymxvb20gPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpibG9vbSkgKyBiaXRzZXRfYnl0ZXMsIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xNDYtXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM9NDQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICppbnNuX2FycmF5X2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTQ4LVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzo0OTpcXHRpbnNuX2FycmF5ID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTUwLVxcdGlmICghaW5zbl9hcnJheSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz03NzM9YnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTc4MC1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NzgxOlxcdHNtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpzbWFwKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzgyLVxcdGlmICghc21hcClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMDg0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzktXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNDA6XFx0c3RfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcF9zaXplLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTQxLVxcdGlmICghc3RfbWFwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE0OC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE0OTpcXHRzdF9tYXAtXFx1MDAzZXV2YWx1ZSA9IGJwZl9tYXBfYXJlYV9hbGxvYyh2dC1cXHUwMDNlc2l6ZSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1MC1cXHRzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCA9IGNvdW50X2Z1bmNfcHRycyhidGYsIHQpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTUxLVxcdHN0X21hcC1cXHUwMDNlbGlua3MgPVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTUyOlxcdFxcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2xpbmsgKiksXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTMtXFx0XFx0XFx0XFx0ICAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTU1LVxcdHN0X21hcC1cXHUwMDNla3N5bXMgPVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTU2OlxcdFxcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2tzeW0gKiksXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTctXFx0XFx0XFx0XFx0ICAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM9ODU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjcHVfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDAtXFxua2VybmVsL2JwZi9jcHVtYXAuYzoxMDE6XFx0Y21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmNtYXApLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTAyLVxcdGlmICghY21hcClcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTA3LVxcdC8qIEFsbG9jIGFycmF5IGZvciBwb3NzaWJsZSByZW1vdGUgXFxcImRlc3RpbmF0aW9uXFxcIiBDUFVzICovXFxua2VybmVsL2JwZi9jcHVtYXAuYzoxMDg6XFx0Y21hcC1cXHUwMDNlY3B1X21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhjbWFwLVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKlxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTA5LVxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKiksXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTkxPXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqZGV2X21hcF9jcmVhdGVfaGFzaCh1bnNpZ25lZCBpbnQgZW50cmllcyxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtOTYtXFxua2VybmVsL2JwZi9kZXZtYXAuYzo5NzpcXHRoYXNoID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIGVudHJpZXMgKiBzaXplb2YoKmhhc2gpLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvZGV2bWFwLmMtOTgtXFx0aWYgKGhhc2ggIT0gTlVMTClcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9MTM2PXN0YXRpYyBpbnQgZGV2X21hcF9pbml0X21hcChzdHJ1Y3QgYnBmX2R0YWIgKmR0YWIsIHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy0xNTMtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjE1NDpcXHRcXHRkdGFiLVxcdTAwM2VuZXRkZXZfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIGR0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyAqXFxua2VybmVsL2JwZi9kZXZtYXAuYy0xNTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBicGZfZHRhYl9uZXRkZXYgKiksXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTE2ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmRldl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE2OC1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjE2OTpcXHRkdGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqZHRhYiksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9kZXZtYXAuYy0xNzAtXFx0aWYgKCFkdGFiKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE5PXN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjYtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzI3OlxcdGh0YWItXFx1MDAzZWVsZW1zID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpaHRhYi1cXHUwMDNlZWxlbV9zaXplICogbnVtX2VudHJpZXMsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI4LVxcdFxcdFxcdFxcdFxcdCBodGFiLVxcdTAwM2VtYXAubnVtYV9ub2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTU0NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTU4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjU1OTpcXHRodGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqaHRhYiksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTYwLVxcdGlmICghaHRhYilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTYwMS1cXHRlcnIgPSAtRU5PTUVNO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjYwMjpcXHRodGFiLVxcdTAwM2VidWNrZXRzID0gYnBmX21hcF9hcmVhX2FsbG9jKGh0YWItXFx1MDAzZW5fYnVja2V0cyAqXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNjAzLVxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3QgYnVja2V0KSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3OTQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzk5LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4MDA6XFx0cmh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpyaHRhYiksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgwMS1cXHRpZiAoIXJodGFiKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM9Mjk2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqY2dyb3VwX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzI2LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjMyNzpcXHRtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwKSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjgtXFx0aWYgKCFtYXApXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9NTcxPXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqdHJpZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy01ODctXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjU4ODpcXHR0cmllID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqdHJpZSksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU4OS1cXHRpZiAoIXRyaWUpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz01MDM9c3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfb2ZmbG9hZF9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MTUtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6NTE2OlxcdG9mZm1hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKm9mZm1hcCksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNTE3LVxcdGlmICghb2ZmbWFwKVxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9NjU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpxdWV1ZV9zdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy03My1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzo3NDpcXHRxcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhxdWV1ZV9zaXplLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTc1LVxcdGlmICghcXMpXFxuLS1cXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jPTE0OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJldXNlcG9ydF9hcnJheV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmMtMTU0LVxcdC8qIGFsbG9jYXRlIGFsbCBtYXAgZWxlbWVudHMgYW5kIHplcm8taW5pdGlhbGl6ZSB0aGVtICovXFxua2VybmVsL2JwZi9yZXVzZXBvcnRfYXJyYXkuYzoxNTU6XFx0YXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2Moc3RydWN0X3NpemUoYXJyYXksIHB0cnMsIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzKSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jLTE1Ni1cXHRpZiAoIWFycmF5KVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmM9OTM9c3RhdGljIHN0cnVjdCBicGZfcmluZ2J1ZiAqYnBmX3JpbmdidWZfYXJlYV9hbGxvYyhzaXplX3QgZGF0YV9zeiwgaW50IG51bWFfbm9kZSlcXG4tLVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTEyMi1cXHRhcnJheV9zaXplID0gKG5yX21ldGFfcGFnZXMgKyAyICogbnJfZGF0YV9wYWdlcykgKiBzaXplb2YoKnBhZ2VzKTtcXG5rZXJuZWwvYnBmL3JpbmdidWYuYzoxMjM6XFx0cGFnZXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoYXJyYXlfc2l6ZSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL3JpbmdidWYuYy0xMjQtXFx0aWYgKCFwYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTE5ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJpbmdidWZfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmMtMjEyLVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjIxMzpcXHRyYl9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpyYl9tYXApLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTIxNC1cXHRpZiAoIXJiX21hcClcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz02OD1zdGF0aWMgaW50IHByZWFsbG9jX2VsZW1zX2FuZF9mcmVlbGlzdChzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcClcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03My1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NzQ6XFx0c21hcC1cXHUwMDNlZWxlbXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoZWxlbV9zaXplICogc21hcC1cXHUwMDNlbWFwLm1heF9lbnRyaWVzLFxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NS1cXHRcXHRcXHRcXHRcXHQgc21hcC1cXHUwMDNlbWFwLm51bWFfbm9kZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9OTM9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTI1LVxcdGNvc3QgPSBuX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKikgKyBzaXplb2YoKnNtYXApO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoxMjY6XFx0c21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhjb3N0LCBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTI3LVxcdGlmICghc21hcClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTMwOD1zdGF0aWMgaW50IGJwZl9tYXBfY29weV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzcxLSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3MjpzdGF0aWMgdm9pZCAqX19icGZfbWFwX2FyZWFfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUsIGJvb2wgbW1hcGFibGUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzczLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQwOC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MDk6dm9pZCAqYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxMC17XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDExOlxcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTItfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDE0PXZvaWQgKmJwZl9tYXBfYXJlYV9tbWFwYWJsZV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTUte1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQxNjpcXHRyZXR1cm4gX19icGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlLCB0cnVlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTctfVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00OS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUwOlxcdHN0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpzdGFiKSwgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUxLVxcdGlmICghc3RhYilcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NzpcXHRzdGFiLVxcdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4LVxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2sgKiksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTEwOTg9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX2hhc2hfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTEyOlxcdGh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpodGFiKSwgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTMtXFx0aWYgKCFodGFiKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTI2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTEyNzpcXHRodGFiLVxcdTAwM2VidWNrZXRzID0gYnBmX21hcF9hcmVhX2FsbG9jKGh0YWItXFx1MDAzZWJ1Y2tldHNfbnVtICpcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMjgtXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCBicGZfc2h0YWJfYnVja2V0KSxcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmM9NjQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICp4c2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L3hkcC94c2ttYXAuYy03Ny1cXG5uZXQveGRwL3hza21hcC5jOjc4OlxcdG0gPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlKTtcXG5uZXQveGRwL3hza21hcC5jLTc5LVxcdGlmICghbSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDM6MzkuMzIzNTc0Mzk2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDY5MDQ2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX2JwZl9tYXBfYXJlYV9hbGxvY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBfX2JwZl9tYXBfYXJlYV9hbGxvY2AuIEknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gQlBGIG1hcCBtYW5hZ2VtZW50LCBsaWtlbHkgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24gb2YgbWVtb3J5IHJlZ2lvbnMgdXNlZCB0byBzdG9yZSBtYXAgZGF0YS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgdGhpcyB1c2luZyBhIHNwZWNpZmljIHNsYWIgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBiYXNpYyBsaWtlIGBrbWFsbG9jYD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGJlaW5nIGVuZm9yY2VkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZXk/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGFyZ3VtZW50cyBiZWluZyBwYXNzZWQg4oCTIHNpemUsIGZsYWdzLCBwb3NzaWJseSBOVU1BIG5vZGUgaW5mb3JtYXRpb24uIFRoZSBmbGFncyBhcmUgZ29pbmcgdG8gYmUga2V5LCBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyBsaWtlIGBHRlBfS0VSTkVMYCBhbmQgcG90ZW50aWFsbHkgb3RoZXJzIHJlbGF0ZWQgdG8gbWVtb3J5IHR5cGVzIG9yIGxvY2tpbmcuIEnigJlsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzIGFuZCBjYWxsZWVzLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBtYXAgaW5mcmFzdHJ1Y3R1cmUsIG9yIGlmIHRoZXJlJ3MgYW55IGJsZWVkIG92ZXIgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCBpZiB0aGVyZSBhcmUgbG9ja3MgaW52b2x2ZWQuIEFyZSB0aGVyZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIEJQRiBtYXAgb3BlcmF0aW9ucyBhcmUgZGV0ZXJtaW5lZCwgc28gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGVzc2VudGlhbCBmb3Igb3B0aW1pemluZyB0aGluZ3MgZG93biB0aGUgcm9hZC4gQWxyaWdodCwgdGltZSB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY0OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjQ0LjMzMDQ4Mjc4NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MjpcXHRzdGF0aWMgdm9pZCAqX19icGZfbWFwX2FyZWFfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUsIGJvb2wgbW1hcGFibGUpXFxuIDM3MzpcXHR7XFxuIDM3NDpcXHRcXHQvKiBXZSByZWFsbHkganVzdCB3YW50IHRvIGZhaWwgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIE9PTSBraWxsZXJcXG4gMzc1OlxcdFxcdCAqIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgdGhlcmVmb3JlIHdlIHNldCBfX0dGUF9OT1JFVFJZIHRvIGttYWxsb2MsXFxuIDM3NjpcXHRcXHQgKiB3aGljaCBpcyB1c2VkIGZvciBsb3dlciBvcmRlciBhbGxvY2F0aW9uIHJlcXVlc3RzLlxcbiAzNzc6XFx0XFx0ICpcXG4gMzc4OlxcdFxcdCAqIEl0IGhhcyBiZWVuIG9ic2VydmVkIHRoYXQgaGlnaGVyIG9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMgZG9uZSBieVxcbiAzNzk6XFx0XFx0ICogdm1hbGxvYyB3aXRoIF9fR0ZQX05PUkVUUlkgYmVpbmcgc2V0IG1pZ2h0IGZhaWwgZHVlIHRvIG5vdCB0cnlpbmdcXG4gMzgwOlxcdFxcdCAqIHRvIHJlY2xhaW0gbWVtb3J5IGZyb20gdGhlIHBhZ2UgY2FjaGUsIHRodXMgd2Ugc2V0XFxuIDM4MTpcXHRcXHQgKiBfX0dGUF9SRVRSWV9NQVlGQUlMIHRvIGF2b2lkIHN1Y2ggc2l0dWF0aW9ucy5cXG4gMzgyOlxcdFxcdCAqL1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRnZnBfdCBnZnAgPSBicGZfbWVtY2dfZmxhZ3MoX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XFxuIDM4NTpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xcbiAzODY6XFx0XFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7XFxuIDM4NzpcXHRcXHR2b2lkICphcmVhO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlPSBTSVpFX01BWClcXG4gMzkwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHQvKiBrbWFsbG9jKCknZWQgbWVtb3J5IGNhbid0IGJlIG1tYXAoKSdlZCAqL1xcbiAzOTM6XFx0XFx0aWYgKG1tYXBhYmxlKSB7XFxuIDM5NDpcXHRcXHRcXHRCVUdfT04oIVBBR0VfQUxJR05FRChzaXplKSk7XFxuIDM5NTpcXHRcXHRcXHRhbGlnbiA9IFNITUxCQTtcXG4gMzk2OlxcdFxcdFxcdGZsYWdzID0gVk1fVVNFUk1BUDtcXG4gMzk3OlxcdFxcdH0gZWxzZSBpZiAoc2l6ZSBcXHUwMDNjPSAoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSkge1xcbiAzOTg6XFx0XFx0XFx0YXJlYSA9IGttYWxsb2Nfbm9kZShzaXplLCBnZnAgfCBHRlBfVVNFUiB8IF9fR0ZQX05PUkVUUlksXFxuIDM5OTpcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlKTtcXG4gNDAwOlxcdFxcdFxcdGlmIChhcmVhICE9IE5VTEwpXFxuIDQwMTpcXHRcXHRcXHRcXHRyZXR1cm4gYXJlYTtcXG4gNDAyOlxcdFxcdH1cXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlKHNpemUsIGFsaWduLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG4gNDA1OlxcdFxcdFxcdFxcdGdmcCB8IEdGUF9LRVJORUwgfCBfX0dGUF9SRVRSWV9NQVlGQUlMLCBQQUdFX0tFUk5FTCxcXG4gNDA2OlxcdFxcdFxcdFxcdGZsYWdzLCBudW1hX25vZGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuIDQwNzpcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdHZvaWQgKmJwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcXG4gNDEwOlxcdHtcXG4gNDExOlxcdFxcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcXG4gNDEyOlxcdH1cXG4gNDEzOlxcdFxcbiA0MTQ6XFx0dm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxcbiA0MTU6XFx0e1xcbiA0MTY6XFx0XFx0cmV0dXJuIF9fYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIG51bWFfbm9kZSwgdHJ1ZSk7XFxuIDQxNzpcXHR9XFxuIDQxODpcXHRcXG4gNDE5OlxcdHZvaWQgYnBmX21hcF9hcmVhX2ZyZWUodm9pZCAqYXJlYSlcXG4gNDIwOlxcdHtcXG4gNDIxOlxcdFxcdGt2ZnJlZShhcmVhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDM6NDQuMzMxODE2MzI0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4ODk1OTk5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIEJQRiBNYXAgVXBkYXRlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgX19icGZfbWFwX2FyZWFfYWxsb2NgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIHVzaW5nIGBfX0dGUF9aRVJPYCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIG1hcCBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseS4gU28sIGBzdF9tYXAtXHUwMDNldXZhbHVlYCBhbmQgYHN0X21hcC1cdTAwM2VrdmFsdWVgIGFyZSBkZWZpbml0ZWx5IHN0YXJ0aW5nIGF0IHplcm8uIEJ1dCwgaGVyZSdzIHdoZXJlIG15IGFsYXJtIGJlbGxzIGFyZSBzdGFydGluZyB0byByaW5nLlxuXG5gYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCBjb3BpZXMgdXNlciBkYXRhIGludG8gYHV2YWx1ZWAgdXNpbmcgYG1lbWNweWAuIFRoZSBrZXkgaXMgdGhhdCBgdmFsdWVgIGluIGBtZW1jcHkodXZhbHVlLCB2YWx1ZSwgbWFwLVx1MDAzZXZhbHVlX3NpemUpYCBpcyAqY29taW5nIGZyb20gdXNlciBzcGFjZSouIElzIHRoYXQgZGF0YSBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgdGltZSBpdCBnZXRzIGNvcGllZCBpbnRvIHRoZSBrZXJuZWw/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZS5cblxuTGV0J3MgdHJhY2UgYmFjay4gSSBzZWUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcm9tIHRoZSBgbWFwX3VwZGF0ZV9lbGVtYCBzeXNjYWxsLiBUaGUgc3lzY2FsbCBpcyBjb3B5aW5nIGB2YWx1ZV9zaXplYCBieXRlcyBmcm9tIHVzZXIgc3BhY2UuIE9rYXksIHNvIGlmIHVzZXIgc3BhY2UgcGFzc2VzIHNvbWV0aGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgYnl0ZXMg4oCTIG1heWJlIHBhZGRpbmcsIG9yIHNvbWUgdW5pbml0aWFsaXplZCBzdHJ1Y3QgbWVtYmVycyDigJMgdGhvc2UgYnl0ZXMgY291bGQgcG90ZW50aWFsbHkgZ2V0IGNvcGllZCBzdHJhaWdodCBpbnRvIGB1dmFsdWVgLiBBbmQgdGhlbiwgYGt2YWx1ZWAgaXMgc3Vic2VxdWVudGx5IGluaXRpYWxpemVkIGZyb20gYHV2YWx1ZWA/XG5cbkknbSBzdGFydGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgLSBga2RhdGFgIGlzIGluaXRpYWxpemVkIGZyb20gYHVkYXRhYC4gTGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW1gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMzo1My4yMjE0MjEyMDNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRtZW1jcHkodXZhbHVlLCB2YWx1ZSwgbWFwLVxcdTAwM2V2YWx1ZV9zaXplKTtcXG4gNzc4OlxcdFxcbiA3Nzk6XFx0XFx0dWRhdGEgPSBcXHUwMDI2dXZhbHVlLVxcdTAwM2VkYXRhO1xcbiA3ODA6XFx0XFx0a2RhdGEgPSBcXHUwMDI2a3ZhbHVlLVxcdTAwM2VkYXRhO1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRcXHRwbGluayA9IHN0X21hcC1cXHUwMDNlbGlua3M7XFxuIDc4MzpcXHRcXHRwa3N5bSA9IHN0X21hcC1cXHUwMDNla3N5bXM7XFxuIDc4NDpcXHRcXHR0bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChzdF9tYXAtXFx1MDAzZWJ0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpO1xcbiA3ODU6XFx0XFx0bW9kdWxlX3R5cGUgPSBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgc3Rfb3BzX2lkc1tJRFhfTU9EVUxFX0lEXSk7XFxuIDc4NjpcXHRcXHRmb3JfZWFjaF9tZW1iZXIoaSwgdCwgbWVtYmVyKSB7XFxuIDc4NzpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm10eXBlLCAqcHR5cGU7XFxuIDc4ODpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIDc4OTpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX2xpbmsgKmxpbms7XFxuIDc5MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX2tzeW0gKmtzeW07XFxuIDc5MTpcXHRcXHRcXHR1MzIgbW9mZjtcXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0XFx0bW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbiA3OTQ6XFx0XFx0XFx0bW5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc3RfbWFwLVxcdTAwM2VidGYsIG1lbWJlci1cXHUwMDNlbmFtZV9vZmYpO1xcbiA3OTU6XFx0XFx0XFx0cHR5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihzdF9tYXAtXFx1MDAzZWJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gNzk2OlxcdFxcdFxcdGlmIChwdHlwZSA9PSBtb2R1bGVfdHlwZSkge1xcbiA3OTc6XFx0XFx0XFx0XFx0aWYgKCoodm9pZCAqKikodWRhdGEgKyBtb2ZmKSlcXG4gNzk4OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzZXRfdW5sb2NrO1xcbiA3OTk6XFx0XFx0XFx0XFx0Kih2b2lkICoqKShrZGF0YSArIG1vZmYpID0gQlBGX01PRFVMRV9PV05FUjtcXG4gODAwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MDE6XFx0XFx0XFx0fVxcbiA4MDI6XFx0XFxuIDgwMzpcXHRcXHRcXHRlcnIgPSBzdF9vcHMtXFx1MDAzZWluaXRfbWVtYmVyKHQsIG1lbWJlciwga2RhdGEsIHVkYXRhKTtcXG4gODA0OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA4MDU6XFx0XFx0XFx0XFx0Z290byByZXNldF91bmxvY2s7XFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdFxcdC8qIFRoZSAtXFx1MDAzZWluaXRfbWVtYmVyKCkgaGFzIGhhbmRsZWQgdGhpcyBtZW1iZXIgKi9cXG4gODA4OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzZSAwKVxcbiA4MDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgxMDpcXHRcXG4gODExOlxcdFxcdFxcdC8qIElmIHN0X29wcy1cXHUwMDNlaW5pdF9tZW1iZXIgZG9lcyBub3QgaGFuZGxlIGl0LFxcbiA4MTI6XFx0XFx0XFx0ICogd2Ugd2lsbCBvbmx5IGhhbmRsZSBmdW5jIHB0cnMgYW5kIHplcm8tZWQgbWVtYmVyc1xcbiA4MTM6XFx0XFx0XFx0ICogaGVyZS4gIFJlamVjdCBldmVyeXRoaW5nIGVsc2UuXFxuIDgxNDpcXHRcXHRcXHQgKi9cXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0XFx0LyogQWxsIG5vbiBmdW5jIHB0ciBtZW1iZXIgbXVzdCBiZSAwICovXFxuIDgxNzpcXHRcXHRcXHRpZiAoIXB0eXBlIHx8ICFidGZfdHlwZV9pc19mdW5jX3Byb3RvKHB0eXBlKSkge1xcbiA4MTg6XFx0XFx0XFx0XFx0dTMyIG1zaXplO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRcXHRcXHRtdHlwZSA9IGJ0Zl90eXBlX2J5X2lkKHN0X21hcC1cXHUwMDNlYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUpO1xcbiA4MjE6XFx0XFx0XFx0XFx0bXR5cGUgPSBidGZfcmVzb2x2ZV9zaXplKHN0X21hcC1cXHUwMDNlYnRmLCBtdHlwZSwgXFx1MDAyNm1zaXplKTtcXG4gODIyOlxcdFxcdFxcdFxcdGlmIChJU19FUlIobXR5cGUpKSB7XFxuIDgyMzpcXHRcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKG10eXBlKTtcXG4gODI0OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzZXRfdW5sb2NrO1xcbiA4MjU6XFx0XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMzo1My4yMjE2MTU0MzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgxNzg1NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGNsaWNrZWQ6IGBrZGF0YWAgaXMgZ2V0dGluZyBhdXRvbWF0aWNhbGx5IHplcm9lZC4gVGhhdCdzIGJlY2F1c2UgYGt2YWx1ZWAg4oCTIHRoZSBhY3R1YWwgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhpcyBjb250ZXh0IOKAkyBsaXZlcyBpbnNpZGUgYHN0X21hcGAsIHdoaWNoIHdhcyBhbGxvY2F0ZWQgdXNpbmcgYGJwZl9tYXBfYXJlYV9hbGxvY2AuIEFuZCByZW1lbWJlciwgYGJwZl9tYXBfYXJlYV9hbGxvY2AgKmd1YXJhbnRlZXMqIHplcm8taW5pdGlhbGl6YXRpb24uIEdvdCBpdC5cblxuU28sIHRoZSBjb2RlIHRoZW4gdXNlcyBgZm9yX2VhY2hfbWVtYmVyYCB0byBjYXJlZnVsbHkgc3RlcCB0aHJvdWdoIGVhY2ggbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUuIFByZXR0eSBzdGFuZGFyZC4gRm9yIGVhY2ggbWVtYmVyIGVuY291bnRlcmVkLCBpdCBjYWxscyBgc3Rfb3BzLVx1MDAzZWluaXRfbWVtYmVyYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHNwZWNpZmljLlxuXG5JbiB0aGUgY2FzZSBvZiBgbmFtZWAsIGEgcGFydGljdWxhciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyB1c2VkLiBIb3dldmVyLCBpdCdzIGNsZWFyIHRoYXQgd2hlbiB0aGUgbWVtYmVyIGlzIGB0Y3BfY29uZ2VzdGlvbl9vcHNgLCB0aGUgY29ycmVzcG9uZGluZyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBgYnBmX3RjcF9jYV9pbml0X21lbWJlcmAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBmdW5jdGlvbiB0byBhbmFseXplLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIGFueSBtZW1iZXIgc3BlY2lmaWMgdG8gdGhlIGNvbmdlc3Rpb24gYWxnb3JpdGhtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMxNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDQ6MDAuMDM5NDc2ODcyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9icGZfdGNwX2NhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdHN0YXRpYyBpbnQgYnBmX3RjcF9jYV9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuIDIxMTpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXFxuIDIxMjpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcXG4gMjEzOlxcdHtcXG4gMjE0OlxcdFxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnV0Y3BfY2E7XFxuIDIxNTpcXHRcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2E7XFxuIDIxNjpcXHRcXHR1MzIgbW9mZjtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0dXRjcF9jYSA9IChjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICopdWRhdGE7XFxuIDIxOTpcXHRcXHR0Y3BfY2EgPSAoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqKWtkYXRhO1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XFxuIDIyMjpcXHRcXHRzd2l0Y2ggKG1vZmYpIHtcXG4gMjIzOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgZmxhZ3MpOlxcbiAyMjQ6XFx0XFx0XFx0aWYgKHV0Y3BfY2EtXFx1MDAzZWZsYWdzIFxcdTAwMjYgflRDUF9DT05HX01BU0spXFxuIDIyNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjI2OlxcdFxcdFxcdHRjcF9jYS1cXHUwMDNlZmxhZ3MgPSB1dGNwX2NhLVxcdTAwM2VmbGFncztcXG4gMjI3OlxcdFxcdFxcdHJldHVybiAxO1xcbiAyMjg6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCBuYW1lKTpcXG4gMjI5OlxcdFxcdFxcdGlmIChicGZfb2JqX25hbWVfY3B5KHRjcF9jYS1cXHUwMDNlbmFtZSwgdXRjcF9jYS1cXHUwMDNlbmFtZSxcXG4gMjMwOlxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHRjcF9jYS1cXHUwMDNlbmFtZSkpIFxcdTAwM2M9IDApXFxuIDIzMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjMyOlxcdFxcdFxcdHJldHVybiAxO1xcbiAyMzM6XFx0XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHRyZXR1cm4gMDtcXG4gMjM2OlxcdH1cXG4gMjM3OlxcdFxcbiAyMzg6XFx0c3RhdGljIGludCBicGZfdGNwX2NhX3JlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbiAyMzk6XFx0e1xcbiAyNDA6XFx0XFx0cmV0dXJuIHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHRzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuIDI0NDpcXHR7XFxuIDI0NTpcXHRcXHR0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHRzdGF0aWMgaW50IGJwZl90Y3BfY2FfdXBkYXRlKHZvaWQgKmtkYXRhLCB2b2lkICpvbGRfa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdHJldHVybiB0Y3BfdXBkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChrZGF0YSwgb2xkX2tkYXRhKTtcXG4gMjUxOlxcdH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0c3RhdGljIGludCBicGZfdGNwX2NhX3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxcbiAyNTQ6XFx0e1xcbiAyNTU6XFx0XFx0cmV0dXJuIHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xcbiAyNTY6XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRzdGF0aWMgdTMyIGJwZl90Y3BfY2Ffc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKVxcbiAyNTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNDowMC4wMzk2Mzk1MzJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNTI5NzQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gT2JqZWN0IE5hbWluZyBpbiBCUEYqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG9iamVjdCBuYW1pbmcsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBicGZfb2JqX25hbWVfY3B5YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hhdCB0aGlzIGNvcHkgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG9iamVjdCBuYW1lcyBhcmUgaGFuZGxlZCB1bmRlciB0aGUgaG9vZC4gV2hhdCdzIHRoZSBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpbiB0ZXJtcyBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3M/IEkgbmVlZCB0byBhbmFseXplIGBicGZfb2JqX25hbWVfY3B5YCBkaXJlY3RseSB0byBmdWxseSBncmFzcCBpdHMgYmVoYXZpb3IsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgYW5kIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gTGV0J3MgZ2V0IHRvIHRoZSBzb3VyY2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0NjQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA0OjA0Ljk3NDk0MDg5M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTg1NjM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfb2JqX25hbWVfY3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjX2JwZi5jPTM0ND1zdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zNTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBuYW1lKTpcXG5mcy9iaW5mbXRfbWlzY19icGYuYzozNTQ6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTM1NS1cXHRcXHRcXHRcXHQgICAgIHNpemVvZihvcHMtXFx1MDAzZW5hbWUpKSBcXHUwMDNjPSAwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD02NTU9c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaDo2NTY6aW50IGJwZl9vYmpfbmFtZV9jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY1Ny1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyMDM9aW50IGJwZl9nZXRfZmlsZV9mbGFnKGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyMjQtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTIyNTppbnQgYnBmX29ial9uYW1lX2NweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgaW50IHNpemUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIyNi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjQ0LX1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjQ1OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9vYmpfbmFtZV9jcHkpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNDYtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTQxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1NDI6XFx0ZXJyID0gYnBmX29ial9uYW1lX2NweShtYXAtXFx1MDAzZW5hbWUsIGF0dHItXFx1MDAzZW1hcF9uYW1lLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1NDMtXFx0XFx0XFx0ICAgICAgIHNpemVvZihhdHRyLVxcdTAwM2VtYXBfbmFtZSkpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMjYtXFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2Vsb2FkX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTI3OlxcdGVyciA9IGJwZl9vYmpfbmFtZV9jcHkocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VuYW1lLCBhdHRyLVxcdTAwM2Vwcm9nX25hbWUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyOC1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGF0dHItXFx1MDAzZXByb2dfbmFtZSkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz03OTM5PXN0YXRpYyBpbnQgYnBmX3NjeF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc5NTktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgbmFtZSk6XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo3OTYwOlxcdFxcdHJldCA9IGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzk2MS1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG9wcy1cXHUwMDNlbmFtZSkpO1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTIxMD1zdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyOC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMsIG5hbWUpOlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMjk6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVxcdTAwM2VuYW1lLCB1dGNwX2NhLVxcdTAwM2VuYW1lLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMzAtXFx0XFx0XFx0XFx0ICAgICBzaXplb2YodGNwX2NhLVxcdTAwM2VuYW1lKSkgXFx1MDAzYz0gMClcXG4tLVxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYz0zNjE9c3RhdGljIGludCBicGZfcWRpc2NfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTM4Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBRZGlzY19vcHMsIGlkKTpcXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM6MzgzOlxcdFxcdGlmIChicGZfb2JqX25hbWVfY3B5KHFkaXNjX29wcy1cXHUwMDNlaWQsIHVxZGlzY19vcHMtXFx1MDAzZWlkLFxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYy0zODQtXFx0XFx0XFx0XFx0ICAgICBzaXplb2YocWRpc2Nfb3BzLVxcdTAwM2VpZCkpIFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuYz04NT1zdGF0aWMgaW50IHNtY19icGZfaHNfY3RybF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuYy05OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzbWNfaHNfY3RybCwgbmFtZSk6XFxubmV0L3NtYy9zbWNfaHNfYnBmLmM6OTk6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkoa19jdHJsLVxcdTAwM2VuYW1lLCB1X2N0cmwtXFx1MDAzZW5hbWUsXFxubmV0L3NtYy9zbWNfaHNfYnBmLmMtMTAwLVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHVfY3RybC1cXHUwMDNlbmFtZSkpIFxcdTAwM2M9IDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA0OjA5LjU0NDgwMjQxMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDY3NDIzMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX29ial9uYW1lX2NweWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMsIGFuZCBJJ20gcHJvYmFibHkgZ29pbmcgdG8gaGF2ZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IHRvIGJlIHRydWx5IHVzZWZ1bC5cblxuKipEaXZpbmcgRGVlcCBpbnRvIGBicGZfb2JqX25hbWVfY3B5YCoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpczogKmBicGZfb2JqX25hbWVfY3B5YC4uLiBzb3VuZHMgbGlrZSB3ZSdyZSBjb3B5aW5nIG9iamVjdCBuYW1lcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBGYWlyIGVub3VnaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3csIHdoZXJlLCBhbmQgd2h5IGl0J3MgdXNlZC4gSXMgaXQgYSBjcml0aWNhbCBwYXRoIGZ1bmN0aW9uPyBBIHV0aWxpdHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGltcGxlbWVudGF0aW9uPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbj8gV2hhdCBhcmUgdGhlIGNvbnN0cmFpbnRzIGl0IGhhcz8qXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIEJQRiBjb21wb25lbnRzLiAqSXMgdGhpcyBhIGRpcmVjdCBjb3B5LCBvciBpcyB0aGVyZSBhbnkgc2FuaXRpemF0aW9uLCB2YWxpZGF0aW9uLCBvciB0cnVuY2F0aW9uIGhhcHBlbmluZz8gVGhhdCdzIHZpdGFsIHRvIGtub3cgaW1tZWRpYXRlbHkuKiBUaGUgc2l6ZSBwYXJhbWV0ZXJzIGFyZSBnb2luZyB0byBiZSBrZXksIGFuZCBJ4oCZbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG9mZi1ieS1vbmUgZXJyb3JzLiBBbHNvLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCBhbnkgbG9ja2luZyBtZWNoYW5pc21zOyBkYXRhIHJhY2VzIGFyZSBteSBtYWluIHdvcnJ5LiBXaGF0IGFyZSB0aGUgbWVtb3J5IGJhcnJpZXJzPyBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IGlmIG11bHRpcGxlIHRocmVhZHMgY2FuIHVzZSB0aGlzLlxuXG5JJ2xsIGJlIGFza2luZyBteXNlbGYgcXVlc3Rpb25zIGFsb25nIHRoZSB3YXk6ICpXaGF0IGlzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZT8gV2hhdCBhcmUgdGhlIGFzc3VtcHRpb25zIG1hZGUgYnkgdGhlIGRldmVsb3BlcnM/IElzIHRoZSBjb2RlIHdlbGwtZG9jdW1lbnRlZCwgb3IgYW0gSSBnb2luZyB0byBoYXZlIHRvIHJldmVyc2UgZW5naW5lZXIgaXQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBlcnJvcnM/IEFyZSB0aGUgZXJyb3IgY29uZGl0aW9ucyBwcm9wZXJseSBoYW5kbGVkLCBvciBhcmUgdGhlcmUgc2lsZW50IGZhaWx1cmVzPyogSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gTWVtb3J5IGFsbG9jYXRpb24sIGRhdGEgbW92ZXMsIGFuZCBjb3B5IGxvb3BzOyB0aGVzZSBjYW4gc2xvdyB0aGluZ3MgZG93bi5cblxuT25jZSBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbnRlcm5hbCB3b3JraW5ncywgSSB3aWxsIHBsYWNlIHRoaXMgZnVuY3Rpb24gaW4gY29udGV4dC4gKklzIGl0IHBhcnQgb2YgYSBsYXJnZXIgb2JqZWN0IG1hbmFnZW1lbnQgc3lzdGVtIHdpdGhpbiBCUEY/IEhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT8gSXMgaXQgdXNlZCBpbiBhbnkgc2Vuc2l0aXZlIGFyZWFzPyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGltcGFjdHMgb2YgdGhpcyB0aGF0IG1heSBiZSBsZXNzIG9idmlvdXM/KiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2UsIGl0cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIEJQRiBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBpdCdzIG9wZXJhdGluZyBhcyBpbnRlbmRlZCwgYW5kIGhvdyBpdCBjb3VsZCBiZSBpbXByb3ZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNDoxOS4wMTIyMjg1NDNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjU6XFx0aW50IGJwZl9vYmpfbmFtZV9jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGludCBzaXplKVxcbjEyMjY6XFx0e1xcbjEyMjc6XFx0XFx0Y29uc3QgY2hhciAqZW5kID0gc3JjICsgc2l6ZTtcXG4xMjI4OlxcdFxcdGNvbnN0IGNoYXIgKm9yaWdfc3JjID0gc3JjO1xcbjEyMjk6XFx0XFxuMTIzMDpcXHRcXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcXG4xMjMxOlxcdFxcdC8qIENvcHkgYWxsIGlzYWxudW0oKSwgJ18nIGFuZCAnLicgY2hhcnMuICovXFxuMTIzMjpcXHRcXHR3aGlsZSAoc3JjIFxcdTAwM2MgZW5kIFxcdTAwMjZcXHUwMDI2ICpzcmMpIHtcXG4xMjMzOlxcdFxcdFxcdGlmICghaXNhbG51bSgqc3JjKSBcXHUwMDI2XFx1MDAyNlxcbjEyMzQ6XFx0XFx0XFx0ICAgICpzcmMgIT0gJ18nIFxcdTAwMjZcXHUwMDI2ICpzcmMgIT0gJy4nKVxcbjEyMzU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIzNjpcXHRcXHRcXHQqZHN0KysgPSAqc3JjKys7XFxuMTIzNzpcXHRcXHR9XFxuMTIzODpcXHRcXG4xMjM5OlxcdFxcdC8qIE5vICdcXFxcMCcgZm91bmQgaW4gXFxcInNpemVcXFwiIG51bWJlciBvZiBieXRlcyAqL1xcbjEyNDA6XFx0XFx0aWYgKHNyYyA9PSBlbmQpXFxuMTI0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjQyOlxcdFxcbjEyNDM6XFx0XFx0cmV0dXJuIHNyYyAtIG9yaWdfc3JjO1xcbjEyNDQ6XFx0fVxcbjEyNDU6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYnBmX29ial9uYW1lX2NweSk7XFxuMTI0NjpcXHRcXG4xMjQ3OlxcdGludCBtYXBfY2hlY2tfbm9fYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXFxuMTI0ODpcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4xMjQ5OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcXG4xMjUwOlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxcbjEyNTE6XFx0e1xcbjEyNTI6XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4xMjUzOlxcdH1cXG4xMjU0OlxcdFxcbjEyNTU6XFx0c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxcbjEyNTY6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9rZXlfaWQsIHUzMiBidGZfdmFsdWVfaWQpXFxuMTI1NzpcXHR7XFxuMTI1ODpcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCAqdmFsdWVfdHlwZTtcXG4xMjU5OlxcdFxcdHUzMiBrZXlfc2l6ZSwgdmFsdWVfc2l6ZTtcXG4xMjYwOlxcdFxcdGludCByZXQgPSAwO1xcbjEyNjE6XFx0XFxuMTI2MjpcXHRcXHQvKiBTb21lIG1hcHMgYWxsb3cga2V5IHRvIGJlIHVuc3BlY2lmaWVkLiAqL1xcbjEyNjM6XFx0XFx0aWYgKGJ0Zl9rZXlfaWQpIHtcXG4xMjY0OlxcdFxcdFxcdGtleV90eXBlID0gYnRmX3R5cGVfaWRfc2l6ZShidGYsIFxcdTAwMjZidGZfa2V5X2lkLCBcXHUwMDI2a2V5X3NpemUpO1xcbjEyNjU6XFx0XFx0XFx0aWYgKCFrZXlfdHlwZSB8fCBrZXlfc2l6ZSAhPSBtYXAtXFx1MDAzZWtleV9zaXplKVxcbjEyNjY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI2NzpcXHRcXHR9IGVsc2Uge1xcbjEyNjg6XFx0XFx0XFx0a2V5X3R5cGUgPSBidGZfdHlwZV9ieV9pZChidGYsIDApO1xcbjEyNjk6XFx0XFx0XFx0aWYgKCFtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2NoZWNrX2J0ZilcXG4xMjcwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNzE6XFx0XFx0fVxcbjEyNzI6XFx0XFxuMTI3MzpcXHRcXHR2YWx1ZV90eXBlID0gYnRmX3R5cGVfaWRfc2l6ZShidGYsIFxcdTAwMjZidGZfdmFsdWVfaWQsIFxcdTAwMjZ2YWx1ZV9zaXplKTtcXG4xMjc0OlxcdFxcdGlmICghdmFsdWVfdHlwZSB8fCB2YWx1ZV9zaXplICE9IG1hcC1cXHUwMDNldmFsdWVfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDQ6MTkuMDEyNzIxMjYzWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNDQ2Nzc5NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25nZXN0aW9uIENvbnRyb2wgTmFtZSBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBgYnBmX29ial9uYW1lX2NweWAgZG9lcyBhIGBtZW1zZXRgIGJlZm9yZSBjb3B5aW5nLCB3aGljaCBtZWFucyB0aGUgZGVzdGluYXRpb24gYXJyYXksIHNwZWNpZmljYWxseSBgdGNwX2NhLVx1MDAzZW5hbWVgLCBpcyBhbHdheXMgZnVsbHkgemVyb2VkIG91dCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGlzIGVuc3VyZXMgY29tcGxldGUgaW5pdGlhbGl6YXRpb24sIGluY2x1ZGluZyBwYWRkaW5nLCB1cCB0byBgVENQX0NBX05BTUVfTUFYYC4gQ29uc2VxdWVudGx5LCBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZXMgaW4gQlBGIGNvbnRleHRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkLiBCdWlsdC1pbiBjb25nZXN0aW9uIGNvbnRyb2xzIGFyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCwgd2hpY2ggaW5oZXJlbnRseSBtZWFucyB0aGV5IGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gVGhlcmVmb3JlLCB0aGUgYGNhX29wcy1cdTAwM2VuYW1lYCBmaWVsZCBpcyBjb25zaXN0ZW50bHkgaW5pdGlhbGl6ZWQuXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgbG9jYWwgdmFyaWFibGUgYGNhX25hbWVgIGluIGBkb190Y3BfZ2V0c29ja29wdGAuIFRoZSBhcnJheSBgY2FfbmFtZWAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYHt9YCB3aGljaCB6ZXJvZXMgb3V0IHRoZSBlbnRpcmUgYXJyYXkuIFRoZW4sIGBtZW1jcHlgIGNvcGllcyBgVENQX0NBX05BTUVfTUFYYCBieXRlcyBmcm9tIGBjYV9vcHMtXHUwMDNlbmFtZWAgaW50byBgY2FfbmFtZWAuICBCZWNhdXNlIGBjYV9vcHMtXHUwMDNlbmFtZWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGBjYV9uYW1lYCBhbHNvIGJlY29tZXMgZnVsbHkgaW5pdGlhbGl6ZWQuICBGaW5hbGx5LCBgY29weV90b19zb2NrcHRyYCB0cmFuc2ZlcnMgYSBudW1iZXIgb2YgYnl0ZXMgbm8gbW9yZSB0aGFuIHRoZSBzaXplIG9mIGBjYV9uYW1lYCB0byB1c2VyIHNwYWNlLCBlbGltaW5hdGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuXG5cbkJ1dCwgd2hhdCBpZiBgY2Ffb3BzYCBpcyBOVUxMPyAgSW4gYGRvX3RjcF9nZXRzb2Nrb3B0YCwgYGNhX29wc2AgaXMgb2J0YWluZWQgZnJvbSBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AuIENhbiBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AgZXZlciBiZSBOVUxMPyAgTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgaXQncyBwb3NzaWJsZTogIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBpcyBzZXQgdG8gTlVMTCBpbiBgbXB0Y3BfY2FfcmVzZXRgLiBJZiBgY2Ffb3BzYCAqaXMqIE5VTEwsIHRoZSBgbWVtY3B5YCB3b3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlciEgVGhlIHBvdGVudGlhbCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXMgdGhlcmUsIHRoZW4uIFRoaXMgaXMgaGFwcGVuaW5nIGluIE1QVENQIGNvZGUsIGJ1dCBgZG9fdGNwX2dldHNvY2tvcHRgIGlzIGZvciBUQ1Agc29ja2V0cy4gIENvdWxkIE1QVENQIGNvZGUgY2FsbCBgZG9fdGNwX2dldHNvY2tvcHRgPyBXZSBuZWVkIHRvIHZlcmlmeSBpZiBgY2Ffb3BzYCBjYW4gYmUgTlVMTCBpbiBgZG9fdGNwX2dldHNvY2tvcHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA0OjQxLjQ1OTUwNjA5NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzMTU4NzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb190Y3BfZ2V0c29ja29wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD00OTk9X19wb2xsX3QgdGNwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvdGNwLmgtNTAwLVxcdFxcdCAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6NTAxOmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG5pbmNsdWRlL25ldC90Y3AuaC01MDItXFx0XFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTYwMD1zdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHN0cnVjdCBzb2NrICpzaywgY2hhciAqb3B0dmFsLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTYxMy1cXHRcXHRvcHR2YWxbLS0oKm9wdGxlbildID0gJ1xcXFwwJztcXG5uZXQvY29yZS9maWx0ZXIuYzo1NjE0OlxcdFxcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgVENQX0NPTkdFU1RJT04sXFxubmV0L2NvcmUvZmlsdGVyLmMtNTYxNS1cXHRcXHRcXHRcXHRcXHQgS0VSTkVMX1NPQ0tQVFIob3B0dmFsKSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU2NTM9c3RhdGljIGludCBzb2xfdGNwX3NvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MDEtXFxubmV0L2NvcmUvZmlsdGVyLmM6NTcwMjpcXHRcXHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIFNPTF9UQ1AsIG9wdG5hbWUsXFxubmV0L2NvcmUvZmlsdGVyLmMtNTcwMy1cXHRcXHRcXHRcXHRcXHQgS0VSTkVMX1NPQ0tQVFIob3B0dmFsKSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0MTA9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00NDgxLVxcbm5ldC9pcHY0L3RjcC5jOjQ0ODI6aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbm5ldC9pcHY0L3RjcC5jLTQ0ODMtXFx0XFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00ODU3PWJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbm5ldC9pcHY0L3RjcC5jLTQ4NTgte1xcbm5ldC9pcHY0L3RjcC5jOjQ4NTk6XFx0LyogVENQIGRvX3RjcF9nZXRzb2Nrb3B0IGhhcyBvcHRpbWl6ZWQgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvblxcbm5ldC9pcHY0L3RjcC5jLTQ4NjAtXFx0ICogdG8gYXZvaWQgZXh0cmEgc29ja2V0IGxvY2sgZm9yIFRDUF9aRVJPQ09QWV9SRUNFSVZFLlxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDg2OD1pbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg3Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwLmM6NDg3NzpcXHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBVU0VSX1NPQ0tQVFIob3B0dmFsKSxcXG5uZXQvaXB2NC90Y3AuYy00ODc4LVxcdFxcdFxcdFxcdCBVU0VSX1NPQ0tQVFIob3B0bGVuKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA0OjQ2LjQ5MTEwMzg4MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg0NzQ0NDI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYGNhX29wc2AgaXMgTlVMTCwgdGhlbiB0cnlpbmcgdG8gYWNjZXNzIGBjYV9vcHMtXHUwMDNlbmFtZWAgd2lsbCB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGFua2Z1bGx5LCBJJ20gcHJldHR5IHN1cmUgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIG9vcHMgbWVjaGFuaXNtcyB3aWxsIGNhdGNoIHRoYXQga2luZCBvZiB0aGluZy4gSXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQg4oCTIGl0J3Mgbm90IGEgc2VjdXJpdHkgbGVhaywgbGlrZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHdvdWxkIGJlLiBTdGlsbCwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGtlcm5lbCBpc24ndCBjcmFzaGluZyFcblxuSGFuZyBvbiBhIHNlY29uZOKApiBEb2VzIGBkb190Y3BfZ2V0c29ja29wdGAgKml0c2VsZiogZG8gYSBudWxsIGNoZWNrIG9uIGBjYV9vcHNgPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcG90ZW50aWFsIGRlcmVmZXJlbmNlIGlzIGV2ZW4gcG9zc2libGUuIEJlc3QgdG8gYmUgc3VyZSBhbmQgdHJhY2UgdGhlIGNhbGxzLiBBbHJpZ2h0LCBJJ2xsIGdvIGNoZWNrIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDU3NyBpbiBgZG9fdGNwX2dldHNvY2tvcHRgLiBUaGF0IHNob3VsZCBzaG93IG1lIHRoZSByZWxldmFudCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzM3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNDo1OS4zMzg1NTEyNTlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5Mjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTYwOlxcdFxcdFxcdGludCBhdHRyO1xcbjQ1NjE6XFx0XFxuNDU2MjpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuNDU2MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTY0OlxcdFxcbjQ1NjU6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1NjY6XFx0XFx0XFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXFx1MDAzZWljc2tfY2Ffb3BzKTtcXG40NTY3OlxcdFxcdFxcdGlmIChjYV9vcHMgXFx1MDAyNlxcdTAwMjYgY2Ffb3BzLVxcdTAwM2VnZXRfaW5mbylcXG40NTY4OlxcdFxcdFxcdFxcdHN6ID0gY2Ffb3BzLVxcdTAwM2VnZXRfaW5mbyhzaywgfjBVLCBcXHUwMDI2YXR0ciwgXFx1MDAyNmluZm8pO1xcbjQ1Njk6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDU3MDpcXHRcXG40NTcxOlxcdFxcdFxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzeik7XFxuNDU3MjpcXHRcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxcbjQ1NzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNDU3NDpcXHRcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgXFx1MDAyNmluZm8sIGxlbikpXFxuNDU3NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTc2OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1Nzc6XFx0XFx0fVxcbjQ1Nzg6XFx0XFx0Y2FzZSBUQ1BfUVVJQ0tBQ0s6XFxuNDU3OTpcXHRcXHRcXHR2YWwgPSAhaW5ldF9jc2tfaW5fcGluZ3BvbmdfbW9kZShzayk7XFxuNDU4MDpcXHRcXHRcXHRicmVhaztcXG40NTgxOlxcdFxcbjQ1ODI6XFx0XFx0Y2FzZSBUQ1BfQ09OR0VTVElPTjoge1xcbjQ1ODM6XFx0XFx0XFx0Y2hhciBjYV9uYW1lW1RDUF9DQV9OQU1FX01BWF0gPSB7fTtcXG40NTg0OlxcdFxcbjQ1ODU6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjQ1ODY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNDU4NzpcXHRcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTtcXG40NTg4OlxcdFxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXFxuNDU4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTkwOlxcdFxcbjQ1OTE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1OTI6XFx0XFx0XFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXFx1MDAzZWljc2tfY2Ffb3BzKTtcXG40NTkzOlxcdFxcdFxcdG1lbWNweShjYV9uYW1lLCBjYV9vcHMtXFx1MDAzZW5hbWUsIHNpemVvZihjYV9uYW1lKSk7XFxuNDU5NDpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG40NTk1OlxcdFxcbjQ1OTY6XFx0XFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpXFxuNDU5NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTk4OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1OTk6XFx0XFx0fVxcbjQ2MDA6XFx0XFx0Y2FzZSBUQ1BfVUxQOlxcbjQ2MDE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjQ2MDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNDYwMzpcXHRcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX1VMUF9OQU1FX01BWCk7XFxuNDYwNDpcXHRcXHRcXHRpZiAoIWljc2stXFx1MDAzZWljc2tfdWxwX29wcykge1xcbjQ2MDU6XFx0XFx0XFx0XFx0bGVuID0gMDtcXG40NjA2OlxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXFxuNDYwNzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NjA4OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjQ2MDk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNDo1OS4zMzk5NDc0MjlaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIzNzU4NjE1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIE5hbWUgUmV0cmlldmFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYFRDUF9DT05HRVNUSU9OYCAobGluZSA0NTkzKSB3aGVyZSBgY2Ffb3BzYCBpc24ndCBleHBsaWNpdGx5IGNoZWNrZWQgYmVmb3JlIHRoZSBgbWVtY3B5YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBjb25jZXJuaW5nIGJlY2F1c2UgaWYgYGNhX29wc2AgaXMgTlVMTCwgaXQnbGwgY3Jhc2guIEhvd2V2ZXIsIGFmdGVyIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgdGhpcyBzZWVtcyB1bmxpa2VseSBmb3IgYSBzdGFuZGFyZCBUQ1Agc29ja2V0IGFzIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBpcyBpbml0aWFsaXplZCBpbiBgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sYC4gVGhlIG9ubHkgbGlrZWx5IHNjZW5hcmlvIHdoZXJlIGBjYV9vcHNgIGNvdWxkIGJlIE5VTEwgaXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIE1QVENQLiBFdmVuIHRoZW4sIHRoZSBOVUxMIGRlcmVmZXJlbmNlIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy5cblxuTXkgZm9jdXMgcXVpY2tseSBzaGlmdHMgdG8gd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2AuIFRoaXMgaXMgZXhwbGljaXRseSB6ZXJvZWQsIHJpZ2h0IGZyb20gdGhlIHN0YXJ0LiBXZSBjb3B5IGBjYV9vcHMtXHUwMDNlbmFtZWAgaW50byBgY2FfbmFtZWAsIGFuZCB0aGVuIGBjYV9uYW1lYCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gR2l2ZW4gdGhlIHplcm8gaW5pdGlhbGl6YXRpb24gb2YgYGNhX25hbWVgIGFuZCB0aGUgZnVsbHkgaW5pdGlhbGl6ZWQgYGNhX29wcy1cdTAwM2VuYW1lYCwgdGhlcmUncyBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuXG5cblNvLCB0aGUgb3JpZ2luYWwgY29kZSBjb3BpZWQgZGlyZWN0bHkgZnJvbSBgaWNzay1cdTAwM2VpY3NrX2NhX29wcy1cdTAwM2VuYW1lYCB0byB1c2VyIHNwYWNlLiBUaGUgbmV3IGNvZGUgaXMgY29weWluZyB0byBhIGxvY2FsIHplcm8taW5pdGlhbGl6ZWQgYnVmZmVyLCBwcm90ZWN0ZWQgYnkgYW4gUkNVIGxvY2ssIGJlZm9yZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIFRoaXMgY2hhbmdlIGZpeGVzIGEgZGF0YSByYWNlIGJ5IHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIG9sZCBgY2Ffb3BzYCB3YXMgZnJlZWQuXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYG1lbWNweWAgZG9lc24ndCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGNvZGUgY29waWVzIGBzaXplb2YoY2FfbmFtZSlgLCB3aGljaCBpcyBgVENQX0NBX05BTUVfTUFYYC4gTm93LCBgY2Ffb3BzLVx1MDAzZW5hbWVgIGlzIGRlY2xhcmVkIGFzIGBjaGFyIG5hbWVbVENQX0NBX05BTUVfTUFYXTtgIHdpdGhpbiB0aGUgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLiBTbywgYHNpemVvZihjYV9vcHMtXHUwMDNlbmFtZSlgIGlzICphbHNvKiBleGFjdGx5IGBUQ1BfQ0FfTkFNRV9NQVhgLiBUaGUgYG1lbWNweWAgcmVhZHMgZXhhY3RseSB0aGUgcmlnaHQgYW1vdW50IG9mIG1lbW9yeSBmcm9tIGFuIGFsbG9jYXRlZCBidWZmZXIuXG5cbk9rYXksIGxldCdzIGFkZHJlc3MgdGhlIHBvdGVudGlhbCB0aGF0IGBjYV9vcHMtXHUwMDNlbmFtZWAgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIGJ5dGVzLiBCYXNlZCBvbiB3aGF0IEkga25vdyBvZiBidWlsdC1pbiBjb25nZXN0aW9uIGNvbnRyb2xzIHRoZXkgYXJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB0aGVyZWZvcmUgemVyby1pbml0aWFsaXplZC4gQlBGIGNvbmdlc3Rpb24gY29udHJvbHMgdXNlIGBicGZfb2JqX25hbWVfY3B5YCB3aGljaCBkb2VzIGBtZW1zZXQoZHN0LCAwLCBzaXplKWAgYmVmb3JlIGNvcHlpbmcgdGhlIG5hbWUuIFNvLCBgY2Ffb3BzLVx1MDAzZW5hbWVgIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC5cblxuTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogV2hhdCBhYm91dCBhIGtlcm5lbCBtb2R1bGUgdGhhdCByZWdpc3RlcnMgYSBjb25nZXN0aW9uIGNvbnRyb2wgYW5kICpkb2Vzbid0KiB6ZXJvLWluaXRpYWxpemUgdGhlIGBuYW1lYCBmaWVsZD8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGB0Y3BfY29uZ2VzdGlvbl9vcHNgIGluIG1vZHVsZXMuIFVzdWFsbHksIG1vZHVsZXMgZGVmaW5lIHRoZW0gYXMgYHN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIG15X2NhID0geyAuLi4gfTtgLiBTdGF0aWMgdmFyaWFibGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRvIGJlIGNlcnRhaW4gaWYgYW55IG1vZHVsZSBkeW5hbWljYWxseSBhbGxvY2F0ZXMgYHRjcF9jb25nZXN0aW9uX29wc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NTYwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA1OjIxLjcxNTgxMjUzNVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzMzgyOTM2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21hbGxvYy4qdGNwX2Nvbmdlc3Rpb25fb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNToyNi44NDk2NTE0NjZaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMjU0OTkzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBremFsbG9jLip0Y3BfY29uZ2VzdGlvbl9vcHNgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBremFsbG9jLip0Y3BfY29uZ2VzdGlvbl9vcHNgLiBUaGF0J3MgYSBwcmV0dHkgc3BlY2lmaWMgc2VhcmNoIHRlcm0sIHNvIEknbSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYWxsb2NhdGlvbiBvZiBjb25nZXN0aW9uIGNvbnRyb2wgb2JqZWN0cywgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX2Nvbmdlc3Rpb25fb3BzYCBzdHJ1Y3R1cmUuIFRoZSBga3phbGxvY2AgZnVuY3Rpb24gaGludHMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggemVyb2VkIG1lbW9yeS4gS25vd2luZyB0aGUga2VybmVsLCB0aGlzIHN1Z2dlc3RzIHdlJ3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3IGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0sIG9yIHBvdGVudGlhbGx5IG1vZGlmaWNhdGlvbnMgdG8gYW4gZXhpc3Rpbmcgb25lLCB3aGVyZSBhIGNsZWFuIGFsbG9jYXRpb24gaXMgY3J1Y2lhbC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGluaXRpYWxpemF0aW9uIGJ1Z3MgbHVya2luZyB3aXRoaW4gdGhvc2UgYWxsb2NhdGlvbiBwYXRocy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYXJvdW5kIHRoZSBhbGxvY2F0aW9ucyBhcmUgZG9pbmcuIFRoaXMgbG9va3MgaW50ZXJlc3RpbmcuLi4gbGV0J3MgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNTozNy4wNzUxNTM5OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyNzcyOTA4MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvYy4qdGNwX2Nvbmdlc3Rpb25fb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNTo0Mi40MDI4OTEzNDJaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2OTI3MDk2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25nZXN0aW9uIENvbnRyb2wgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBiZWNhdXNlIG9mIHRoZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG5hbWUuIE15IGZpcnN0IHRob3VnaHQgd2FzIHRoYXQgdGhlIGNvZGUgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSB2dWxuZXJhYmlsaXR5IGJ5IGNvcHlpbmcgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBuYW1lIChgY2Ffb3BzLVx1MDAzZW5hbWVgKSB0byBhIGxvY2FsIGJ1ZmZlciBhbmQgdGhlbiB0byB1c2VyIHNwYWNlLlxuXG5JIGNvbnNpZGVyZWQgdGhhdCBpZiB0aGUgYGNhX29wcy1cdTAwM2VuYW1lYCBmaWVsZCBpdHNlbGYgd2Fzbid0IGluaXRpYWxpemVkLCB3ZSBjb3VsZCBoYXZlIGEgcHJvYmxlbS4gSG93ZXZlciwgSSBxdWlja2x5IHJlYWxpemVkIHRoYXQgYWxsIGB0Y3BfY29uZ2VzdGlvbl9vcHNgIGFyZSBlaXRoZXIgc3RhdGljYWxseSBpbml0aWFsaXplZCBhdCBjb21waWxlIHRpbWUgKHRodXMgemVyb2VkKSBvciBhbGxvY2F0ZWQgdmlhIEJQRiwgd2hpY2ggaGFzIGJlZW4gdmVyaWZpZWQgdG8gemVyby1pbml0aWFsaXplIHRoZSBuYW1lIGZpZWxkLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBjYV9vcHMtXHUwMDNlbmFtZWAuXG5cbkV2ZW4gaWYgdGhlIG5hbWUgKndhcyogdW5pbml0aWFsaXplZCwgdGhlIG9yaWdpbmFsIGNvZGUgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UsIHNvIHRoZSBwYXRjaCBpc24ndCAqaW50cm9kdWNpbmcqIGEgbmV3IGlzc3VlIGJ1dCBpcyBjaGFuZ2luZyB0aGUgbWV0aG9kLiBUaGUgb3JpZ2luYWwgY29kZSBhbHJlYWR5IHVzZWQgYGxlbmAsIHVwIHRvIGBUQ1BfQ0FfTkFNRV9NQVhgLiBOb3csIHdlIGNvcHkgYHNpemVvZihjYV9uYW1lKWAgKHNhbWUgc2l6ZSBhcyBgVENQX0NBX05BTUVfTUFYYCkgZnJvbSBgY2Ffb3BzLVx1MDAzZW5hbWVgIHRvIGEgbG9jYWwgYnVmZmVyIGNhbGxlZCBgY2FfbmFtZWAsIGFuZCB0aGVuIGNvcHkgYSBwb3J0aW9uIG9mIHRoYXQgYnVmZmVyIHVwIHRvIGBsZW5gIGJ5dGVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb2RlIHJlYWRzIGV4YWN0bHkgYFRDUF9DQV9OQU1FX01BWGAgZnJvbSBgY2Ffb3BzLVx1MDAzZW5hbWVgLCBidXQgb25seSB3cml0ZXMgYGxlbmAgYnl0ZXMgdG8gdXNlciBzcGFjZS4gRXZlbiBpZiB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCBieXRlcyBhdCB0aGUgZW5kLCB0aGUgaXNzdWUgaXMgbm90IHRyaWdnZXJlZC5cblxuVGhlbiwgSSB0aG91Z2h0IGFib3V0IEtNU0FOLCBidXQgaWYgdGhlIGBjYV9vcHMtXHUwMDNlbmFtZWAgKmRpZCogY29udGFpbiB1bmluaXRpYWxpemVkIGJ5dGVzLCB0aGUgYG1lbWNweWAgdG8gYGNhX25hbWVgICp3b3VsZCogdHJpZ2dlciBhIEtNU0FOIHdhcm5pbmcuIEJ1dCB3ZSBrbm93IGl0J3MgaW5pdGlhbGl6ZWQsIHNvIHRoZSBLTVNBTiBjb25jZXJuIGlzIHVuZm91bmRlZC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIHF1aWNrbHkgc2VlIHRoZXNlIGNoYW5nZXMgYXJlIGFib3V0IGFkZGluZyBSQ1UgbG9ja2luZyBhbmQgYFJFQURfT05DRWAgb3IgYFdSSVRFX09OQ0VgIHRvIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYC4gVGhpcyBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuKiAgIEluIGBkb190Y3BfZ2V0c29ja29wdGAsIHdlIG5vdyBoYXZlIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMpYCwgd2hpY2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMuIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuXG4qICAgSW4gYHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sYCwgYFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpYCBpcyB1c2VkLlxuKiAgIFNhbWUgdGhpbmcgZm9yIHRoZSBEQ1RDUCBpbml0aWFsaXphdGlvbi4gV2Ugc2VlIGBXUklURV9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2NhX29wcywgXHUwMDI2ZGN0Y3BfcmVubylgLlxuKiAgIFNpbWlsYXIgY2hhbmdlcyBpbiBgdGNwX2NhX29wZW5yZXFfY2hpbGRgIGFuZCBgdGNwX291dHB1dC5jYC4gQWdhaW4sIGp1c3QgYFdSSVRFX09OQ0VgLlxuKiAgIEZpbmFsbHksIHdlIHNlZSBgV1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBOVUxMKWAgaW4gYG1wdGNwX2NhX3Jlc2V0YC5cblxuKipDb25jbHVzaW9uKipcblxuVGhlIHBhdGNoIGZvY3VzZXMgb24gZml4aW5nIGRhdGEgcmFjZXMgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhcm91bmQgdGhlIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBwb2ludGVyLiBJbiBgZG9fdGNwX2dldHNvY2tvcHRgLCBpdCBjb3BpZXMgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBuYW1lIHRvIGEgbG9jYWwgYnVmZmVyIGBjYV9uYW1lYCB1bmRlciBSQ1UgbG9jayBiZWZvcmUgc2VuZGluZyBpdCB0byB1c2VyIHNwYWNlLiBUaGUgbG9jYWwgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2Ugb2YgdGhlIGNvcHksIGBjYV9vcHMtXHUwMDNlbmFtZWAsIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSB3aXRoaW4gYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLCBhbmQgaXMgYWxzbyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCBlaXRoZXIgc3RhdGljYWxseSBvciBieSBCUEYncyB6ZXJvLWluaXRpYWxpemF0aW9uLiBUaGVyZSdzIG5vIHdheSB0aGlzIHBhdGNoIGlzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGxlYWtpbmcgaXQgdG8gdXNlciBzcGFjZS5cblxuVGhlIGlzc3VlIGFkZHJlc3NlZCBoZXJlIGlzIGRhdGEgcmFjZXMsIHdoaWNoIGNhbiBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gS0FTQU4gYW5kIEtDU0FOIGFyZSB3ZWxsIHN1aXRlZCB0byBkZXRlY3RpbmcgdGhvc2UgaXNzdWVzLCB0aGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIHNwZWNpZmljIHBhdGNoLiBXZSBjYW4gdGhlcmVmb3JlIHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoZSBLTVNBTiByZWFzb25pbmcgaXMgdGhhdCBkdWUgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2Ffb3BzLVx1MDAzZW5hbWVgIHRoZSBLTVNBTiBmdXp6aW5nIHdvdWxkIG5vdCB0cmlnZ2VyIGFueSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDU3NSwiT3V0cHV0VG9rZW5zIjoyNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA2OjA1LjA5NTYwNDMwM1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgb24gYGljc2stXFx1MDAzZWljc2tfY2Ffb3BzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zLCBhbmQgYnkgY29weWluZyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG5hbWUgdG8gYSBsb2NhbCBidWZmZXIgdW5kZXIgUkNVIGxvY2sgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLiBUaGUgbG9jYWwgYnVmZmVyIGBjYV9uYW1lYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2ApLiBUaGUgc291cmNlIGJ1ZmZlciBgY2Ffb3BzLVxcdTAwM2VuYW1lYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgaW4gYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLCB3aGljaCBpcyBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIsIG9yIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgemVyby1pbml0aWFsaXplZCBieSB0aGUgQlBGIGluZnJhc3RydWN0dXJlIHZpYSBgYnBmX29ial9uYW1lX2NweWApLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSBkYXRhIHJhY2VzIHRoYXQgY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBvbiBgaWNzay1cXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXFx1MDAzZW5hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciwgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBicGZfb2JqX25hbWVfY3B5YCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowd9q8x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 17:48:37 +0000 UTC FinishedAt: 2026-08-26 18:06:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_CONG_DCTCP", "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_CONG_DCTCP", "MPTCP" ], "series_id": "2f1649c0-f2ae-4dba-91fe-85e6de6ced71" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "do_tcp_getsockopt", "tcp_assign_congestion_control", "tcp_ca_openreq_child" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQ09OR19EQ1RDUCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3RjcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3RjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3RjcF9jYV9vcGVucmVxX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgb24gYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXHUwMDNlbmFtZWAgaXMgYSBmaXhlZC1zaXplIGFycmF5IGluIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgd2hpY2ggaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCBvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSB2aWEgYGJwZl9vYmpfbmFtZV9jcHlgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgZGF0YSByYWNlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGluIFRDUCBhbmQgTVBUQ1Agc29ja2V0cy4gSXQgYWRkcyBgUkVBRF9PTkNFYCwgYFdSSVRFX09OQ0VgLCBhbmQgUkNVIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGFjY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1pc3NlZCByYWNlIGNvbmRpdGlvbnMgcmVtYWluLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGEwOTdmNWI0NWM1ZDY5ZWRlOTY2MjM1Yzg3NjVhMzk0MDFkMWM3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjUxOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmM0NTc3NmQzZWQ5MGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NTYyLDkgJiM0Mzs0NTYyLDExIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4tXHRcdGNhX29wcyA9IGljc2stXHUwMDNlaWNza19jYV9vcHM7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRjYV9vcHMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcyk7XG4gXHRcdGlmIChjYV9vcHMgXHUwMDI2XHUwMDI2IGNhX29wcy1cdTAwM2VnZXRfaW5mbylcbiBcdFx0XHRzeiA9IGNhX29wcy1cdTAwM2VnZXRfaW5mbyhzaywgfjBVLCBcdTAwMjZhdHRyLCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc3opO1xuIFx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXG5AQCAtNDU3NywxNiAmIzQzOzQ1NzksMjQgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuIFx0XHR2YWwgPSAhaW5ldF9jc2tfaW5fcGluZ3BvbmdfbW9kZShzayk7XG4gXHRcdGJyZWFrO1xuIFxuLVx0Y2FzZSBUQ1BfQ09OR0VTVElPTjpcbiYjNDM7XHRjYXNlIFRDUF9DT05HRVNUSU9OOiB7XG4mIzQzO1x0XHRjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O1xuJiM0MztcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfQ0FfTkFNRV9NQVgpO1xuIFx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLVx1MDAzZW5hbWUsIGxlbikpXG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMpO1xuJiM0MztcdFx0bWVtY3B5KGNhX25hbWUsIGNhX29wcy1cdTAwM2VuYW1lLCBzaXplb2YoY2FfbmFtZSkpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdHJldHVybiAwO1xuLVxuJiM0MztcdH1cbiBcdGNhc2UgVENQX1VMUDpcbiBcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmNcbmluZGV4IGU5ZjZjNzdlMDYzMTYuLjhlODNlZjgxZmMxODcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfY29uZy5jXG5AQCAtMjIzLDcgJiM0MzsyMjMsNyBAQCB2b2lkIHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcbiBcdGNhID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2VpcHY0LnRjcF9jb25nZXN0aW9uX2NvbnRyb2wpO1xuIFx0aWYgKHVubGlrZWx5KCFicGZfdHJ5X21vZHVsZV9nZXQoY2EsIGNhLVx1MDAzZW93bmVyKSkpXG4gXHRcdGNhID0gXHUwMDI2dGNwX3Jlbm87XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4mIzQzO1x0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG5AQCAtMjUzLDcgJiM0MzsyNTMsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfcmVpbml0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssXG4gXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4gXG4gXHR0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc2spO1xuLVx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuJiM0MztcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpO1xuIFx0aWNzay1cdTAwM2VpY3NrX2NhX3NldHNvY2tvcHQgPSAxO1xuIFx0bWVtc2V0KGljc2stXHUwMDNlaWNza19jYV9wcml2LCAwLCBzaXplb2YoaWNzay1cdTAwM2VpY3NrX2NhX3ByaXYpKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGN0Y3AuYyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jXG5pbmRleCAyNzRlNjI4ZTdjZjg2Li45OWY2OGMyOTkyZDBmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2RjdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jXG5AQCAtMTExLDcgJiM0MzsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaylcbiBcdC8qIE5vIEVDTiBzdXBwb3J0PyBGYWxsIGJhY2sgdG8gUmVuby4gQWxzbyBuZWVkIHRvIGNsZWFyXG4gXHQgKiBFQ1QgZnJvbSBzayBzaW5jZSBpdCBpcyBzZXQgZHVyaW5nIDNXSFMgZm9yIERDVENQLlxuIFx0ICovXG4tXHRpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMgPSBcdTAwMjZkY3RjcF9yZW5vO1xuJiM0MztcdFdSSVRFX09OQ0UoaW5ldF9jc2soc2spLVx1MDAzZWljc2tfY2Ffb3BzLCBcdTAwMjZkY3RjcF9yZW5vKTtcbiBcdElORVRfRUNOX2RvbnR4bWl0KHNrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXG5pbmRleCBmM2ZhMGIxOGVkYTA2Li4wZGRmZDVhZjZlNThmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbkBAIC01MDcsNyAmIzQzOzUwNyw3IEBAIHZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXHRcdGNhID0gdGNwX2NhX2ZpbmRfa2V5KGNhX2tleSk7XG4gXHRcdGlmIChsaWtlbHkoY2EgXHUwMDI2XHUwMDI2IGJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtXHUwMDNlb3duZXIpKSkge1xuIFx0XHRcdGljc2stXHUwMDNlaWNza19jYV9kc3RfbG9ja2VkID0gdGNwX2NhX2RzdF9sb2NrZWQoZHN0KTtcbi1cdFx0XHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpO1xuIFx0XHRcdGNhX2dvdF9kc3QgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggZjI3MDlkNTg1ZWRiZC4uNzQ3MjdiN2ViNDQ2ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtNDA5Miw3ICYjNDM7NDA5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9jYV9kc3RfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiBcdGlmIChsaWtlbHkoY2EgXHUwMDI2XHUwMDI2IGJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtXHUwMDNlb3duZXIpKSkge1xuIFx0XHRicGZfbW9kdWxlX3B1dChpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLVx1MDAzZW93bmVyKTtcbiBcdFx0aWNzay1cdTAwM2VpY3NrX2NhX2RzdF9sb2NrZWQgPSB0Y3BfY2FfZHN0X2xvY2tlZChkc3QpO1xuLVx0XHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4mIzQzO1x0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMsIGNhKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li4wMDZkZTM5ZTgxNjU2IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMzIxOCw3ICYjNDM7MzIxOCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NhX3Jlc2V0KHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdC8qIG5vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3BzLCB0aGUgbmFtZSB3aWxsIHN1ZmZpY2UgKi9cbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gTlVMTDtcbiYjNDM7XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9DT05HX0RDVENQJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fdGNwX2dldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2wmIzM0OywKICAgICYjMzQ7dGNwX2NhX29wZW5yZXFfY2hpbGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZGF0YSByYWNlcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlzc3VlcyB3aGVuIGFjY2Vzc2luZyBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AgaW4gVENQIGFuZCBNUFRDUCBzb2NrZXRzLiBJdCBhZGRzIGBSRUFEX09OQ0VgLCBgV1JJVEVfT05DRWAsIGFuZCBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgYWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWlzc2VkIHJhY2UgY29uZGl0aW9ucyByZW1haW4uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YTA5N2Y1YjQ1YzVkNjllZGU5NjYyMzVjODc2NWEzOTQwMWQxYzczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTc6NTE6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmM0NTc3NmQzZWQ5MGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC00NTYyLDkgJiM0Mzs0NTYyLDExIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAkJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWNhX29wcyA9IGljc2stJmd0O2ljc2tfY2Ffb3BzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJY2Ffb3BzID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzKTsKIAkJaWYgKGNhX29wcyAmYW1wOyZhbXA7IGNhX29wcy0mZ3Q7Z2V0X2luZm8pCiAJCQlzeiA9IGNhX29wcy0mZ3Q7Z2V0X2luZm8oc2ssIH4wVSwgJmFtcDthdHRyLCAmYW1wO2luZm8pOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHN6KTsKIAkJaWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sICZhbXA7bGVuLCBzaXplb2YoaW50KSkpCkBAIC00NTc3LDE2ICYjNDM7NDU3OSwyNCBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCiAJCXZhbCA9ICFpbmV0X2Nza19pbl9waW5ncG9uZ19tb2RlKHNrKTsKIAkJYnJlYWs7CiAKLQljYXNlIFRDUF9DT05HRVNUSU9OOgomIzQzOwljYXNlIFRDUF9DT05HRVNUSU9OOiB7CiYjNDM7CQljaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9OwomIzQzOwogCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfQ0FfTkFNRV9NQVgpOwogCQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDtsZW4sIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgaWNzay0mZ3Q7aWNza19jYV9vcHMtJmd0O25hbWUsIGxlbikpCiYjNDM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQljYV9vcHMgPSBSRUFEX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMpOwomIzQzOwkJbWVtY3B5KGNhX25hbWUsIGNhX29wcy0mZ3Q7bmFtZSwgc2l6ZW9mKGNhX25hbWUpKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwkJaWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7Ci0KJiM0MzsJfQogCWNhc2UgVENQX1VMUDoKIAkJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggZTlmNmM3N2UwNjMxNi4uOGU4M2VmODFmYzE4NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0yMjMsNyAmIzQzOzIyMyw3IEBAIHZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKQogCWNhID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0mZ3Q7aXB2NC50Y3BfY29uZ2VzdGlvbl9jb250cm9sKTsKIAlpZiAodW5saWtlbHkoIWJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtJmd0O293bmVyKSkpCiAJCWNhID0gJmFtcDt0Y3BfcmVubzsKLQlpY3NrLSZndDtpY3NrX2NhX29wcyA9IGNhOwomIzQzOwlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBjYSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAltZW1zZXQoaWNzay0mZ3Q7aWNza19jYV9wcml2LCAwLCBzaXplb2YoaWNzay0mZ3Q7aWNza19jYV9wcml2KSk7CkBAIC0yNTMsNyAmIzQzOzI1Myw3IEBAIHN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAKIAl0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc2spOwotCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gY2E7CiYjNDM7CVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGNhKTsKIAlpY3NrLSZndDtpY3NrX2NhX3NldHNvY2tvcHQgPSAxOwogCW1lbXNldChpY3NrLSZndDtpY3NrX2NhX3ByaXYsIDAsIHNpemVvZihpY3NrLSZndDtpY3NrX2NhX3ByaXYpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2RjdGNwLmMgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuYwppbmRleCAyNzRlNjI4ZTdjZjg2Li45OWY2OGMyOTkyZDBmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfZGN0Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuYwpAQCAtMTExLDcgJiM0MzsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykKIAkvKiBObyBFQ04gc3VwcG9ydD8gRmFsbCBiYWNrIHRvIFJlbm8uIEFsc28gbmVlZCB0byBjbGVhcgogCSAqIEVDVCBmcm9tIHNrIHNpbmNlIGl0IGlzIHNldCBkdXJpbmcgM1dIUyBmb3IgRENUQ1AuCiAJICovCi0JaW5ldF9jc2soc2spLSZndDtpY3NrX2NhX29wcyA9ICZhbXA7ZGN0Y3BfcmVubzsKJiM0MzsJV1JJVEVfT05DRShpbmV0X2NzayhzayktJmd0O2ljc2tfY2Ffb3BzLCAmYW1wO2RjdGNwX3Jlbm8pOwogCUlORVRfRUNOX2RvbnR4bWl0KHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IGYzZmEwYjE4ZWRhMDYuLjBkZGZkNWFmNmU1OGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTUwNyw3ICYjNDM7NTA3LDcgQEAgdm9pZCB0Y3BfY2Ffb3BlbnJlcV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIAkJY2EgPSB0Y3BfY2FfZmluZF9rZXkoY2Ffa2V5KTsKIAkJaWYgKGxpa2VseShjYSAmYW1wOyZhbXA7IGJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtJmd0O293bmVyKSkpIHsKIAkJCWljc2stJmd0O2ljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7Ci0JCQlpY3NrLSZndDtpY3NrX2NhX29wcyA9IGNhOwomIzQzOwkJCVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGNhKTsKIAkJCWNhX2dvdF9kc3QgPSB0cnVlOwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGYyNzA5ZDU4NWVkYmQuLjc0NzI3YjdlYjQ0NmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTQwOTIsNyAmIzQzOzQwOTIsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiAJaWYgKGxpa2VseShjYSAmYW1wOyZhbXA7IGJwZl90cnlfbW9kdWxlX2dldChjYSwgY2EtJmd0O293bmVyKSkpIHsKIAkJYnBmX21vZHVsZV9wdXQoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGljc2stJmd0O2ljc2tfY2Ffb3BzLSZndDtvd25lcik7CiAJCWljc2stJmd0O2ljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7Ci0JCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gY2E7CiYjNDM7CQlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBjYSk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBiNDc0ZDAzNjIwYTc1Li4wMDZkZTM5ZTgxNjU2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzIxOCw3ICYjNDM7MzIxOCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NhX3Jlc2V0KHN0cnVjdCBzb2NrICpzaykKIAogCS8qIG5vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3BzLCB0aGUgbmFtZSB3aWxsIHN1ZmZpY2UgKi8KIAl0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc2spOwotCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gTlVMTDsKJiM0MzsJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcywgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AvTVBUQ1AgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgY2xlYW5pbmcgdXAgdGhlIGFjY2VzcyB0byBgaWNzay0mZ3Q7aWNza19jYV9vcHNgIGluIHRoZSBUQ1AgYW5kIE1QVENQIGNvZGUuIFRoZXkmIzM5O3JlIHRocm93aW5nIGluIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgdG8gYXZvaWQgZGF0YSByYWNlcywgd2hpY2ggaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYHJjdV9yZWFkX2xvY2soKWAvYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgdGhlIHJlYWRzIGluIGBkb190Y3BfZ2V0c29ja29wdGAgd2hlbiBkZWFsaW5nIHdpdGggYGljc2stJmd0O2ljc2tfY2Ffb3BzYCBhbmQgY2FsbGluZyBgY2Ffb3BzLSZndDtnZXRfaW5mb2Agb3IgY29weWluZyB0aGUgbmFtZS4gU2VlbXMgbGlrZSBhIHNvbGlkIG1vdmUsIGFkZHJlc3NpbmcgdGhvc2UgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcmVhZCB2dWxuZXJhYmlsaXRpZXMgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YCDigJMgdGhpbmsgYFRDUF9DQ19JTkZPYCBhbmQgYFRDUF9DT05HRVNUSU9OYCBvcHRpb25zLgoKTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gSXQgdG91Y2hlcyBjb3JlIFRDUCBsb2dpYywgZXNwZWNpYWxseSBpbiBgZG9fdGNwX2dldHNvY2tvcHRgLCBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgLCBhbmQgc28gb24uIFdlIG5lZWQgdG8gZXhwbG9yZSB0aGlzLgoKTGV0JiMzOTtzIHByaW9yaXRpemUgc29tZSBmdW5jdGlvbnMgZm9yIGZ1enppbmc6IGBkb190Y3BfZ2V0c29ja29wdGAsIGRlZmluaXRlbHkuIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAgaXMgYW5vdGhlciBzb2xpZCBjYW5kaWRhdGUuIGB0Y3BfcmVpbml0X2Nvbmdlc3Rpb25fY29udHJvbGAsIGBkY3RjcF9pbml0YCwgYHRjcF9jYV9kc3RfaW5pdGAgYW5kIGBtcHRjcF9jYV9yZXNldGAsIHRob3NlIGFyZSBzdGF0aWMsIHNvIHRoZXkgbWlnaHQgYmUgdHJpY2tpZXIgdG8gZ2V0IHRvIGRpcmVjdGx5LCBidXQgc3RpbGwgcmVsZXZhbnQuIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAgaXMgbm9uLXN0YXRpYywgc28gd2Ugc2hvdWxkIGNvbnNpZGVyIHRoYXQgYXMgd2VsbC4KCk9rYXksIGNvbmZpcm1pbmcgYGRvX3RjcF9nZXRzb2Nrb3B0YCBpcyBpbmRlZWQgbm9uLXN0YXRpYywgaW4gYG5ldC9pcHY0L3RjcC5jYC4gQW5kIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAsIHRoYXQgb25lJiMzOTtzIGluIGBuZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNgLiBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgLCB0aGF0IG9uZSBpcyBpbiBgbmV0L2lwdjQvdGNwX2NvbmcuY2AuCgpMYXN0bHksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gV2UmIzM5O2xsIG5lZWQgYE5FVF9JUFY0YCAob3IganVzdCBgSU5FVGApIGZvciBzdXJlLiBgVENQX0NPTkdfRENUQ1BgIGlmIHdlIHdhbnQgdG8gaGl0IGBkY3RjcF9pbml0YCwgYW5kIGBNUFRDUGAgaWYgd2UmIzM5O3JlIHRhcmdldGluZyBgbXB0Y3BfY2FfcmVzZXRgLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBmdXp6ZXImIzM5O3MgZW52aXJvbm1lbnQuIE9rYXksIGxldCYjMzk7cyB2ZXJpZnkgdGhvc2UgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRDUF9DT05HX0RDVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NjE2PWNvbmZpZyBUQ1BfQ09OR19JTExJTk9JU1xuLS1cbm5ldC9pcHY0L0tjb25maWctNjI3LVxubmV0L2lwdjQvS2NvbmZpZzo2Mjg6Y29uZmlnIFRDUF9DT05HX0RDVENQXG5uZXQvaXB2NC9LY29uZmlnLTYyOS1cdHRyaXN0YXRlIFwmIzM0O0RhdGFDZW50ZXIgVENQIChEQ1RDUClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDIxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk1QVENQIENvbmZpZ3VyYXRpb24gQ2hlY2sgLSBUaW1lIHRvIERyaWxsIERvd24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBNUFRDUCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IG5ldHdvcmsgdHJvdWJsZXNob290aW5nIG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG11bHRpcGF0aCBUQ1AuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgTVBUQ1Agc2V0dXAuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHNwZWNpZmljIHBhcmFtZXRlcnMsIHBlcmhhcHMgdGhlIHN1YmZsb3cgbGltaXRzLCB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSBpbiB1c2UgKGhvcGVmdWxseSBzb21ldGhpbmcgc2Vuc2libGUgbGlrZSBCQlIgb3IgVENQLUNBKSwgYW5kIHRoZSBvdmVyYWxsIE1QVENQIHBvbGljeS4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLCB0aG91Z2gsIGVuc3VyaW5nIHRoZSBrZXJuZWwgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgY29uZmlndXJlZCBmb3IgTVBUQ1Agb3BlcmF0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGVzdGFibGlzaGVkIGZsb3dzIGFyZSB1c2luZyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgb2J2aW91cyBtaXNjb25maWd1cmF0aW9ucyBvciB1bmV4cGVjdGVkIHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgdGhlIGJvdHRsZW5lY2suIFVsdGltYXRlbHksIEkmIzM5O2xsIGJlIHN0cml2aW5nIHRvIGRldGVybWluZSBpZiBNUFRDUCBpcyBldmVuICplbmFibGVkKiBhcyBpdCBzaG91bGQgYmUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgZG9fdGNwX2dldHNvY2tvcHRgIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBgZG9fdGNwX2dldHNvY2tvcHRgLiBJcyBpdCBzb21ldGhpbmcgdGhhdCYjMzk7cyBpbnRlbmRlZCB0byBiZSBhY2Nlc3NlZCBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29udGV4dCwgb3IgaXMgaXQgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBtb2R1bGUgb3IgZnVuY3Rpb24/IEluIG90aGVyIHdvcmRzLCBpcyBpdCBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB0byB1c2VyLXNwYWNlLCBvciBpcyBpdCBub24tc3RhdGljLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBpdCBoYXMgYnJvYWRlciB2aXNpYmlsaXR5IHdpdGhpbiBpdHMgZGVmaW5lZCB0cmFuc2xhdGlvbiB1bml0LiBJIHdhbnQgdG8ga25vdyB3aGVyZSBhbmQgaG93IEkgY2FuIGFjY2VzcyB0aGlzIHJvdXRpbmUuIFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgd2lsbCBhZmZlY3QgaG93IEkgYXBwcm9hY2ggd2hhdGV2ZXIgSSYjMzk7bSBkb2luZy4gSWYgaXQmIzM5O3MgZXhwb3J0ZWQsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHZlcnkgZGlmZmVyZW50IHRoYW4gaWYgaXQmIzM5O3Mgc3RhdGljIGFuZCBsaW1pdGVkIHRvIGEgc3BlY2lmaWMgLmMgZmlsZS4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGNydWNpYWwgZm9yIG15IG92ZXJhbGwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZG9fdGNwX2dldHNvY2tvcHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9NDk5PV9fcG9sbF90IHRjcF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuaW5jbHVkZS9uZXQvdGNwLmgtNTAwLVx0XHQgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpO1xuaW5jbHVkZS9uZXQvdGNwLmg6NTAxOmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbmluY2x1ZGUvbmV0L3RjcC5oLTUwMi1cdFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0MTA9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtNDQ4MS1cbm5ldC9pcHY0L3RjcC5jOjQ0ODI6aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxubmV0L2lwdjQvdGNwLmMtNDQ4My1cdFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sYCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsaWtlbHkgaW4gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBvciByZS1lc3RhYmxpc2htZW50IHBhdGguIE15IGluaXRpYWwgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogd2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBBcmUgd2UgbG9va2luZyBhdCBpbml0aWFsIFNZTj8gQSByZXRyYW5zbWlzc2lvbiBhZnRlciBhIGxvc3MgZXZlbnQ/IE9yIHBlcmhhcHMgYSBjb25uZWN0aW9uIHJlc2V0IHdoZXJlIHdlJiMzOTtyZSBzdGFydGluZyBmcmVzaD8gVGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgaW1wbGllcyB3ZSYjMzk7cmUgYXNzaWduaW5nIChvciBwb3RlbnRpYWxseSAqcmUqLWFzc2lnbmluZykgYSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBleGlzdGluZyBzb2NrZXQgb3IgYSBuZXcgb25lLCBhcyB0aGUgbG9naWMgd2lsbCBkaWZmZXIuCgpNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHJlbWVtYmVyIHRoZSB2YXJpb3VzIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGNhbGxlZCBmcm9tLiBJcyBpdCBjYWxsZWQgZnJvbSB0aGUgc29ja2V0IGNyZWF0aW9uIHBhdGgsIG9yIGZyb20gdGhlIGNvbm5lY3Rpb24gYWNjZXB0YW5jZSBwYXRoPyBBcmUgdGhlcmUgZGlmZmVyZW50IHBhdGhzIGZvciBpbml0aWFsIGNvbm5lY3Rpb25zIHZlcnN1cyBjb25uZWN0aW9ucyB3aGVyZSB3ZSBhcmUgaGFuZGxpbmcgYSBsb3NzIGV2ZW50PyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbi4gYHNrYCAoc29ja2V0IHN0cnVjdHVyZSkgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZvbHZlZCwgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCBvYmplY3QsIHBlcmhhcHMgYSBwcm90b2NvbC1zcGVjaWZpYyBzdHJ1Y3R1cmUsIHRvIHRlbGwgdXMgd2hpY2ggYWxnb3JpdGhtIGlzIGFwcHJvcHJpYXRlLgoKV2UgbmVlZCB0byB1bmRlcnN0YW5kIGFueSBjaGVja3MgdGhhdCBhcmUgYmVpbmcgZG9uZSB0byBlbnN1cmUgdGhlIHNlbGVjdGVkIGFsZ29yaXRobSBpcyB2YWxpZCBmb3IgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIChlLmcuIGlmIGNlcnRhaW4gYWxnb3JpdGhtcyBhcmUgZGlzYWJsZWQgb3IgYmxhY2tsaXN0ZWQpLiBXaGF0JiMzOTtzIHRoZSBmYWxsYmFjayBtZWNoYW5pc20gaWYgdGhlIGRlc2lyZWQgYWxnb3JpdGhtIGlzbiYjMzk7dCBhdmFpbGFibGU/IElzIHRoZXJlIGEgZGVmYXVsdCBhbGdvcml0aG0/IEFsc28sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgbG9naWMgYXJvdW5kIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBvdmVycmlkZXMuIElzIHRoZXJlIGEgd2F5IGZvciBhcHBsaWNhdGlvbnMgKG9yIGV2ZW4gdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yKSB0byBkaWN0YXRlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtPyBUaGlzIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGdpdmVuIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBhY3R1YWwgYXNzaWdubWVudCBwcm9jZXNzOiBob3cgdGhlIHNlbGVjdGVkIGFsZ29yaXRobSBpcyBhY3R1YWxseSBsaW5rZWQgdG8gdGhlIHNvY2tldCBzdHJ1Y3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgdG8gdGhlIGBpbmV0X2Nvbm5lY3Rpb25fc29ja2Agc3RydWN0dXJlIChvciBpdHMgZXF1aXZhbGVudHMpIG9yIHBvc3NpYmx5IG1hbmlwdWxhdGlvbiBvZiBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHBvaW50ZXJzIHRvIHRoZSBhY3R1YWwgY29uZ2VzdGlvbiBjb250cm9sIHN0YXRlIG1hY2hpbmUuIEFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBvciBsb2NraW5nIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQgbmVlZCB0byBiZSBleGFtaW5lZCBjYXJlZnVsbHksIGVzcGVjaWFsbHkgaWYgbXVsdGlwbGUgdGhyZWFkcyBvciBwcm9jZXNzZXMgbWlnaHQgYmUgYWNjZXNzaW5nIHRoaXMgZnVuY3Rpb24uIE92ZXJhbGwsIGl0IGlzIGdvaW5nIHRvIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgbGV0JiMzOTtzIGxvb2shCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MTM5Mz1pbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSk7XG5pbmNsdWRlL25ldC90Y3AuaC0xMzk0LVxuaW5jbHVkZS9uZXQvdGNwLmg6MTM5NTp2b2lkIHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaC0xMzk2LXZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0xOTk9Y2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYy0yMTUtLyogQXNzaWduIGNob2ljZSBvZiBjb25nZXN0aW9uIGNvbnRyb2wuICovXG5uZXQvaXB2NC90Y3BfY29uZy5jOjIxNjp2b2lkIHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBteSBtaW5kIGlzIHJhY2luZy4gVGhpcyBuYW1lIHNjcmVhbXMgJiMzNDtjaGlsZCBjb25uZWN0aW9uJiMzNDsgYW5kICYjMzQ7b3BlbiByZXF1ZXN0LCYjMzQ7IHdoaWNoIGxpa2VseSBtZWFucyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBoYW5kbGluZyBuZXcgVENQIGNvbm5lY3Rpb25zIGluaXRpYXRlZCBmcm9tIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIElzIHRoaXMgcGFydCBvZiB0aGUgU1lOLUFDSyBoYW5kbGluZywgb3IgaXMgaXQgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgZWRnZSBjYXNlPwoKSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIHRpZWQgaW50byBhIHNwZWNpZmljIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0sIG9yIGlmIGl0IGlzIGEgbW9yZSBnZW5lcmFsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgVENQIHN0YWNrLiBUaGUgbmFtZSAqc3VnZ2VzdHMqIGl0IGlzIGNvbmdlc3Rpb24gY29udHJvbCByZWxhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgaG9va3Mgb3IgY2FsbC1vdXRzIHRvIHNwZWNpZmljIGNvbmdlc3Rpb24gY29udHJvbCBpbXBsZW1lbnRhdGlvbnMgd2l0aGluIHRoZSBjb2RlLgoKTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBwcm9jZXNzIG9mIGhhbmRsaW5nIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3QsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBhbmQgbWF5YmUgZXZlbiBzZXR0aW5nIHVwIGluaXRpYWwgY29uZ2VzdGlvbiBjb250cm9sIHBhcmFtZXRlcnMgKmJlZm9yZSogdGhlIGNvbm5lY3Rpb24gaXMgZnVsbHkgZXN0YWJsaXNoZWQuIEl0JiMzOTtzIGFsbW9zdCBsaWtlIGEgc3RhZ2luZyBhcmVhIGZvciBhIG5ldyBzb2NrZXQgYmVmb3JlIHRoZSB0aHJlZS13YXkgaGFuZHNoYWtlIGlzIGNvbXBsZXRlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgdG91Y2hpbmcsIHBhcnRpY3VsYXJseSBhbnl0aGluZyByZWxhdGVkIHRvIHNvY2tldHMsIFRDUCBjb250cm9sIGJsb2NrcyAobGlrZSBgdGNwY2JgKSwgYW5kIGxpa2VseSBhbnkgY29uZ2VzdGlvbiBjb250cm9sIHN0YXRlLiBBbHNvLCBJIG5lZWQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTElTVEVOIHF1ZXVlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGFueSBsb2NraW5nIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBhcmlzZSB3aXRoIG11bHRpcGxlIGNvbmN1cnJlbnQgY29ubmVjdGlvbiBhdHRlbXB0cy4gVGhhdCYjMzk7cyBhbHdheXMgYSBwb2ludCBvZiB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU1Nz1zdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC01NTktXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MDp2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcbmluY2x1ZGUvbmV0L3RjcC5oLTU2MS1zdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00NzA9c3RhdGljIHZvaWQgdGNwX2Vjbl9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDk2LVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQ5Nzp2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjkKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2l0aGluIHRoZSBUQ1AgYW5kIE1QVENQIHN0YWNrLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGhvdyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG9wZXJhdGlvbnMgKGBpY3NrLSZndDtpY3NrX2NhX29wc2ApIGFyZSBoYW5kbGVkLiBUaGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCB0aGUganVkaWNpb3VzIHVzZSBvZiBgUkVBRF9PTkNFYCwgYFdSSVRFX09OQ0VgIG1lbW9yeSBiYXJyaWVycyBhbmQgUkNVIHJlYWQgbG9ja3MuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBib2xzdGVyaW5nIHRoZSBhdG9taWMgYWNjZXNzIGd1YXJhbnRlZXMgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGRhdGEgc3RydWN0dXJlLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBkb190Y3BfZ2V0c29ja29wdGAsIHdoZXJlIHRoZSBmaXggaXMgaW1wbGVtZW50ZWQgYW5kIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgIGFuZCBgdGNwX2NhX29wZW5yZXFfY2hpbGRgLCB0aGF0IGRlZmluZSB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9ucyBiZWluZyBhZGRyZXNzZWQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgcmV0cmlldmFsIG9mIGNvbmdlc3Rpb24gY29udHJvbCBvcHRpb25zLCB3aGljaCBpcyBhIHNlbnNpdGl2ZSBhcmVhLiBJIHNlZSB0aGV5JiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGNhc2VzIHdpdGggYFRDUF9DT05HX0RDVENQYCBhbmQgYE1QVENQYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlaXIgbW9yZSBjb21wbGV4IGNvbmdlc3Rpb24gY29udHJvbCBsb2dpYyBhbmQgY29uY3VycmVuY3kgbW9kZWxzLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgaW1wYWN0IGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQmIzM5O3MgZml4aW5nIHRoZSB3YXkgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucyBhcmUgYWNjZXNzaW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BlcmF0aW9ucywgdGhhdCBjb3VsZCBiZSBleHBsb2l0ZWQuIFNvLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSByaWdvcm91cyBmdXp6aW5nIGFuZCB0ZXN0aW5nIHdpdGggYW4gZW1waGFzaXMgb24gY29uY3VycmVudCBhY2Nlc3MuIEkgd2FudCB0byBsb29rIGZvciBhbnkgb3Zlcmxvb2tlZCByYWNlcywgYW5kIHJlZ3Jlc3Npb24gdGVzdGluZyB0byBlbnN1cmUgbm8gbmV3IHByb2JsZW1zIHdlcmUgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2VkLiBUaGlzIGlzIHRoZSBraW5kIG9mIGZpeCB0aGF0IHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQ09OR19EQ1RDUCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3RjcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3RjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3RjcF9jYV9vcGVucmVxX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGluIFRDUCBhbmQgTVBUQ1Agc29ja2V0cy4gSXQgYWRkcyBgUkVBRF9PTkNFYCwgYFdSSVRFX09OQ0VgLCBhbmQgUkNVIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGFjY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1pc3NlZCByYWNlIGNvbmRpdGlvbnMgcmVtYWluLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQ09OR19EQ1RDUCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX3RjcF9nZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3RjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sJiMzNDssCiAgICAmIzM0O3RjcF9jYV9vcGVucmVxX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGluIFRDUCBhbmQgTVBUQ1Agc29ja2V0cy4gSXQgYWRkcyBgUkVBRF9PTkNFYCwgYFdSSVRFX09OQ0VgLCBhbmQgUkNVIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGFjY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1pc3NlZCByYWNlIGNvbmRpdGlvbnMgcmVtYWluLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgb24gYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXHUwMDNlbmFtZWAgaXMgYSBmaXhlZC1zaXplIGFycmF5IGluIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgd2hpY2ggaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCBvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSB2aWEgYGJwZl9vYmpfbmFtZV9jcHlgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgZGF0YSByYWNlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRhMDk3ZjViNDVjNWQ2OWVkZTk2NjIzNWM4NzY1YTM5NDAxZDFjNzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxNzo1MTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggYjQyMzdkMGU5OTRkNi4uYzQ1Nzc2ZDNlZDkwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTQ1NjIsOSAmIzQzOzQ1NjIsMTEgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLAogCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJY2Ffb3BzID0gaWNzay0mZ3Q7aWNza19jYV9vcHM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQljYV9vcHMgPSBSRUFEX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMpOwogCQlpZiAoY2Ffb3BzICZhbXA7JmFtcDsgY2Ffb3BzLSZndDtnZXRfaW5mbykKIAkJCXN6ID0gY2Ffb3BzLSZndDtnZXRfaW5mbyhzaywgfjBVLCAmYW1wO2F0dHIsICZhbXA7aW5mbyk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAogCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc3opOwogCQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDtsZW4sIHNpemVvZihpbnQpKSkKQEAgLTQ1NzcsMTYgJiM0Mzs0NTc5LDI0IEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKIAkJdmFsID0gIWluZXRfY3NrX2luX3Bpbmdwb25nX21vZGUoc2spOwogCQlicmVhazsKIAotCWNhc2UgVENQX0NPTkdFU1RJT046CiYjNDM7CWNhc2UgVENQX0NPTkdFU1RJT046IHsKJiM0MzsJCWNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307CiYjNDM7CiAJCWlmIChjb3B5X2Zyb21fc29ja3B0cigmYW1wO2xlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFRDUF9DQV9OQU1FX01BWCk7CiAJCWlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCAmYW1wO2xlbiwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBpY3NrLSZndDtpY3NrX2NhX29wcy0mZ3Q7bmFtZSwgbGVuKSkKJiM0MzsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWNhX29wcyA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcyk7CiYjNDM7CQltZW1jcHkoY2FfbmFtZSwgY2Ffb3BzLSZndDtuYW1lLCBzaXplb2YoY2FfbmFtZSkpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CQlpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgY2FfbmFtZSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKLQomIzQzOwl9CiAJY2FzZSBUQ1BfVUxQOgogCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCBlOWY2Yzc3ZTA2MzE2Li44ZTgzZWY4MWZjMTg3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTIyMyw3ICYjNDM7MjIzLDcgQEAgdm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spCiAJY2EgPSByY3VfZGVyZWZlcmVuY2UobmV0LSZndDtpcHY0LnRjcF9jb25nZXN0aW9uX2NvbnRyb2wpOwogCWlmICh1bmxpa2VseSghYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS0mZ3Q7b3duZXIpKSkKIAkJY2EgPSAmYW1wO3RjcF9yZW5vOwotCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gY2E7CiYjNDM7CVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGNhKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCW1lbXNldChpY3NrLSZndDtpY3NrX2NhX3ByaXYsIDAsIHNpemVvZihpY3NrLSZndDtpY3NrX2NhX3ByaXYpKTsKQEAgLTI1Myw3ICYjNDM7MjUzLDcgQEAgc3RhdGljIHZvaWQgdGNwX3JlaW5pdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLAogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAogCXRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7Ci0JaWNzay0mZ3Q7aWNza19jYV9vcHMgPSBjYTsKJiM0MzsJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcywgY2EpOwogCWljc2stJmd0O2ljc2tfY2Ffc2V0c29ja29wdCA9IDE7CiAJbWVtc2V0KGljc2stJmd0O2ljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stJmd0O2ljc2tfY2FfcHJpdikpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGN0Y3AuYyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jCmluZGV4IDI3NGU2MjhlN2NmODYuLjk5ZjY4YzI5OTJkMGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9kY3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jCkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIF9fYnBmX2tmdW5jIHN0YXRpYyB2b2lkIGRjdGNwX2luaXQoc3RydWN0IHNvY2sgKnNrKQogCS8qIE5vIEVDTiBzdXBwb3J0PyBGYWxsIGJhY2sgdG8gUmVuby4gQWxzbyBuZWVkIHRvIGNsZWFyCiAJICogRUNUIGZyb20gc2sgc2luY2UgaXQgaXMgc2V0IGR1cmluZyAzV0hTIGZvciBEQ1RDUC4KIAkgKi8KLQlpbmV0X2NzayhzayktJmd0O2ljc2tfY2Ffb3BzID0gJmFtcDtkY3RjcF9yZW5vOwomIzQzOwlXUklURV9PTkNFKGluZXRfY3NrKHNrKS0mZ3Q7aWNza19jYV9vcHMsICZhbXA7ZGN0Y3BfcmVubyk7CiAJSU5FVF9FQ05fZG9udHhtaXQoc2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggZjNmYTBiMThlZGEwNi4uMGRkZmQ1YWY2ZTU4ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtNTA3LDcgJiM0Mzs1MDcsNyBAQCB2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogCQljYSA9IHRjcF9jYV9maW5kX2tleShjYV9rZXkpOwogCQlpZiAobGlrZWx5KGNhICZhbXA7JmFtcDsgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS0mZ3Q7b3duZXIpKSkgewogCQkJaWNzay0mZ3Q7aWNza19jYV9kc3RfbG9ja2VkID0gdGNwX2NhX2RzdF9sb2NrZWQoZHN0KTsKLQkJCWljc2stJmd0O2ljc2tfY2Ffb3BzID0gY2E7CiYjNDM7CQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcywgY2EpOwogCQkJY2FfZ290X2RzdCA9IHRydWU7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggZjI3MDlkNTg1ZWRiZC4uNzQ3MjdiN2ViNDQ2ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNDA5Miw3ICYjNDM7NDA5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9jYV9kc3RfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIAlpZiAobGlrZWx5KGNhICZhbXA7JmFtcDsgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS0mZ3Q7b3duZXIpKSkgewogCQlicGZfbW9kdWxlX3B1dChpY3NrLSZndDtpY3NrX2NhX29wcywgaWNzay0mZ3Q7aWNza19jYV9vcHMtJmd0O293bmVyKTsKIAkJaWNzay0mZ3Q7aWNza19jYV9kc3RfbG9ja2VkID0gdGNwX2NhX2RzdF9sb2NrZWQoZHN0KTsKLQkJaWNzay0mZ3Q7aWNza19jYV9vcHMgPSBjYTsKJiM0MzsJCVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMsIGNhKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGI0NzRkMDM2MjBhNzUuLjAwNmRlMzllODE2NTYgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zMjE4LDcgJiM0MzszMjE4LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2FfcmVzZXQoc3RydWN0IHNvY2sgKnNrKQogCiAJLyogbm8gbmVlZCB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvcHMsIHRoZSBuYW1lIHdpbGwgc3VmZmljZSAqLwogCXRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7Ci0JaWNzay0mZ3Q7aWNza19jYV9vcHMgPSBOVUxMOwomIzQzOwlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBOVUxMKTsKIH0KIAogc3RhdGljIGludCBtcHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVENQIENvbmdlc3Rpb24gQ29udHJvbCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHRoZSBvdXRzZXQsIEkgc2VlIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXMgd2l0aGluIHRoZSBUQ1AvSVAgc3RhY2s6IGBuZXQvaXB2NC90Y3AuY2AsIGBuZXQvaXB2NC90Y3BfY29uZy5jYCwgYG5ldC9pcHY0L3RjcF9kY3RjcC5jYCwgYG5ldC9pcHY0L3RjcF9taW5pc29ja3MuY2AsIGBuZXQvaXB2NC90Y3Bfb3V0cHV0LmNgLCBhbmQgZXZlbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLiBUaGF0IGluZGljYXRlcyB0aGlzIGlzIGEgcmF0aGVyIGJyb2FkIGNoYW5nZSwgbGlrZWx5IGFmZmVjdGluZyBob3cgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBtZWNoYW5pc20gaXMgaGFuZGxlZCBhdCBzZXZlcmFsIGxheWVycy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBkYXRhIHJhY2UgZml4ZXMsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgYGljc2stJmd0O2ljc2tfY2Ffb3BzYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBNYWtlcyBzZW5zZTsgdGhhdCYjMzk7cyBhIGNsYXNzaWMgc2lnbmFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBgVENQX0NPTkdFU1RJT05gIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb24uIFRoZSBjb2RlIHNuaXBwZXQgaGVyZSBoYXMgbXkgaW1tZWRpYXRlIGF0dGVudGlvbjoKCmBgYGMKCWNhc2UgVENQX0NPTkdFU1RJT046IHsKCQljaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9OwoKCQlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKQoJCQlyZXR1cm4gLUVGQVVMVDsKCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTsKCQlpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgJmFtcDtsZW4sIHNpemVvZihpbnQpKSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgoJCXJjdV9yZWFkX2xvY2soKTsKCQljYV9vcHMgPSBSRUFEX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMpOwoJCW1lbWNweShjYV9uYW1lLCBjYV9vcHMtJmd0O25hbWUsIHNpemVvZihjYV9uYW1lKSk7CgkJcmN1X3JlYWRfdW5sb2NrKCk7CgoJCWlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBjYV9uYW1lLCBsZW4pKQoJCQlyZXR1cm4gLUVGQVVMVDsKCQlyZXR1cm4gMDsKCX0KYGBgCgpUaGUgaW50ZW50IGlzIGNsZWFyOiByZXRyaWV2ZSB0aGUgY3VycmVudCBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtJiMzOTtzIG5hbWUgYW5kIHJldHVybiBpdCB0byB0aGUgdXNlci4gVGhlIGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2AgaW5pdGlhbGl6YXRpb24gaXMgZ29vZDsgemVyb2luZyB0aGUgYnVmZmVyIGlzIGEgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLiBUaGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGBSRUFEX09OQ0VgIGFyZSB0aGVyZSwgYXMgZXhwZWN0ZWQsIGZvciBzYWZldHkuIFRoZW4sIHRoZSBjcml0aWNhbCBzdGVwOiBgbWVtY3B5KGNhX25hbWUsIGNhX29wcy0mZ3Q7bmFtZSwgc2l6ZW9mKGNhX25hbWUpKTtgLiBUaGF0JiMzOTtzIHdoZXJlIEkgc3RhcnQgdG8gc2VlIGEgcG90ZW50aWFsIHByb2JsZW0uIGBzaXplb2YoY2FfbmFtZSlgIGlzIGBUQ1BfQ0FfTkFNRV9NQVhgLCBidXQgaXMgYGNhX29wcy0mZ3Q7bmFtZWAgKmd1YXJhbnRlZWQqIHRvIGJlIHRoYXQgc2l6ZT8gSWYgYGNhX29wcy0mZ3Q7bmFtZWAgaXMgYSB2YXJpYWJsZSBsZW5ndGggc3RyaW5nIG9yIGEgc2hvcnRlciBmaXhlZC1zaXplIGFycmF5LCB0aGlzIGBtZW1jcHlgIGNvdWxkIHJlYWQgcGFzdCB0aGUgYm91bmRzIG9mIGBjYV9vcHMtJmd0O25hbWVgLCBsZWFkaW5nIHRvIGEgYnVmZmVyIG92ZXItcmVhZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHdoYXQgdHlwZSBgY2Ffb3BzLSZndDtuYW1lYCBhY3R1YWxseSBpcy4gVGltZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTEzMDY9c3RydWN0IHJhdGVfc2FtcGxlIHtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0xMzI0LVxuaW5jbHVkZS9uZXQvdGNwLmg6MTMyNTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHtcbmluY2x1ZGUvbmV0L3RjcC5oLTEzMjYtLyogZmFzdCBwYXRoIGZpZWxkcyBhcmUgcHV0IGZpcnN0IHRvIGZpbGwgb25lIGNhY2hlIGxpbmUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFRDUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgVENQIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgcmV0cmFuc21pc3Npb24gYmVoYXZpb3IuIE15IGd1dCB0ZWxscyBtZSBzb21ldGhpbmcgaXNuJiMzOTt0IHF1aXRlIHJpZ2h0IHdpdGggaG93IGl0JiMzOTtzIGhhbmRsaW5nIGRlbGF5ZWQgQUNLcyBpbiB0aGlzIHBhcnRpY3VsYXIgZWRnZSBjYXNlIEkmIzM5O20gZGVidWdnaW5nLiBUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSDigJMgYW5kIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgaW5jbHVkZS9uZXQvdGNwLmhgLiBNb3JlIHByZWNpc2VseSwgSSYjMzk7bGwgYmUgbG9va2luZyBhcm91bmQgbGluZSAxMzI1LiBUaGlzIGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCB0aGUgbW9yZSBpbnRyaWNhdGUgZGV0YWlscyBvZiBUQ1Agc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHRpbWVyIG1hbmFnZW1lbnQ7IEkmIzM5O20gaG9waW5nIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGdvdmVybmluZyByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cyBvciBBQ0sgcHJvY2Vzc2luZyB0aGVyZSwgd2hpY2ggbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGlzc3VlLiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHNlZSBpZiBJIGNhbiBmaW5kIG15IGFuc3dlciBkaXJlY3RseSwgb3IgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzdGFjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMjU6XHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHtcbjEzMjY6XHQvKiBmYXN0IHBhdGggZmllbGRzIGFyZSBwdXQgZmlyc3QgdG8gZmlsbCBvbmUgY2FjaGUgbGluZSAqL1xuMTMyNzpcdFxuMTMyODpcdFx0LyogQSBjb25nZXN0aW9uIGNvbnRyb2wgKENDKSBtdXN0IHByb3ZpZGUgb25lIG9mIGVpdGhlcjpcbjEzMjk6XHRcdCAqXG4xMzMwOlx0XHQgKiAoYSkgYSBjb25nX2F2b2lkIGZ1bmN0aW9uLCBpZiB0aGUgQ0Mgd2FudHMgdG8gdXNlIHRoZSBjb3JlIFRDUFxuMTMzMTpcdFx0ICogICAgIHN0YWNrJiMzOTtzIGRlZmF1bHQgZnVuY3Rpb25hbGl0eSB0byBpbXBsZW1lbnQgYSBcJiMzNDtjbGFzc2ljXCYjMzQ7XG4xMzMyOlx0XHQgKiAgICAgKFJlbm8vQ1VCSUMtc3R5bGUpIHJlc3BvbnNlIHRvIHBhY2tldCBsb3NzLCBSRkMzMTY4IEVDTixcbjEzMzM6XHRcdCAqICAgICBpZGxlIHBlcmlvZHMsIHBhY2luZyByYXRlIGNvbXB1dGF0aW9ucywgZXRjLlxuMTMzNDpcdFx0ICpcbjEzMzU6XHRcdCAqIChiKSBhIGNvbmdfY29udHJvbCBmdW5jdGlvbiwgaWYgdGhlIENDIHdhbnRzIGN1c3RvbSBiZWhhdmlvciBhbmRcbjEzMzY6XHRcdCAqICAgICAgY29tcGxldGUgY29udHJvbCBvZiBhbGwgY29uZ2VzdGlvbiBjb250cm9sIGJlaGF2aW9ycy5cbjEzMzc6XHRcdCAqL1xuMTMzODpcdFx0LyogKGEpIFwmIzM0O2NsYXNzaWNcJiMzNDsgcmVzcG9uc2U6IGNhbGN1bGF0ZSBuZXcgY3duZC5cbjEzMzk6XHRcdCAqL1xuMTM0MDpcdFx0dm9pZCAoKmNvbmdfYXZvaWQpKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywgdTMyIGFja2VkKTtcbjEzNDE6XHRcdC8qIChiKSBcJiMzNDtjdXN0b21cJiMzNDsgcmVzcG9uc2U6IGNhbGwgd2hlbiBwYWNrZXRzIGFyZSBkZWxpdmVyZWQgdG8gdXBkYXRlXG4xMzQyOlx0XHQgKiBjd25kIGFuZCBwYWNpbmcgcmF0ZSwgYWZ0ZXIgYWxsIHRoZSBjYV9zdGF0ZSBwcm9jZXNzaW5nLlxuMTM0MzpcdFx0ICovXG4xMzQ0Olx0XHR2b2lkICgqY29uZ19jb250cm9sKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIGludCBmbGFnLCBjb25zdCBzdHJ1Y3QgcmF0ZV9zYW1wbGUgKnJzKTtcbjEzNDU6XHRcbjEzNDY6XHRcdC8qIHJldHVybiBzbG93IHN0YXJ0IHRocmVzaG9sZCAocmVxdWlyZWQpICovXG4xMzQ3Olx0XHR1MzIgKCpzc3RocmVzaCkoc3RydWN0IHNvY2sgKnNrKTtcbjEzNDg6XHRcbjEzNDk6XHRcdC8qIGNhbGwgYmVmb3JlIGNoYW5naW5nIGNhX3N0YXRlIChvcHRpb25hbCkgKi9cbjEzNTA6XHRcdHZvaWQgKCpzZXRfc3RhdGUpKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKTtcbjEzNTE6XHRcbjEzNTI6XHRcdC8qIGNhbGwgd2hlbiBjd25kIGV2ZW50IG9jY3VycyAob3B0aW9uYWwpICovXG4xMzUzOlx0XHR2b2lkICgqY3duZF9ldmVudCkoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9jYV9ldmVudCBldik7XG4xMzU0Olx0XG4xMzU1Olx0XHQvKiBjYWxsIHdoZW4gQ0FfRVZFTlRfVFhfU1RBUlQgY3duZCBldmVudCBvY2N1cnMgKG9wdGlvbmFsKSAqL1xuMTM1NjpcdFx0dm9pZCAoKmN3bmRfZXZlbnRfdHhfc3RhcnQpKHN0cnVjdCBzb2NrICpzayk7XG4xMzU3Olx0XG4xMzU4Olx0XHQvKiBjYWxsIHdoZW4gYWNrIGFycml2ZXMgKG9wdGlvbmFsKSAqL1xuMTM1OTpcdFx0dm9pZCAoKmluX2Fja19ldmVudCkoc3RydWN0IHNvY2sgKnNrLCB1MzIgZmxhZ3MpO1xuMTM2MDpcdFxuMTM2MTpcdFx0LyogaG9vayBmb3IgcGFja2V0IGFjayBhY2NvdW50aW5nIChvcHRpb25hbCkgKi9cbjEzNjI6XHRcdHZvaWQgKCpwa3RzX2Fja2VkKShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpO1xuMTM2MzpcdFxuMTM2NDpcdFx0Lyogb3ZlcnJpZGUgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3MgKG9wdGlvbmFsKSAqL1xuMTM2NTpcdFx0dTMyICgqbWluX3Rzb19zZWdzKShzdHJ1Y3Qgc29jayAqc2spO1xuMTM2NjpcdFxuMTM2NzpcdFx0LyogbmV3IHZhbHVlIG9mIGN3bmQgYWZ0ZXIgbG9zcyAocmVxdWlyZWQpICovXG4xMzY4Olx0XHR1MzIgICgqdW5kb19jd25kKShzdHJ1Y3Qgc29jayAqc2spO1xuMTM2OTpcdFx0LyogcmV0dXJucyB0aGUgbXVsdGlwbGllciB1c2VkIGluIHRjcF9zbmRidWZfZXhwYW5kIChvcHRpb25hbCkgKi9cbjEzNzA6XHRcdHUzMiAoKnNuZGJ1Zl9leHBhbmQpKHN0cnVjdCBzb2NrICpzayk7XG4xMzcxOlx0XG4xMzcyOlx0LyogY29udHJvbC9zbG93IHBhdGhzIHB1dCBsYXN0ICovXG4xMzczOlx0XHQvKiBnZXQgaW5mbyBmb3IgaW5ldF9kaWFnIChvcHRpb25hbCkgKi9cbjEzNzQ6XHRcdHNpemVfdCAoKmdldF9pbmZvKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBleHQsIGludCAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgcGVyc3BlY3RpdmUgb24gZXhhbWluaW5nIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYDoKCioqRGl2aW5nIERlZXAgaW50byBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AuIEkga25vdyB0aGlzIGlzIGEgZnVuZGFtZW50YWwgc3RydWN0dXJlIGZvciBhbnkgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSB3aXRoaW4gdGhlIFRDUCBzdGFjaywgc28gYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIGlzIHBhcmFtb3VudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBmaWVsZHMgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHZhcmlvdXMgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMgaW50ZXJhY3Qgd2l0aCB0aGlzLiBTcGVjaWZpY2FsbHksIEkgYW0gdGhpbmtpbmcgYWJvdXQgaG93IGFsZ29yaXRobXMgaGFuZGxlIHRoZWlyIGxvZ2ljIGJ5IHVzaW5nIHRob3NlIG9wZXJhdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb24gcG9pbnRlcnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBzdHJ1Y3Q/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBtYXliZSB3aGVyZSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIGRpdmVyZ2U/IEkgd2lsbCBiZSBsb29raW5nIGZvciBob3cgbmV3IGFsZ29yaXRobXMgYXJlIGFibGUgdG8gJiMzNDtwbHVnIGluJiMzNDsgdG8gdGhlIGtlcm5lbCB1c2luZyB0aGlzIG1lY2hhbmlzbS4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJmYWNlIHByZWNpc2VseSB3aWxsIGJlIGNyaXRpY2FsLiBJIGFtIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHRpZXMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgb2YgdGhlIFRDUCBzdGFjayBhbmQgaG93IGl0IG1hbmFnZXMgdG8gbWFrZSB0aGF0IG1vZHVsYXIuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyBpbnNpZ2h0cyB0aGUgY29kZSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3NTpcdFx0XHRcdCAgIHVuaW9uIHRjcF9jY19pbmZvICppbmZvKTtcbjEzNzY6XHRcbjEzNzc6XHRcdGNoYXIgXHRcdFx0bmFtZVtUQ1BfQ0FfTkFNRV9NQVhdO1xuMTM3ODpcdFx0c3RydWN0IG1vZHVsZVx0XHQqb3duZXI7XG4xMzc5Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuMTM4MDpcdFx0dTMyXHRcdFx0a2V5O1xuMTM4MTpcdFx0dTMyXHRcdFx0ZmxhZ3M7XG4xMzgyOlx0XG4xMzgzOlx0XHQvKiBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAob3B0aW9uYWwpICovXG4xMzg0Olx0XHR2b2lkICgqaW5pdCkoc3RydWN0IHNvY2sgKnNrKTtcbjEzODU6XHRcdC8qIGNsZWFudXAgcHJpdmF0ZSBkYXRhICAob3B0aW9uYWwpICovXG4xMzg2Olx0XHR2b2lkICgqcmVsZWFzZSkoc3RydWN0IHNvY2sgKnNrKTtcbjEzODc6XHR9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4xMzg4Olx0XG4xMzg5Olx0aW50IHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XG4xMzkwOlx0dm9pZCB0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XG4xMzkxOlx0aW50IHRjcF91cGRhdGVfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnR5cGUsXG4xMzkyOlx0XHRcdFx0XHQgIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKm9sZF90eXBlKTtcbjEzOTM6XHRpbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSk7XG4xMzk0Olx0XG4xMzk1Olx0dm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spO1xuMTM5NjpcdHZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XG4xMzk3Olx0dm9pZCB0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKTtcbjEzOTg6XHRpbnQgdGNwX3NldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuMTM5OTpcdHZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUpO1xuMTQwMDpcdHZvaWQgdGNwX2dldF9hdmFpbGFibGVfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4xNDAxOlx0dm9pZCB0Y3BfZ2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4xNDAyOlx0aW50IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYWxsb3dlZCk7XG4xNDAzOlx0aW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBsb2FkLFxuMTQwNDpcdFx0XHRcdCAgICAgICBib29sIGNhcF9uZXRfYWRtaW4pO1xuMTQwNTpcdHUzMiB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrZWQpO1xuMTQwNjpcdHZvaWQgdGNwX2NvbmdfYXZvaWRfYWkoc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHcsIHUzMiBhY2tlZCk7XG4xNDA3Olx0XG4xNDA4Olx0dTMyIHRjcF9yZW5vX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzayk7XG4xNDA5Olx0dTMyIHRjcF9yZW5vX3VuZG9fY3duZChzdHJ1Y3Qgc29jayAqc2spO1xuMTQxMDpcdHZvaWQgdGNwX3Jlbm9fY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZCk7XG4xNDExOlx0ZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm87XG4xNDEyOlx0XG4xNDEzOlx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7XG4xNDE0Olx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmRfa2V5KHUzMiBrZXkpO1xuMTQxNTpcdHUzMiB0Y3BfY2FfZ2V0X2tleV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgKmVjbl9jYSk7XG4xNDE2Olx0I2lmZGVmIENPTkZJR19JTkVUXG4xNDE3Olx0Y2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpO1xuMTQxODpcdCNlbHNlXG4xNDE5Olx0c3RhdGljIGlubGluZSBjaGFyICp0Y3BfY2FfZ2V0X25hbWVfYnlfa2V5KHUzMiBrZXksIGNoYXIgKmJ1ZmZlcilcbjE0MjA6XHR7XG4xNDIxOlx0XHRyZXR1cm4gTlVMTDtcbjE0MjI6XHR9XG4xNDIzOlx0I2VuZGlmXG4xNDI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmdlc3Rpb24gQ29udHJvbCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzZWUgdGhhdCBgbmFtZWAgaXMgZGVjbGFyZWQgYXMgYSBmaXhlZC1zaXplIGNoYXJhY3RlciBhcnJheTogYGNoYXIgbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdYC4gUmlnaHQgYXdheSwgdGhlIGBtZW1jcHlgIGlzIGNvcHlpbmcgYFRDUF9DQV9OQU1FX01BWGAgYnl0ZXMgZnJvbSBgY2Ffb3BzLSZndDtuYW1lYCBpbnRvIGBjYV9uYW1lYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgc2luY2UgYGNhX29wcy0mZ3Q7bmFtZWAgaXMgaXRzZWxmIGEgZml4ZWQtc2l6ZSBhcnJheSBvZiB0aGUgc2FtZSBzaXplLCB0aGlzIGxvb2tzIGxpa2UgYSBwZXJmZWN0bHkgc2FmZSBjb3B5IOKAkyBubyBwb3RlbnRpYWwgZm9yIHJlYWRpbmcgb3V0c2lkZSBvZiBib3VuZHMuIFRoYXTigJlzIGdvb2QuCgpCdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gTXkgZXhwZXJ0IGludHVpdGlvbiBpcyBraWNraW5nIGluLCBhbmQgSSBzdGFydCB3b25kZXJpbmc6IGlzIGBjYV9vcHMtJmd0O25hbWVgICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgdGhlc2UgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0cz8gVXN1YWxseSwgdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMgdmFyaWFibGVzIGRlZmluZWQgaW4ga2VybmVsIG1vZHVsZXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhhdCYjMzk7cyB0aGUgY29tbW9uIGNhc2UsIGFuZCB1c3VhbGx5IG5vdCBzb21ldGhpbmcgdG8gc3dlYXQuCgpIb3dldmVyLCBJIG5lZWQgdG8gY292ZXIgYWxsIHRoZSBiYXNlcy4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlIG1pZ2h0IGJlIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0dXJlcyB3aGVyZSBgbmFtZWAgbWlnaHQgKm5vdCogYmUgZnVsbHkgemVyb2VkLiBOb3csIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgQlBGIGxhbmRzY2FwZS4gV2l0aCBCUEYgYmVpbmcgYWJsZSB0byByZWdpc3RlciBjb25nZXN0aW9uIGNvbnRyb2xzLCB0aGF04oCZcyBhIG5ldyBhdHRhY2sgdmVjdG9yLiBJIHNob3VsZCBjaGVjayBgYnBmX3RjcF9jYWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdWNoIGR5bmFtaWMgaW5zdGFuY2VzLiBHb3R0YSBjb3ZlciBhbGwgbXkgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yMT11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3BtdHVfY29va2llICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc3luY19tc3MsdGNwX2N1cnJlbnRfbXNzLHRjcF8uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAgICAgICAgICAgaWNza19jYV9vcHMgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3Rzb19zZWdzLHRjLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTIzLXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgIGljc2tfYWZfb3BzICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3Bfc2VuZF9zeW5fZC4uLlxuLS1cbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg9Mjg9c3RydWN0IGluZXRfYmluZDJfYnVja2V0O1xuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaDoyOTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzO1xuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC0zMC1cbi0tXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPTgxPXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC05Ni1cdF9fdTMyXHRcdFx0ICBpY3NrX3BtdHVfY29va2llO1xuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaDo5NzpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmljc2tfY2Ffb3BzO1xuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC05OC1cdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgKmljc2tfYWZfb3BzO1xuLS1cbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaD01NT1zdHJ1Y3QgbmV0bnNfaXB2NCB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oLTIzNi1cdGludCBzeXNjdGxfdGNwX2Zhc3RvcGVuO1xuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oOjIzNzpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgX19yY3UgICp0Y3BfY29uZ2VzdGlvbl9jb250cm9sO1xuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oLTIzOC1cdHN0cnVjdCB0Y3BfZmFzdG9wZW5fY29udGV4dCBfX3JjdSAqdGNwX2Zhc3RvcGVuX2N0eDtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0xMzA2PXN0cnVjdCByYXRlX3NhbXBsZSB7XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMTMyNC1cbmluY2x1ZGUvbmV0L3RjcC5oOjEzMjU6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB7XG5pbmNsdWRlL25ldC90Y3AuaC0xMzI2LS8qIGZhc3QgcGF0aCBmaWVsZHMgYXJlIHB1dCBmaXJzdCB0byBmaWxsIG9uZSBjYWNoZSBsaW5lICovXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMTM4OC1cbmluY2x1ZGUvbmV0L3RjcC5oOjEzODk6aW50IHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XG5pbmNsdWRlL25ldC90Y3AuaDoxMzkwOnZvaWQgdGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnR5cGUpO1xuaW5jbHVkZS9uZXQvdGNwLmg6MTM5MTppbnQgdGNwX3VwZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSxcbmluY2x1ZGUvbmV0L3RjcC5oOjEzOTI6XHRcdFx0XHQgIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKm9sZF90eXBlKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjEzOTM6aW50IHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMTM5NC1cbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0xNDEwPXZvaWQgdGNwX3Jlbm9fY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZCk7XG5pbmNsdWRlL25ldC90Y3AuaDoxNDExOmV4dGVybiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9yZW5vO1xuaW5jbHVkZS9uZXQvdGNwLmgtMTQxMi1cbmluY2x1ZGUvbmV0L3RjcC5oOjE0MTM6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7XG5pbmNsdWRlL25ldC90Y3AuaDoxNDE0OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnRjcF9jYV9maW5kX2tleSh1MzIga2V5KTtcbmluY2x1ZGUvbmV0L3RjcC5oLTE0MTUtdTMyIHRjcF9jYV9nZXRfa2V5X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCAqZWNuX2NhKTtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0xNzE2PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlX2NoZWNrKHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MTcte1xuaW5jbHVkZS9uZXQvdGNwLmg6MTcxODpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2NhX29wcztcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MTktXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTE5ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwNy0vKiBcJiMzNDtjb25zdCB2b2lkICpcJiMzNDsgYmVjYXVzZSBzb21lIHN1YnN5c3RlbSBpc1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEyMDg6ICogcGFzc2luZyBhIGNvbnN0IChlLmcuIGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKilcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjA5LSAqL1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0xNTI9YnBmX3RjcF9jYV9nZXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTE2OS1cdFx0aWYgKHByb2dfb3BzX21vZmYocHJvZykgIT1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoxNzA6XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCByZWxlYXNlKSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xNzEtXHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19zZXRzb2Nrb3B0X25vZGVsYXlfcHJvdG87XG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTE4MC1cdFx0aWYgKHByb2dfb3BzX21vZmYocHJvZykgIT1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoxODE6XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCByZWxlYXNlKSlcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xODItXHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19nZXRzb2Nrb3B0X3Byb3RvO1xuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0yMTA9c3RhdGljIGludCBicGZfdGNwX2NhX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEzLXtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMTQ6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp1dGNwX2NhO1xubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIxNTpcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnRjcF9jYTtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMTYtXHR1MzIgbW9mZjtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMTctXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjE4Olx0dXRjcF9jYSA9IChjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICopdWRhdGE7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjE5Olx0dGNwX2NhID0gKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKilrZGF0YTtcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjAtXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyMi1cdHN3aXRjaCAobW9mZikge1xubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIyMzpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgZmxhZ3MpOlxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyNC1cdFx0aWYgKHV0Y3BfY2EtXHUwMDNlZmxhZ3MgXHUwMDI2IH5UQ1BfQ09OR19NQVNLKVxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjctXHRcdHJldHVybiAxO1xubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIyODpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgbmFtZSk6XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjI5LVx0XHRpZiAoYnBmX29ial9uYW1lX2NweSh0Y3BfY2EtXHUwMDNlbmFtZSwgdXRjcF9jYS1cdTAwM2VuYW1lLFxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz0zMTE9c3RhdGljIHZvaWQgX19icGZfdGNwX2NhX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0zMTQtXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MzE1OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIF9fYnBmX29wc190Y3BfY29uZ2VzdGlvbl9vcHMgPSB7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzE2LVx0LnNzdGhyZXNoID0gYnBmX3RjcF9jYV9zc3RocmVzaCxcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0yMDk9aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxMy17XG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMTQ6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHM7XG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0yMTUtXHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmhhbmRsZXI7XG4tLVxubmV0L2lwdjQvdGNwLmM9NDQ4Mj1pbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDU1Ni1cdGNhc2UgVENQX0NDX0lORk86IHtcbm5ldC9pcHY0L3RjcC5jOjQ1NTc6XHRcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcztcbm5ldC9pcHY0L3RjcC5jLTQ1NTgtXHRcdHVuaW9uIHRjcF9jY19pbmZvIGluZm87XG4tLVxubmV0L2lwdjQvdGNwLmM9NTE3MD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYWJvcnQpO1xubmV0L2lwdjQvdGNwLmMtNTE3MS1cbm5ldC9pcHY0L3RjcC5jOjUxNzI6ZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm87XG5uZXQvaXB2NC90Y3AuYy01MTczLVxuLS1cbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTMwPV9fYnBmX2tmdW5jIHN0YXRpYyB2b2lkIGJicl9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpXG4tLVxubmV0L2lwdjQvdGNwX2Jici5jLTExNDMtXG5uZXQvaXB2NC90Y3BfYmJyLmM6MTE0NDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfYmJyLmMtMTE0NS1cdC5mbGFnc1x0XHQ9IFRDUF9DT05HX05PTl9SRVNUUklDVEVELFxuLS1cbm5ldC9pcHY0L3RjcF9iaWMuYz0xOTA9c3RhdGljIHZvaWQgYmljdGNwX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSlcbi0tXG5uZXQvaXB2NC90Y3BfYmljLmMtMjAxLVxubmV0L2lwdjQvdGNwX2JpYy5jOjIwMjpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBiaWN0Y3AgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9iaWMuYy0yMDMtXHQuaW5pdFx0XHQ9IGJpY3RjcF9pbml0LFxuLS1cbm5ldC9pcHY0L3RjcF9jZGcuYz0zODc9c3RhdGljIHZvaWQgdGNwX2NkZ19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfY2RnLmMtMzk0LVxubmV0L2lwdjQvdGNwX2NkZy5jOjM5NTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfY2RnIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfY2RnLmMtMzk2LVx0LmNvbmdfYXZvaWQgPSB0Y3BfY2RnX2NvbmdfYXZvaWQsXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0yMz1zdGF0aWMgTElTVF9IRUFEKHRjcF9jb25nX2xpc3QpO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMjUtLyogU2ltcGxlIGxpbmVhciBzZWFyY2gsIGRvbiYjMzk7dCBleHBlY3QgbWFueSBlbnRyaWVzISAqL1xubmV0L2lwdjQvdGNwX2NvbmcuYzoyNjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2FfZmluZChjb25zdCBjaGFyICpuYW1lKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNy17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjI4Olx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqZTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjktXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0zOD12b2lkIHRjcF9zZXRfY2Ffc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1OCBjYV9zdGF0ZSlcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jLTQ5LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1IGxvY2sgaGVsZCAqL1xubmV0L2lwdjQvdGNwX2NvbmcuYzo1MDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmRfYXV0b2xvYWQoY29uc3QgY2hhciAqbmFtZSlcbm5ldC9pcHY0L3RjcF9jb25nLmMtNTEte1xubmV0L2lwdjQvdGNwX2NvbmcuYzo1MjpcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhID0gdGNwX2NhX2ZpbmQobmFtZSk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTUzLVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtNjUtLyogU2ltcGxlIGxpbmVhciBzZWFyY2gsIG5vdCBtdWNoIGluIGhlcmUuICovXG5uZXQvaXB2NC90Y3BfY29uZy5jOjY2OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnRjcF9jYV9maW5kX2tleSh1MzIga2V5KVxubmV0L2lwdjQvdGNwX2NvbmcuYy02Ny17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjY4Olx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqZTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtNjktXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYy03Ny1cbm5ldC9pcHY0L3RjcF9jb25nLmM6Nzg6aW50IHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTc5LXtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jLTkyLSAqL1xubmV0L2lwdjQvdGNwX2NvbmcuYzo5MzppbnQgdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSlcbm5ldC9pcHY0L3RjcF9jb25nLmMtOTQte1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MTE2PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2wpO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMTIzLSAqL1xubmV0L2lwdjQvdGNwX2NvbmcuYzoxMjQ6dm9pZCB0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTEyNS17XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0xMzk9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKTtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jLTE0NS0gKi9cbm5ldC9pcHY0L3RjcF9jb25nLmM6MTQ2OmludCB0Y3BfdXBkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSwgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqb2xkX2NhKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0xNDcte1xubmV0L2lwdjQvdGNwX2NvbmcuYzoxNDg6XHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpleGlzdGluZztcbm5ldC9pcHY0L3RjcF9jb25nLmMtMTQ5LVx0aW50IHJldCA9IDA7XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0xODE9dTMyIHRjcF9jYV9nZXRfa2V5X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCAqZWNuX2NhKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0xODIte1xubmV0L2lwdjQvdGNwX2NvbmcuYzoxODM6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtMTg0LVx0dTMyIGtleSA9IFRDUF9DQV9VTlNQRUM7XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0xOTk9Y2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTIwMC17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjIwMTpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0yMDItXHRjaGFyICpyZXQgPSBOVUxMO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjE2PXZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE5LVx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2NvbmcuYzoyMjA6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjIxLVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjUwPXN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjUxOlx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNTIte1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjgxPWludCB0Y3Bfc2V0X2RlZmF1bHRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjgyLXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjgzOlx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XG5uZXQvaXB2NC90Y3BfY29uZy5jOjI4NDpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnByZXY7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTI4NS1cdGludCByZXQ7XG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0zMTk9dm9pZCB0Y3BfZ2V0X2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYnVmLCBzaXplX3QgbWF4bGVuKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0zMjAte1xubmV0L2lwdjQvdGNwX2NvbmcuYzozMjE6XHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzIyLVx0c2l6ZV90IG9mZnMgPSAwO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MzM3PXZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTMzOC17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjMzOTpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0zNDAtXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0zNDg9dm9pZCB0Y3BfZ2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IG1heGxlbilcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzQ5LXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6MzUwOlx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTM1MS1cdHNpemVfdCBvZmZzID0gMDtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jPTM2OT1pbnQgdGNwX3NldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICp2YWwpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTM3MC17XG5uZXQvaXB2NC90Y3BfY29uZy5jOjM3MTpcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0zNzItXHRjaGFyICpzYXZlZF9jbG9uZSwgKmNsb25lLCAqbmFtZTtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jPTQxMj1pbnQgdGNwX3NldF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGxvYWQsXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYy00MTUtXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jOjQxNjpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX2NvbmcuYy00MTctXHRpbnQgZXJyID0gMDtcbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jPTUyOT1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmVub191bmRvX2N3bmQpO1xubmV0L2lwdjQvdGNwX2NvbmcuYy01MzAtXG5uZXQvaXB2NC90Y3BfY29uZy5jOjUzMTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9yZW5vID0ge1xubmV0L2lwdjQvdGNwX2NvbmcuYy01MzItXHQuZmxhZ3NcdFx0PSBUQ1BfQ09OR19OT05fUkVTVFJJQ1RFRCxcbi0tXG5uZXQvaXB2NC90Y3BfY3ViaWMuYz00NDk9X19icGZfa2Z1bmMgc3RhdGljIHZvaWQgY3ViaWN0Y3BfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxuLS1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTQ3NC1cbm5ldC9pcHY0L3RjcF9jdWJpYy5jOjQ3NTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBjdWJpY3RjcCBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvdGNwX2N1YmljLmMtNDc2LVx0LmluaXRcdFx0PSBjdWJpY3RjcF9pbml0LFxuLS1cbm5ldC9pcHY0L3RjcF9kY3RjcC5jPTc3PU1PRFVMRV9QQVJNX0RFU0MoZGN0Y3BfYWxwaGFfb25faW5pdCwgXCYjMzQ7cGFyYW1ldGVyIGZvciBpbml0aWFsIGFscGhhIHZhbHVlXCYjMzQ7KTtcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTc4LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6Nzk6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGN0Y3BfcmVubztcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTgwLVxuLS1cbm5ldC9pcHY0L3RjcF9kY3RjcC5jPTI0Nz1fX2JwZl9rZnVuYyBzdGF0aWMgdTMyIGRjdGNwX2N3bmRfdW5kbyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMjU0LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MjU1OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yNTYtXHQuaW5pdFx0XHQ9IGRjdGNwX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX2RjdGNwLmMtMjY5LVxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MjcwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwX3Jlbm8gX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTI3MS1cdC5zc3RocmVzaFx0PSB0Y3BfcmVub19zc3RocmVzaCxcbi0tXG5uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmM9MTUxPXN0YXRpYyB1MzIgaHN0Y3Bfc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYy0xNTktXG5uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmM6MTYwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9oaWdoc3BlZWQgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYy0xNjEtXHQuaW5pdFx0XHQ9IGhzdGNwX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX2h0Y3AuYz0yNjg9c3RhdGljIHZvaWQgaHRjcF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSlcbi0tXG5uZXQvaXB2NC90Y3BfaHRjcC5jLTI4OC1cbm5ldC9pcHY0L3RjcF9odGNwLmM6Mjg5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGh0Y3AgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9odGNwLmMtMjkwLVx0LmluaXRcdFx0PSBodGNwX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX2h5YmxhLmM9OTA9c3RhdGljIHZvaWQgaHlibGFfY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZClcbi0tXG5uZXQvaXB2NC90Y3BfaHlibGEuYy0xNjYtXG5uZXQvaXB2NC90Y3BfaHlibGEuYzoxNjc6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2h5YmxhIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfaHlibGEuYy0xNjgtXHQuaW5pdFx0XHQ9IGh5YmxhX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX2lsbGlub2lzLmM9MzA3PXN0YXRpYyBzaXplX3QgdGNwX2lsbGlub2lzX2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXG4tLVxubmV0L2lwdjQvdGNwX2lsbGlub2lzLmMtMzI5LVxubmV0L2lwdjQvdGNwX2lsbGlub2lzLmM6MzMwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9pbGxpbm9pcyBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvdGNwX2lsbGlub2lzLmMtMzMxLVx0LmluaXRcdFx0PSB0Y3BfaWxsaW5vaXNfaW5pdCxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MDU9c3RhdGljIHZvaWQgdGNwX3NuZGJ1Zl9leHBhbmQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYwNy1cdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjA4Olx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzID0gaW5ldF9jc2soc2spLVx1MDAzZWljc2tfY2Ffb3BzO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNjA5LVx0aW50IHNuZG1lbSwgcGVyX21zcztcbi0tXG5uZXQvaXB2NC90Y3BfbHAuYz0yNzQ9c3RhdGljIHZvaWQgdGNwX2xwX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxuLS1cbm5ldC9pcHY0L3RjcF9scC5jLTMyOS1cbm5ldC9pcHY0L3RjcF9scC5jOjMzMDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfbHAgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9scC5jLTMzMS1cdC5pbml0ID0gdGNwX2xwX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQ5Nz12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01MDMtXHRpZiAoY2Ffa2V5ICE9IFRDUF9DQV9VTlNQRUMpIHtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo1MDQ6XHRcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTUwNS1cbi0tXG5uZXQvaXB2NC90Y3BfbnYuYz00NTM9c3RhdGljIHNpemVfdCB0Y3Budl9nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBleHQsIGludCAqYXR0cixcbi0tXG5uZXQvaXB2NC90Y3BfbnYuYy00NjktXG5uZXQvaXB2NC90Y3BfbnYuYzo0NzA6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwbnYgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9udi5jLTQ3MS1cdC5pbml0XHRcdD0gdGNwbnZfaW5pdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjE1Nj1zdGF0aWMgdm9pZCB0Y3BfY3duZF92YWxpZGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaXNfY3duZF9saW1pdGVkKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIxNTcte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIxNTg6XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHM7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjE1OS1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjc2PXN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjI3Ny17XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjI3ODpcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2NhX29wcztcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMjc5LVx0dTMyIG1pbl90c28sIHRzb19zZWdzO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MDgxPXN0YXRpYyB2b2lkIHRjcF9jYV9kc3RfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDA4My1cdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MDg0Olx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDA4NS1cdHUzMiBjYV9rZXkgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9DQ19BTEdPKTtcbi0tXG5uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYz0zND1zdGF0aWMgdTMyIHRjcF9zY2FsYWJsZV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMtNDAtXG5uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYzo0MTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3Bfc2NhbGFibGUgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jLTQyLVx0LnNzdGhyZXNoXHQ9IHRjcF9zY2FsYWJsZV9zc3RocmVzaCxcbi0tXG5uZXQvaXB2NC90Y3BfdmVnYXMuYz0zMTM9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3ZlZ2FzX2dldF9pbmZvKTtcbm5ldC9pcHY0L3RjcF92ZWdhcy5jLTMxNC1cbm5ldC9pcHY0L3RjcF92ZWdhcy5jOjMxNTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfdmVnYXMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9pcHY0L3RjcF92ZWdhcy5jLTMxNi1cdC5pbml0XHRcdD0gdGNwX3ZlZ2FzX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX3Zlbm8uYz0yMDA9c3RhdGljIHUzMiB0Y3BfdmVub19zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3Zlbm8uYy0yMTItXG5uZXQvaXB2NC90Y3BfdmVuby5jOjIxMzpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfdmVubyBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvdGNwX3Zlbm8uYy0yMTQtXHQuaW5pdFx0XHQ9IHRjcF92ZW5vX2luaXQsXG4tLVxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmM9MjYyPXN0YXRpYyBzaXplX3QgdGNwX3dlc3R3b29kX2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXG4tLVxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmMtMjc4LVxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmM6Mjc5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF93ZXN0d29vZCBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L2lwdjQvdGNwX3dlc3R3b29kLmMtMjgwLVx0LmluaXRcdFx0PSB0Y3Bfd2VzdHdvb2RfaW5pdCxcbi0tXG5uZXQvaXB2NC90Y3BfeWVhaC5jPTE4OD1zdGF0aWMgdTMyIHRjcF95ZWFoX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfeWVhaC5jLTIwOC1cbm5ldC9pcHY0L3RjcF95ZWFoLmM6MjA5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF95ZWFoIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvaXB2NC90Y3BfeWVhaC5jLTIxMC1cdC5pbml0XHRcdD0gdGNwX3llYWhfaW5pdCxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTUyND1zdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTI2LVx0X191MzIgKmtlcm5fZnVuY19vZmY7XG50b29scy9saWIvYnBmL2xpYmJwZi5jOjUyNzpcdC8qIGUuZy4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBpbiBicGZfcHJvZyYjMzk7cyBidGYgZm9ybWF0ICovXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUyOC1cdHZvaWQgKmRhdGE7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy01MzItXHQgKlx0Wy4uLiBzb21lIG90aGVyIGtlcm5lbCBmaWVsZHMgLi4uXVxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1MzM6XHQgKlx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBkYXRhO1xudG9vbHMvbGliL2JwZi9saWJicGYuYy01MzQtXHQgKiB9XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xMDQ2PWZpbmRfc3RydWN0X29wc19rZXJuX3R5cGVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnRuYW1lX3Jhdyxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwODItXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjEwODM6XHQvKiBGaW5kIFwmIzM0O3N0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNcJiMzNDsgZnJvbVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDg0LVx0ICogc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3RjcF9jb25nZXN0aW9uX29wcyB7XG50b29scy9saWIvYnBmL2xpYmJwZi5jLTEwODUtXHQgKlx0WyAuLi4gXVxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxMDg2Olx0ICpcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGF0YTtcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA4Ny1cdCAqIH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2NjX2N1YmljLmMtNS0gKiAgICBpcyB0aGF0IHRoaXMgYnBmIHByb2dyYW0gcmVsaWVzIG9uIGBjb25nX2NvbnRyb2xgIHJhdGhlciB0aGFuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2NjX2N1YmljLmM6NjogKiAgICBgY29uZ19hdm9pZGAgaW4gdGhlIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2NjX2N1YmljLmMtNy0gKiAyLiBMb2dpYyBzdWNoIGFzIHRjcF9jd25kX3JlZHVjdGlvbiwgdGNwX2NvbmdfYXZvaWQsIGFuZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY2NfY3ViaWMuYz0xNjg9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9jY19jdWJpYy5jOjE2OTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNjX2N1YmljID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9jY19jdWJpYy5jLTE3MC1cdC5pbml0XHRcdD0gKHZvaWQgKilicGZfY3ViaWNfaW5pdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2N1YmljLmM9NTQ0PVNFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY3ViaWMuYzo1NDU6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBjdWJpYyA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY3ViaWMuYy01NDYtXHQuaW5pdFx0XHQ9ICh2b2lkICopYnBmX2N1YmljX2luaXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jPTIzOT1TRUMoXCYjMzQ7LnN0cnVjdF9vcHNcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwLmM6MjQwOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGN0Y3Bfbm91c2UgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwLmMtMjQxLVx0LmluaXRcdFx0PSAodm9pZCAqKWJwZl9kY3RjcF9pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZGN0Y3AuYz0yNDc9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jOjI0ODpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jLTI0OS1cdC5pbml0XHRcdD0gKHZvaWQgKilicGZfZGN0Y3BfaW5pdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYz0xOD1TRUMoXCYjMzQ7LnN0cnVjdF9vcHNcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYzoxOTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwX3JlbCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZGN0Y3BfcmVsZWFzZS5jLTIwLVx0LnJlbGVhc2VcdD0gKHZvaWQgKilkY3RjcF9ub3VzZV9yZWxlYXNlLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfdGNwX25vZ3BsLmM9MTM9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl90Y3Bfbm9ncGwuYzoxNDpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGJwZl9ub2dwbHRjcCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfdGNwX25vZ3BsLmMtMTUtXHQuaW5pdCAgICAgICAgICAgPSAodm9pZCAqKW5vZ3BsdGNwX2luaXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmM9MjE9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmM6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBpbmNvbXBsX2Nvbmdfb3BzID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmMtMjMtXHQvKiBJbnRlbnRpb25hbGx5IGxlYXZpbmcgb3V0IGFueSBvZiB0aGUgcmVxdWlyZWQgY29uZ19hdm9pZCgpIGFuZFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYz0xMTI9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jOjExMzpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9jYV9rZnVuYyA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYy0xMTQtXHQuaW5pdFx0XHQ9ICh2b2lkICopaW5pdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3Vuc3VwcF9jb25nX29wLmM9MTc9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91bnN1cHBfY29uZ19vcC5jOjE4OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdW5zdXBwX2Nvbmdfb3AgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3Vuc3VwcF9jb25nX29wLmMtMTktXHQuZ2V0X2luZm8gPSAodm9pZCAqKXVuc3VwcF9jb25nX29wX2dldF9pbmZvLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW50cnVzdGVkX2J0Zl93cml0ZS5jPTIyPVNFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW50cnVzdGVkX2J0Zl93cml0ZS5jOjIzOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdW50cnVzdGVkX2J0Zl93cml0ZSA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW50cnVzdGVkX2J0Zl93cml0ZS5jLTI0LVx0LmluaXQgPSAodm9pZCAqKXVudHJ1c3RlZF9idGZfd3JpdGVfaW5pdCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jPTQyPVNFQyhcJiMzNDsuc3RydWN0X29wcy5saW5rXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo0MzpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX3VwZGF0ZV8xID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYy00NC1cdC5pbml0ID0gKHZvaWQgKiljYV91cGRhdGVfMV9pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmM9NTE9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmtcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jOjUyOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgY2FfdXBkYXRlXzIgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jLTUzLVx0LmluaXQgPSAodm9pZCAqKWNhX3VwZGF0ZV8yX2luaXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYz02MD1TRUMoXCYjMzQ7LnN0cnVjdF9vcHMubGlua1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmM6NjE6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBjYV93cm9uZyA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmMtNjItXHQuY29uZ19jb250cm9sID0gKHZvaWQgKiljYV91cGRhdGVfY29uZ19jb250cm9sLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmM9Njg9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo2OTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX25vX2xpbmsgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jLTcwLVx0LmNvbmdfY29udHJvbCA9ICh2b2lkICopY2FfdXBkYXRlX2NvbmdfY29udHJvbCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3dyaXRlX3NrX3BhY2luZy5jPTU2PVNFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffd3JpdGVfc2tfcGFjaW5nLmM6NTc6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB3cml0ZV9za19wYWNpbmcgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3dyaXRlX3NrX3BhY2luZy5jLTU4LVx0LmluaXQgPSAodm9pZCAqKXdyaXRlX3NrX3BhY2luZ19pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9ub25fc2N4X2tmdW5jX2RlbnkuYnBmLmM9MzE9U0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L25vbl9zY3hfa2Z1bmNfZGVueS5icGYuYzozMjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9ub25fc2N4X2NhID0ge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L25vbl9zY3hfa2Z1bmNfZGVueS5icGYuYy0zMy1cdC5zc3RocmVzaCAgID0gKHZvaWQgKil0Y3BfY2Ffc3N0aHJlc2gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzI5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gQlBGLVJlZ2lzdGVyZWQgVENQIENvbmdlc3Rpb24gQ29udHJvbCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgaW4gYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AgYW5kIHNvbWV0aGluZyYjMzk7cyBjYXRjaGluZyBteSBhdHRlbnRpb24uIEJQRiBjYW4gcmVnaXN0ZXIgYHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGNvb2wsIGJ1dCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIG5hbWUgaXMgaGFuZGxlZC4gVGhlIGNvZGUgdXNlcyBgYnBmX29ial9uYW1lX2NweWAgdG8gY29weSB0aGUgbmFtZSwgd2hpY2ggc2VlbXMgZmluZSDigJMgaXQgbnVsbC10ZXJtaW5hdGVzLCBzbyB0aGF0IHBhcnQmIzM5O3MgY292ZXJlZC4gVGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBhbGxvY2F0ZXMgdGhlIHJlc3Qgb2YgYHRjcF9jYWAsIGFuZCBnZW5lcmFsbHksIHRoYXQgbWVhbnMgemVyb2VkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZCBmb3IgYXZvaWRpbmcgZ2FyYmFnZSBkYXRhLgoKQnV0IHRoZW4gSSBzZWUgdGhpcyBzbmlwcGV0OgoKYGBgYwoJCWNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307Ci4uLgoJCXJjdV9yZWFkX2xvY2soKTsKCQljYV9vcHMgPSBSRUFEX09OQ0UoaWNzay0mZ3Q7aWNza19jYV9vcHMpOwoJCW1lbWNweShjYV9uYW1lLCBjYV9vcHMtJmd0O25hbWUsIHNpemVvZihjYV9uYW1lKSk7CgkJcmN1X3JlYWRfdW5sb2NrKCk7CgoJCWlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBjYV9uYW1lLCBsZW4pKQpgYGAKCkFuZCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIGBtZW1jcHlgIGNvcGllcyAqZXhhY3RseSogYFRDUF9DQV9OQU1FX01BWGAgYnl0ZXMgZnJvbSBgY2Ffb3BzLSZndDtuYW1lYCBpbnRvIGBjYV9uYW1lYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB3aGlsZSBgYnBmX29ial9uYW1lX2NweWAgZW5zdXJlcyB0aGF0IHRoZSBuYW1lIGlzIG51bGwtdGVybWluYXRlZCwgaXQgKmRvZXNuJiMzOTt0KiB6ZXJvIG91dCBhbnkgdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIGBuYW1lYCBmaWVsZCBvZiB0aGUgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0dXJlLiBJbiBvdGhlciB3b3JkcywgaWYgdGhlIG5hbWUgaXNuJiMzOTt0IGEgZnVsbCBgVENQX0NBX05BTUVfTUFYYCBjaGFyYWN0ZXJzIGxvbmcsIHRoZW4gdGhlcmUmIzM5O3MgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFmdGVyKiB0aGUgbnVsbCB0ZXJtaW5hdG9yLgoKU28sIGlmIGBjYV9vcHMtJmd0O25hbWVgICpkb2VzKiBoYXZlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKmFmdGVyKiB0aGUgbnVsbCB0ZXJtaW5hdG9yLCB0aG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzIGFyZSBjb3BpZWQgdG8gYGNhX25hbWVgLiBUaGVuLCB0aG9zZSBieXRlcyBpbiBgY2FfbmFtZWAgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIGBjb3B5X3RvX3NvY2twdHJgLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWssIGlzbiYjMzk7dCBpdD8gVGhhdCBjYW4mIzM5O3QgYmUgZ29vZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyAqYWN0dWFsbHkqIGEgcHJvYmxlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGNhX29wcy0mZ3Q7bmFtZWAgY2FuIGFjdHVhbGx5ICpoYXZlKiB1bmluaXRpYWxpemVkIGJ5dGVzLiBTcGVjaWZpY2FsbHksIGBjYV9vcHMtJmd0O25hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBgY2hhciBuYW1lW1RDUF9DQV9OQU1FX01BWF1gIGluc2lkZSBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AuCgpGb3IgYnVpbHQtaW4gY29uZ2VzdGlvbiBjb250cm9scywgc3RhdGljYWxseSBhbGxvY2F0ZWQsIHRob3NlIHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gQnV0IHdoYXQgYWJvdXQgQlBGIGNvbmdlc3Rpb24gY29udHJvbHM/IEkgbmVlZCB0byBnbyBsb29rIGFuZCBzZWUgaG93IEJQRiBhbGxvY2F0ZXMgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzE0PXN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtNzI1LVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcyNjpzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTcyNy1cdFx0XHRcdFx0ICAgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTE5ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwMC1cdC5tYXBfZGVsZXRlX2VsZW0gPSBicGZfc3RydWN0X29wc19tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwMTpcdC5tYXBfdXBkYXRlX2VsZW0gPSBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0sXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTIwMi1cdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbWAuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgc3BlY2lmaWNhbGx5IGlzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgYW5kIHdoYXQgcG90ZW50aWFsIGlzc3VlcyBtaWdodCBsdXJrIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHN1YnRsZSBnb3RjaGFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBjb25jdXJyZW5jeSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gZGF0YSByYWNlcyBvciBtZW1vcnkgY29ycnVwdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdXBkYXRpbmcgZWxlbWVudHMgd2l0aGluIGEgQlBGIG1hcC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSByZWFkL3dyaXRlIG9wZXJhdGlvbnMsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBicm9hZGVyIEJQRiBmcmFtZXdvcmsuIElzIGl0IGhhbmRsaW5nIGVycm9ycyBncmFjZWZ1bGx5PyBBcmUgdGhlcmUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBsaWtlIGludGVnZXIgb3ZlcmZsb3dzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgdGhhdCBuZWVkIHRvIGJlIGNhcmVmdWxseSBjb25zaWRlcmVkPyBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIGRvaW5nIGEgbG90IG9mIHBvaW50ZXIganVnZ2xpbmcgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjY6XHRzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIDcyNzpcdFx0XHRcdFx0XHQgICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxuIDcyODpcdHtcbiA3Mjk6XHRcdHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcCA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICopbWFwO1xuIDczMDpcdFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjID0gc3RfbWFwLVx1MDAzZXN0X29wc19kZXNjO1xuIDczMTpcdFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHMgPSBzdF9vcHNfZGVzYy1cdTAwM2VzdF9vcHM7XG4gNzMyOlx0XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKnV2YWx1ZSwgKmt2YWx1ZTtcbiA3MzM6XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbW9kdWxlX3R5cGU7XG4gNzM0Olx0XHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuIDczNTpcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0ID0gc3Rfb3BzX2Rlc2MtXHUwMDNldHlwZTtcbiA3MzY6XHRcdHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcztcbiA3Mzc6XHRcdHZvaWQgKnVkYXRhLCAqa2RhdGE7XG4gNzM4Olx0XHRpbnQgcHJvZ19mZCwgZXJyO1xuIDczOTpcdFx0dTMyIGksIHRyYW1wb2xpbmVfc3RhcnQsIGltYWdlX29mZiA9IDA7XG4gNzQwOlx0XHR2b2lkICpjdXJfaW1hZ2UgPSBOVUxMLCAqaW1hZ2UgPSBOVUxMO1xuIDc0MTpcdFx0c3RydWN0IGJwZl9saW5rICoqcGxpbms7XG4gNzQyOlx0XHRzdHJ1Y3QgYnBmX2tzeW0gKipwa3N5bTtcbiA3NDM6XHRcdGNvbnN0IGNoYXIgKnRuYW1lLCAqbW5hbWU7XG4gNzQ0Olx0XG4gNzQ1Olx0XHRpZiAoZmxhZ3MpXG4gNzQ2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc0NzpcdFxuIDc0ODpcdFx0aWYgKCoodTMyICopa2V5ICE9IDApXG4gNzQ5Olx0XHRcdHJldHVybiAtRTJCSUc7XG4gNzUwOlx0XG4gNzUxOlx0XHRlcnIgPSBjaGVja196ZXJvX2hvbGVzKHN0X21hcC1cdTAwM2VidGYsIHN0X29wc19kZXNjLVx1MDAzZXZhbHVlX3R5cGUsIHZhbHVlKTtcbiA3NTI6XHRcdGlmIChlcnIpXG4gNzUzOlx0XHRcdHJldHVybiBlcnI7XG4gNzU0Olx0XG4gNzU1Olx0XHR1dmFsdWUgPSB2YWx1ZTtcbiA3NTY6XHRcdGVyciA9IGNoZWNrX3plcm9faG9sZXMoc3RfbWFwLVx1MDAzZWJ0ZiwgdCwgdXZhbHVlLVx1MDAzZWRhdGEpO1xuIDc1NzpcdFx0aWYgKGVycilcbiA3NTg6XHRcdFx0cmV0dXJuIGVycjtcbiA3NTk6XHRcbiA3NjA6XHRcdGlmICh1dmFsdWUtXHUwMDNlY29tbW9uLnN0YXRlIHx8IHJlZmNvdW50X3JlYWQoXHUwMDI2dXZhbHVlLVx1MDAzZWNvbW1vbi5yZWZjbnQpKVxuIDc2MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA3NjI6XHRcbiA3NjM6XHRcdHRub2RlcyA9IGt6YWxsb2Nfb2JqcygqdG5vZGVzLCBCUEZfVFJBTVBfTUFYKTtcbiA3NjQ6XHRcdGlmICghdG5vZGVzKVxuIDc2NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3NjY6XHRcbiA3Njc6XHRcdHV2YWx1ZSA9IChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUgKilzdF9tYXAtXHUwMDNldXZhbHVlO1xuIDc2ODpcdFx0a3ZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKVx1MDAyNnN0X21hcC1cdTAwM2VrdmFsdWU7XG4gNzY5Olx0XG4gNzcwOlx0XHRtdXRleF9sb2NrKFx1MDAyNnN0X21hcC1cdTAwM2Vsb2NrKTtcbiA3NzE6XHRcbiA3NzI6XHRcdGlmIChrdmFsdWUtXHUwMDNlY29tbW9uLnN0YXRlICE9IEJQRl9TVFJVQ1RfT1BTX1NUQVRFX0lOSVQpIHtcbiA3NzM6XHRcdFx0ZXJyID0gLUVCVVNZO1xuIDc3NDpcdFx0XHRnb3RvIHVubG9jaztcbiA3NzU6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNzcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZGV0YWlscyBvbiBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiB1cGRhdGluZyBlbGVtZW50cyB3aXRoaW4gc3RydWN0LWJhc2VkIEJQRiBtYXBzLiBJJiMzOTttIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3aGVuIG11bHRpcGxlIEJQRiBwcm9ncmFtcyBhcmUgdHJ5aW5nIHRvIG1vZGlmeSB0aGUgc2FtZSBzdHJ1Y3R1cmUgc2ltdWx0YW5lb3VzbHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQsIGlmIGFueSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgQlBGIGV4ZWN1dGlvbiBtb2RlbC4gSSYjMzk7bGwgYWxzbyBiZSBleGFtaW5pbmcgaG93IGVycm9yIGhhbmRsaW5nIGlzIG1hbmFnZWQg4oCTIHBhcnRpY3VsYXJseSBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIGludmFsaWQga2V5L3ZhbHVlIGNvbWJpbmF0aW9ucy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbnMgYnVpbHQgaW50byB0aGUgdXBkYXRlIHByb2Nlc3M/IEFyZSB0aGVyZSBhbnkgbm90YWJsZSBkaWZmZXJlbmNlcyBpbiBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGNvbXBhcmVkIHRvIGBicGZfbWFwX3VwZGF0ZV9lbGVtYCBmb3Igb3RoZXIgbWFwIHR5cGVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHksIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gZGF0YSBjb25zaXN0ZW5jeSB3aXRoaW4gYSBCUEYtZHJpdmVuIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3NjpcdFxuIDc3NzpcdFx0bWVtY3B5KHV2YWx1ZSwgdmFsdWUsIG1hcC1cdTAwM2V2YWx1ZV9zaXplKTtcbiA3Nzg6XHRcbiA3Nzk6XHRcdHVkYXRhID0gXHUwMDI2dXZhbHVlLVx1MDAzZWRhdGE7XG4gNzgwOlx0XHRrZGF0YSA9IFx1MDAyNmt2YWx1ZS1cdTAwM2VkYXRhO1xuIDc4MTpcdFxuIDc4MjpcdFx0cGxpbmsgPSBzdF9tYXAtXHUwMDNlbGlua3M7XG4gNzgzOlx0XHRwa3N5bSA9IHN0X21hcC1cdTAwM2Vrc3ltcztcbiA3ODQ6XHRcdHRuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KHN0X21hcC1cdTAwM2VidGYsIHQtXHUwMDNlbmFtZV9vZmYpO1xuIDc4NTpcdFx0bW9kdWxlX3R5cGUgPSBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgc3Rfb3BzX2lkc1tJRFhfTU9EVUxFX0lEXSk7XG4gNzg2Olx0XHRmb3JfZWFjaF9tZW1iZXIoaSwgdCwgbWVtYmVyKSB7XG4gNzg3Olx0XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbXR5cGUsICpwdHlwZTtcbiA3ODg6XHRcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIDc4OTpcdFx0XHRzdHJ1Y3QgYnBmX3RyYW1wX2xpbmsgKmxpbms7XG4gNzkwOlx0XHRcdHN0cnVjdCBicGZfa3N5bSAqa3N5bTtcbiA3OTE6XHRcdFx0dTMyIG1vZmY7XG4gNzkyOlx0XG4gNzkzOlx0XHRcdG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcbiA3OTQ6XHRcdFx0bW5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc3RfbWFwLVx1MDAzZWJ0ZiwgbWVtYmVyLVx1MDAzZW5hbWVfb2ZmKTtcbiA3OTU6XHRcdFx0cHR5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihzdF9tYXAtXHUwMDNlYnRmLCBtZW1iZXItXHUwMDNldHlwZSwgTlVMTCk7XG4gNzk2Olx0XHRcdGlmIChwdHlwZSA9PSBtb2R1bGVfdHlwZSkge1xuIDc5NzpcdFx0XHRcdGlmICgqKHZvaWQgKiopKHVkYXRhICYjNDM7IG1vZmYpKVxuIDc5ODpcdFx0XHRcdFx0Z290byByZXNldF91bmxvY2s7XG4gNzk5Olx0XHRcdFx0Kih2b2lkICoqKShrZGF0YSAmIzQzOyBtb2ZmKSA9IEJQRl9NT0RVTEVfT1dORVI7XG4gODAwOlx0XHRcdFx0Y29udGludWU7XG4gODAxOlx0XHRcdH1cbiA4MDI6XHRcbiA4MDM6XHRcdFx0ZXJyID0gc3Rfb3BzLVx1MDAzZWluaXRfbWVtYmVyKHQsIG1lbWJlciwga2RhdGEsIHVkYXRhKTtcbiA4MDQ6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA4MDU6XHRcdFx0XHRnb3RvIHJlc2V0X3VubG9jaztcbiA4MDY6XHRcbiA4MDc6XHRcdFx0LyogVGhlIC1cdTAwM2Vpbml0X21lbWJlcigpIGhhcyBoYW5kbGVkIHRoaXMgbWVtYmVyICovXG4gODA4Olx0XHRcdGlmIChlcnIgXHUwMDNlIDApXG4gODA5Olx0XHRcdFx0Y29udGludWU7XG4gODEwOlx0XG4gODExOlx0XHRcdC8qIElmIHN0X29wcy1cdTAwM2Vpbml0X21lbWJlciBkb2VzIG5vdCBoYW5kbGUgaXQsXG4gODEyOlx0XHRcdCAqIHdlIHdpbGwgb25seSBoYW5kbGUgZnVuYyBwdHJzIGFuZCB6ZXJvLWVkIG1lbWJlcnNcbiA4MTM6XHRcdFx0ICogaGVyZS4gIFJlamVjdCBldmVyeXRoaW5nIGVsc2UuXG4gODE0Olx0XHRcdCAqL1xuIDgxNTpcdFxuIDgxNjpcdFx0XHQvKiBBbGwgbm9uIGZ1bmMgcHRyIG1lbWJlciBtdXN0IGJlIDAgKi9cbiA4MTc6XHRcdFx0aWYgKCFwdHlwZSB8fCAhYnRmX3R5cGVfaXNfZnVuY19wcm90byhwdHlwZSkpIHtcbiA4MTg6XHRcdFx0XHR1MzIgbXNpemU7XG4gODE5Olx0XG4gODIwOlx0XHRcdFx0bXR5cGUgPSBidGZfdHlwZV9ieV9pZChzdF9tYXAtXHUwMDNlYnRmLCBtZW1iZXItXHUwMDNldHlwZSk7XG4gODIxOlx0XHRcdFx0bXR5cGUgPSBidGZfcmVzb2x2ZV9zaXplKHN0X21hcC1cdTAwM2VidGYsIG10eXBlLCBcdTAwMjZtc2l6ZSk7XG4gODIyOlx0XHRcdFx0aWYgKElTX0VSUihtdHlwZSkpIHtcbiA4MjM6XHRcdFx0XHRcdGVyciA9IFBUUl9FUlIobXR5cGUpO1xuIDgyNDpcdFx0XHRcdFx0Z290byByZXNldF91bmxvY2s7XG4gODI1Olx0XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQyMwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIERhdGEgRmxvdyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRhdGEgZmxvdyBiZXR0ZXIuIEl0IGxvb2tzIGxpa2UgYGtkYXRhYCBpcyBnZXR0aW5nIGl0cyBpbml0aWFsIHZhbHVlIGRpcmVjdGx5IGZyb20gYGt2YWx1ZS0mZ3Q7ZGF0YWAuIEFuZCBga3ZhbHVlYCwgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBpcyBhIGNvbXBvbmVudCBvZiB0aGlzIGBzdF9tYXBgIHN0cnVjdHVyZS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBxdWVzdGlvbnMgYWJvdXQgb3duZXJzaGlwIGFuZCBsaWZlY3ljbGUuIEkgbmVlZCB0byBiYWNrIHVwIGEgbGV2ZWwgaGVyZS4gTGV0IG1lIHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIGBzdF9tYXBgLiBXaGVyZSBpcyB0aGlzIHRoaW5nIGJlaW5nIGNyZWF0ZWQgYW5kIGhvdyBpcyBpdCBiZWluZyBwb3B1bGF0ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHRvIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IHBvc3NpYmxlIGlzc3VlcyB3aXRoIG1lbW9yeSwgZGF0YSBjb25zaXN0ZW5jeSwgb3IgZXZlbiBjb25jdXJyZW5jeS4gUmlnaHQgbm93LCB0aGlzIGNvbm5lY3Rpb24gaXMgYSBsaXR0bGUgdG9vIG9wYXF1ZSBmb3IgbXkgbGlraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RydWN0X29wc19tYXBfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwMjc9c3RhdGljIHZvaWQgYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA2MS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMDYyOnN0YXRpYyBpbnQgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjMte1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMDcxPXN0YXRpYyB1MzIgY291bnRfZnVuY19wdHJzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMDgzLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwODQ6c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4NS17XG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTExOTQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGJwZl9zdHJ1Y3Rfb3BzX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NTpcdC5tYXBfYWxsb2NfY2hlY2sgPSBicGZfc3RydWN0X29wc19tYXBfYWxsb2NfY2hlY2ssXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NjpcdC5tYXBfYWxsb2MgPSBicGZfc3RydWN0X29wc19tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE5Ny1cdC5tYXBfZnJlZSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA3MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgQlBGIGVjb3N5c3RlbSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIGN1c3RvbSBtYXAgdHlwZXMgYW5kIHN0cnVjdHVyZSBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgd2hldGhlciBpdCYjMzk7cyBhZGhlcmluZyB0byB0aGUgZXhwZWN0ZWQgbWVtb3J5IG1vZGVsIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0uIEkgd2FudCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHVzaW5nIHRoZSBzdGFuZGFyZCBga21hbGxvY2Agb3IsIHBlcmhhcHMsIGEgbW9yZSBvcHRpbWl6ZWQsIEJQRi1zcGVjaWZpYyBhbGxvY2F0b3IuIEkgbmVlZCB0byBlbnN1cmUgaXQgaW50ZWdyYXRlcyBzZWFtbGVzc2x5IHdpdGggYW55IGV4aXN0aW5nIG1hcCBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIEJQRiB2ZXJpZmllci4gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbnQgYWNjZXNzIGlzc3VlcyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gYWxzbyBuZWVkcyB0byBiZSBvbiBteSByYWRhciwgZXNwZWNpYWxseSBpZiB0aGlzIG5ldyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgaGlnaC1mcmVxdWVuY3kgb3IgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbGltaXRzIOKAkyBkb2VzIHRoZSBhbGxvY2F0aW9uIGFjY291bnQgZm9yIHBlci1CUEYtcHJvZ3JhbSBtZW1vcnkgY2FwcyBvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gbWVtb3J5PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgd29ya3MhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDg0Olx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4xMDg1Olx0e1xuMTA4NjpcdFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjO1xuMTA4NzpcdFx0c2l6ZV90IHN0X21hcF9zaXplO1xuMTA4ODpcdFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwO1xuMTA4OTpcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCAqdnQ7XG4xMDkwOlx0XHRzdHJ1Y3QgbW9kdWxlICptb2QgPSBOVUxMO1xuMTA5MTpcdFx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbjEwOTI6XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbjEwOTM6XHRcdGludCByZXQ7XG4xMDk0Olx0XG4xMDk1Olx0XHRpZiAoYXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1ZUWVBFX0JURl9PQkpfRkQpIHtcbjEwOTY6XHRcdFx0LyogVGhlIG1hcCBob2xkcyBidGYgZm9yIGl0cyB3aG9sZSBsaWZlIHRpbWUuICovXG4xMDk3Olx0XHRcdGJ0ZiA9IGJ0Zl9nZXRfYnlfZmQoYXR0ci1cdTAwM2V2YWx1ZV90eXBlX2J0Zl9vYmpfZmQpO1xuMTA5ODpcdFx0XHRpZiAoSVNfRVJSKGJ0ZikpXG4xMDk5Olx0XHRcdFx0cmV0dXJuIEVSUl9DQVNUKGJ0Zik7XG4xMTAwOlx0XHRcdGlmICghYnRmX2lzX21vZHVsZShidGYpKSB7XG4xMTAxOlx0XHRcdFx0YnRmX3B1dChidGYpO1xuMTEwMjpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuMTEwMzpcdFx0XHR9XG4xMTA0Olx0XG4xMTA1Olx0XHRcdG1vZCA9IGJ0Zl90cnlfZ2V0X21vZHVsZShidGYpO1xuMTEwNjpcdFx0XHQvKiBtb2QgaG9sZHMgYSByZWZjbnQgdG8gYnRmLiBXZSBkb24mIzM5O3QgbmVlZCBhbiBleHRyYSByZWZjbnRcbjExMDc6XHRcdFx0ICogaGVyZS5cbjExMDg6XHRcdFx0ICovXG4xMTA5Olx0XHRcdGJ0Zl9wdXQoYnRmKTtcbjExMTA6XHRcdFx0aWYgKCFtb2QpXG4xMTExOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4xMTEyOlx0XHR9IGVsc2Uge1xuMTExMzpcdFx0XHRidGYgPSBicGZfZ2V0X2J0Zl92bWxpbnV4KCk7XG4xMTE0Olx0XHRcdGlmIChJU19FUlIoYnRmKSlcbjExMTU6XHRcdFx0XHRyZXR1cm4gRVJSX0NBU1QoYnRmKTtcbjExMTY6XHRcdFx0aWYgKCFidGYpXG4xMTE3Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcbjExMTg6XHRcdH1cbjExMTk6XHRcbjExMjA6XHRcdHN0X29wc19kZXNjID0gYnBmX3N0cnVjdF9vcHNfZmluZF92YWx1ZShidGYsIGF0dHItXHUwMDNlYnRmX3ZtbGludXhfdmFsdWVfdHlwZV9pZCk7XG4xMTIxOlx0XHRpZiAoIXN0X29wc19kZXNjKSB7XG4xMTIyOlx0XHRcdHJldCA9IC1FTk9UU1VQUDtcbjExMjM6XHRcdFx0Z290byBlcnJvdXQ7XG4xMTI0Olx0XHR9XG4xMTI1Olx0XG4xMTI2Olx0XHR2dCA9IHN0X29wc19kZXNjLVx1MDAzZXZhbHVlX3R5cGU7XG4xMTI3Olx0XHRpZiAoYXR0ci1cdTAwM2V2YWx1ZV9zaXplICE9IHZ0LVx1MDAzZXNpemUpIHtcbjExMjg6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjExMjk6XHRcdFx0Z290byBlcnJvdXQ7XG4xMTMwOlx0XHR9XG4xMTMxOlx0XG4xMTMyOlx0XHR0ID0gc3Rfb3BzX2Rlc2MtXHUwMDNldHlwZTtcbjExMzM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNjUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jYC4gSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbiwgc28gbGV0JiMzOTtzIHN0YXJ0IHJlYWRpbmcuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGFuYWx5emUgd2hhdCBpdCBkb2VzLCBiZWNhdXNlIEkga25vdyB0aGF0IG1hcHMgYXJlIGZ1bmRhbWVudGFsIHRvIGVCUEYmIzM5O3MgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRob3NlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZWRnZSBjYXNlcyBpdCBtaWdodCBoYW5kbGUsIGFueSBlcnJvciBjaGVja2luZyB0aGF0JiMzOTtzIGltcGxlbWVudGVkLCBhbmQgb2YgY291cnNlLCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBicm9hZGVyIGtlcm5lbCBlQlBGIGluZnJhc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgZm9yIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzNDpcdFx0c3RfbWFwX3NpemUgPSBzaXplb2YoKnN0X21hcCkgJiM0MztcbjExMzU6XHRcdFx0Lyoga3ZhbHVlIHN0b3JlcyB0aGVcbjExMzY6XHRcdFx0ICogc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3RjcF9jb25nZXN0aW9uc19vcHNcbjExMzc6XHRcdFx0ICovXG4xMTM4Olx0XHRcdCh2dC1cdTAwM2VzaXplIC0gc2l6ZW9mKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSkpO1xuMTEzOTpcdFxuMTE0MDpcdFx0c3RfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcF9zaXplLCBOVU1BX05PX05PREUpO1xuMTE0MTpcdFx0aWYgKCFzdF9tYXApIHtcbjExNDI6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjExNDM6XHRcdFx0Z290byBlcnJvdXQ7XG4xMTQ0Olx0XHR9XG4xMTQ1Olx0XG4xMTQ2Olx0XHRzdF9tYXAtXHUwMDNlc3Rfb3BzX2Rlc2MgPSBzdF9vcHNfZGVzYztcbjExNDc6XHRcdG1hcCA9IFx1MDAyNnN0X21hcC1cdTAwM2VtYXA7XG4xMTQ4Olx0XG4xMTQ5Olx0XHRzdF9tYXAtXHUwMDNldXZhbHVlID0gYnBmX21hcF9hcmVhX2FsbG9jKHZ0LVx1MDAzZXNpemUsIE5VTUFfTk9fTk9ERSk7XG4xMTUwOlx0XHRzdF9tYXAtXHUwMDNlZnVuY3NfY250ID0gY291bnRfZnVuY19wdHJzKGJ0ZiwgdCk7XG4xMTUxOlx0XHRzdF9tYXAtXHUwMDNlbGlua3MgPVxuMTE1MjpcdFx0XHRicGZfbWFwX2FyZWFfYWxsb2Moc3RfbWFwLVx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2xpbmsgKiksXG4xMTUzOlx0XHRcdFx0XHQgICBOVU1BX05PX05PREUpO1xuMTE1NDpcdFxuMTE1NTpcdFx0c3RfbWFwLVx1MDAzZWtzeW1zID1cbjExNTY6XHRcdFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cdTAwM2VmdW5jc19jbnQgKiBzaXplb2Yoc3RydWN0IGJwZl9rc3ltICopLFxuMTE1NzpcdFx0XHRcdFx0ICAgTlVNQV9OT19OT0RFKTtcbjExNTg6XHRcdGlmICghc3RfbWFwLVx1MDAzZXV2YWx1ZSB8fCAhc3RfbWFwLVx1MDAzZWxpbmtzIHx8ICFzdF9tYXAtXHUwMDNla3N5bXMpIHtcbjExNTk6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjExNjA6XHRcdFx0Z290byBlcnJvdXRfZnJlZTtcbjExNjE6XHRcdH1cbjExNjI6XHRcdHN0X21hcC1cdTAwM2VidGYgPSBidGY7XG4xMTYzOlx0XG4xMTY0Olx0XHRtdXRleF9pbml0KFx1MDAyNnN0X21hcC1cdTAwM2Vsb2NrKTtcbjExNjU6XHRcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIobWFwLCBhdHRyKTtcbjExNjY6XHRcbjExNjc6XHRcdHJldHVybiBtYXA7XG4xMTY4Olx0XG4xMTY5Olx0ZXJyb3V0X2ZyZWU6XG4xMTcwOlx0XHRfX2JwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlKG1hcCk7XG4xMTcxOlx0ZXJyb3V0OlxuMTE3MjpcdFx0bW9kdWxlX3B1dChtb2QpO1xuMTE3MzpcdFxuMTE3NDpcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbjExNzU6XHR9XG4xMTc2Olx0XG4xMTc3Olx0c3RhdGljIHU2NCBicGZfc3RydWN0X29wc19tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4xMTc4Olx0e1xuMTE3OTpcdFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XG4xMTgwOlx0XHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MgPSBzdF9tYXAtXHUwMDNlc3Rfb3BzX2Rlc2M7XG4xMTgxOlx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZ0ID0gc3Rfb3BzX2Rlc2MtXHUwMDNldmFsdWVfdHlwZTtcbjExODI6XHRcdHU2NCB1c2FnZTtcbjExODM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxODcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTWVtb3J5IEFsbG9jYXRpb24gYW5kIFplcm9pbmc6IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gYGJwZl9tYXBfYXJlYV9hbGxvY2AgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSB1c2luZyB0byBhbGxvY2F0ZSBtZW1vcnkgaGVyZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzOiBkb2VzIHRoaXMgdGhpbmcgemVybyB0aGUgbWVtb3J5IGl0IGFsbG9jYXRlcz8gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgZGF0YSBhbmQgc3VidGxlIGJ1Z3MgYXJlIGEgcmVhbCBwYWluLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGF0IG1lbW9yeSBibG9jay4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBsb29rIGZvciBzb21lIHNvbGlkIGRvY3VtZW50YXRpb24gdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEJlc3QgY2FzZSBzY2VuYXJpbywgaXQmIzM5O3MgZXhwbGljaXRseSB6ZXJvZWQgZm9yIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkuIFdvcnN0IGNhc2UsIHdlIG5lZWQgdG8gZXhwbGljaXRseSBpbml0aWFsaXplIGl0IG91cnNlbHZlcyB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGxlYWthZ2Ugb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYmVmb3JlIHdlIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9hcmVhX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9Mjc2Nj12b2lkIGJwZl9tYXBfcHV0KHN0cnVjdCBicGZfbWFwICptYXApO1xuaW5jbHVkZS9saW51eC9icGYuaDoyNzY3OnZvaWQgKmJwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3Njgtdm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yOTktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAwOlx0YXJlbmEgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCphcmVuYSksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAxLVx0aWYgKCFhcmVuYSlcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcnJheV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0MS1cdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQyOlx0XHRhcnJheSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhhcnJheV9zaXplLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0My1cdH1cbi0tXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jPTk5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYmxvb21fbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYmxvb21fZmlsdGVyLmMtMTQ0LVx0Yml0c2V0X2J5dGVzID0gQklUU19UT19MT05HUygodTY0KWJpdHNldF9tYXNrICYjNDM7IDEpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoxNDU6XHRibG9vbSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmJsb29tKSAmIzQzOyBiaXRzZXRfYnl0ZXMsIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jLTE0Ni1cbi0tXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM9NDQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICppbnNuX2FycmF5X2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy00OC1cbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzo0OTpcdGluc25fYXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYy01MC1cdGlmICghaW5zbl9hcnJheSlcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NzczPWJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzgwLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjc4MTpcdHNtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpzbWFwKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03ODItXHRpZiAoIXNtYXApXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwODQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzktXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE0MDpcdHN0X21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXBfc2l6ZSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTQxLVx0aWYgKCFzdF9tYXApIHtcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE0OC1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTQ5Olx0c3RfbWFwLVx1MDAzZXV2YWx1ZSA9IGJwZl9tYXBfYXJlYV9hbGxvYyh2dC1cdTAwM2VzaXplLCBOVU1BX05PX05PREUpO1xua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTAtXHRzdF9tYXAtXHUwMDNlZnVuY3NfY250ID0gY291bnRfZnVuY19wdHJzKGJ0ZiwgdCk7XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1MS1cdHN0X21hcC1cdTAwM2VsaW5rcyA9XG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE1MjpcdFx0YnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcC1cdTAwM2VmdW5jc19jbnQgKiBzaXplb2Yoc3RydWN0IGJwZl9saW5rICopLFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTMtXHRcdFx0XHQgICBOVU1BX05PX05PREUpO1xuLS1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTU1LVx0c3RfbWFwLVx1MDAzZWtzeW1zID1cbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTU2Olx0XHRicGZfbWFwX2FyZWFfYWxsb2Moc3RfbWFwLVx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2tzeW0gKiksXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1Ny1cdFx0XHRcdCAgIE5VTUFfTk9fTk9ERSk7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYz04NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNwdV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDAtXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwMTpcdGNtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpjbWFwKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTAyLVx0aWYgKCFjbWFwKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtMTA3LVx0LyogQWxsb2MgYXJyYXkgZm9yIHBvc3NpYmxlIHJlbW90ZSBcJiMzNDtkZXN0aW5hdGlvblwmIzM0OyBDUFVzICovXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwODpcdGNtYXAtXHUwMDNlY3B1X21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhjbWFwLVx1MDAzZW1hcC5tYXhfZW50cmllcyAqXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTEwOS1cdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBicGZfY3B1X21hcF9lbnRyeSAqKSxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTkxPXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqZGV2X21hcF9jcmVhdGVfaGFzaCh1bnNpZ25lZCBpbnQgZW50cmllcyxcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTk2LVxua2VybmVsL2JwZi9kZXZtYXAuYzo5NzpcdGhhc2ggPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgZW50cmllcyAqIHNpemVvZigqaGFzaCksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2Rldm1hcC5jLTk4LVx0aWYgKGhhc2ggIT0gTlVMTClcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTEzNj1zdGF0aWMgaW50IGRldl9tYXBfaW5pdF9tYXAoc3RydWN0IGJwZl9kdGFiICpkdGFiLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE1My1cdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2Rldm1hcC5jOjE1NDpcdFx0ZHRhYi1cdTAwM2VuZXRkZXZfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIGR0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcbmtlcm5lbC9icGYvZGV2bWFwLmMtMTU1LVx0XHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgYnBmX2R0YWJfbmV0ZGV2ICopLFxuLS1cbmtlcm5lbC9icGYvZGV2bWFwLmM9MTY0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqZGV2X21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE2OC1cbmtlcm5lbC9icGYvZGV2bWFwLmM6MTY5Olx0ZHRhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmR0YWIpLCBOVU1BX05PX05PREUpO1xua2VybmVsL2JwZi9kZXZtYXAuYy0xNzAtXHRpZiAoIWR0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE5PXN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI2LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzI3Olx0aHRhYi1cdTAwM2VlbGVtcyA9IGJwZl9tYXBfYXJlYV9hbGxvYygodTY0KWh0YWItXHUwMDNlZWxlbV9zaXplICogbnVtX2VudHJpZXMsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjgtXHRcdFx0XHRcdCBodGFiLVx1MDAzZW1hcC5udW1hX25vZGUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTU0NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTU1OC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjU1OTpcdGh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpodGFiKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTU2MC1cdGlmICghaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDEtXHRlcnIgPSAtRU5PTUVNO1xua2VybmVsL2JwZi9oYXNodGFiLmM6NjAyOlx0aHRhYi1cdTAwM2VidWNrZXRzID0gYnBmX21hcF9hcmVhX2FsbG9jKGh0YWItXHUwMDNlbl9idWNrZXRzICpcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTYwMy1cdFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBidWNrZXQpLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3OTQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5OS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4MDA6XHRyaHRhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnJodGFiKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MDEtXHRpZiAoIXJodGFiKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jPTI5Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNncm91cF9zdG9yYWdlX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjYtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozMjc6XHRtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwKSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMyOC1cdGlmICghbWFwKVxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYz01NzE9c3RhdGljIHN0cnVjdCBicGZfbWFwICp0cmllX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy01ODctXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NTg4Olx0dHJpZSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnRyaWUpLCBOVU1BX05PX05PREUpO1xua2VybmVsL2JwZi9scG1fdHJpZS5jLTU4OS1cdGlmICghdHJpZSlcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz01MDM9c3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfb2ZmbG9hZF9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtNTE1LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6NTE2Olx0b2ZmbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqb2ZmbWFwKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTUxNy1cdGlmICghb2ZmbWFwKVxuLS1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jPTY1PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcXVldWVfc3RhY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTczLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM6NzQ6XHRxcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhxdWV1ZV9zaXplLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtNzUtXHRpZiAoIXFzKVxuLS1cbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmM9MTQ5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmV1c2Vwb3J0X2FycmF5X2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmMtMTU0LVx0LyogYWxsb2NhdGUgYWxsIG1hcCBlbGVtZW50cyBhbmQgemVyby1pbml0aWFsaXplIHRoZW0gKi9cbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmM6MTU1Olx0YXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2Moc3RydWN0X3NpemUoYXJyYXksIHB0cnMsIGF0dHItXHUwMDNlbWF4X2VudHJpZXMpLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9yZXVzZXBvcnRfYXJyYXkuYy0xNTYtXHRpZiAoIWFycmF5KVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTkzPXN0YXRpYyBzdHJ1Y3QgYnBmX3JpbmdidWYgKmJwZl9yaW5nYnVmX2FyZWFfYWxsb2Moc2l6ZV90IGRhdGFfc3osIGludCBudW1hX25vZGUpXG4tLVxua2VybmVsL2JwZi9yaW5nYnVmLmMtMTIyLVx0YXJyYXlfc2l6ZSA9IChucl9tZXRhX3BhZ2VzICYjNDM7IDIgKiBucl9kYXRhX3BhZ2VzKSAqIHNpemVvZigqcGFnZXMpO1xua2VybmVsL2JwZi9yaW5nYnVmLmM6MTIzOlx0cGFnZXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoYXJyYXlfc2l6ZSwgbnVtYV9ub2RlKTtcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTEyNC1cdGlmICghcGFnZXMpXG4tLVxua2VybmVsL2JwZi9yaW5nYnVmLmM9MTk0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqcmluZ2J1Zl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9yaW5nYnVmLmMtMjEyLVxua2VybmVsL2JwZi9yaW5nYnVmLmM6MjEzOlx0cmJfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqcmJfbWFwKSwgTlVNQV9OT19OT0RFKTtcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTIxNC1cdGlmICghcmJfbWFwKVxuLS1cbmtlcm5lbC9icGYvc3RhY2ttYXAuYz02OD1zdGF0aWMgaW50IHByZWFsbG9jX2VsZW1zX2FuZF9mcmVlbGlzdChzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcClcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtNzMtXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NzQ6XHRzbWFwLVx1MDAzZWVsZW1zID0gYnBmX21hcF9hcmVhX2FsbG9jKGVsZW1fc2l6ZSAqIHNtYXAtXHUwMDNlbWFwLm1heF9lbnRyaWVzLFxua2VybmVsL2JwZi9zdGFja21hcC5jLTc1LVx0XHRcdFx0XHQgc21hcC1cdTAwM2VtYXAubnVtYV9ub2RlKTtcbi0tXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9OTM9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zdGFja21hcC5jLTEyNS1cdGNvc3QgPSBuX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKikgJiM0Mzsgc2l6ZW9mKCpzbWFwKTtcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoxMjY6XHRzbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKGNvc3QsIGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cikpO1xua2VybmVsL2JwZi9zdGFja21hcC5jLTEyNy1cdGlmICghc21hcClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zMDg9c3RhdGljIGludCBicGZfbWFwX2NvcHlfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzEtICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzI6c3RhdGljIHZvaWQgKl9fYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlLCBib29sIG1tYXBhYmxlKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzczLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MDgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MDk6dm9pZCAqYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDEwLXtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQxMTpcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxMi19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDE0PXZvaWQgKmJwZl9tYXBfYXJlYV9tbWFwYWJsZV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxNS17XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MTY6XHRyZXR1cm4gX19icGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlLCB0cnVlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxNy19XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDktXG5uZXQvY29yZS9zb2NrX21hcC5jOjUwOlx0c3RhYiA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKnN0YWIpLCBOVU1BX05PX05PREUpO1xubmV0L2NvcmUvc29ja19tYXAuYy01MS1cdGlmICghc3RhYilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTU2LVxubmV0L2NvcmUvc29ja19tYXAuYzo1NzpcdHN0YWItXHUwMDNlc2tzID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIHN0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTgtXHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrICopLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTA5OD1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfaGFzaF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjExMTI6XHRodGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqaHRhYiksIE5VTUFfTk9fTk9ERSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTMtXHRpZiAoIWh0YWIpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMTI2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMTI3Olx0aHRhYi1cdTAwM2VidWNrZXRzID0gYnBmX21hcF9hcmVhX2FsbG9jKGh0YWItXHUwMDNlYnVja2V0c19udW0gKlxubmV0L2NvcmUvc29ja19tYXAuYy0xMTI4LVx0XHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IGJwZl9zaHRhYl9idWNrZXQpLFxuLS1cbm5ldC94ZHAveHNrbWFwLmM9NjQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICp4c2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbm5ldC94ZHAveHNrbWFwLmMtNzctXG5uZXQveGRwL3hza21hcC5jOjc4Olx0bSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUpO1xubmV0L3hkcC94c2ttYXAuYy03OS1cdGlmICghbSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgX19icGZfbWFwX2FyZWFfYWxsb2NgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgX19icGZfbWFwX2FyZWFfYWxsb2NgLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBCUEYgbWFwIG1hbmFnZW1lbnQsIGxpa2VseSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiBvZiBtZW1vcnkgcmVnaW9ucyB1c2VkIHRvIHN0b3JlIG1hcCBkYXRhLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgdGhpcyB1c2luZyBhIHNwZWNpZmljIHNsYWIgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBiYXNpYyBsaWtlIGBrbWFsbG9jYD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGJlaW5nIGVuZm9yY2VkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZXk/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGFyZ3VtZW50cyBiZWluZyBwYXNzZWQg4oCTIHNpemUsIGZsYWdzLCBwb3NzaWJseSBOVU1BIG5vZGUgaW5mb3JtYXRpb24uIFRoZSBmbGFncyBhcmUgZ29pbmcgdG8gYmUga2V5LCBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgbGlrZSBgR0ZQX0tFUk5FTGAgYW5kIHBvdGVudGlhbGx5IG90aGVycyByZWxhdGVkIHRvIG1lbW9yeSB0eXBlcyBvciBsb2NraW5nLiBJ4oCZbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycyBhbmQgY2FsbGVlcy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgQlBGIG1hcCBpbmZyYXN0cnVjdHVyZSwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IGJsZWVkIG92ZXIgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCBpZiB0aGVyZSBhcmUgbG9ja3MgaW52b2x2ZWQuIEFyZSB0aGVyZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBCUEYgbWFwIG9wZXJhdGlvbnMgYXJlIGRldGVybWluZWQsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBlc3NlbnRpYWwgZm9yIG9wdGltaXppbmcgdGhpbmdzIGRvd24gdGhlIHJvYWQuIEFscmlnaHQsIHRpbWUgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcyOlx0c3RhdGljIHZvaWQgKl9fYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlLCBib29sIG1tYXBhYmxlKVxuIDM3MzpcdHtcbiAzNzQ6XHRcdC8qIFdlIHJlYWxseSBqdXN0IHdhbnQgdG8gZmFpbCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgT09NIGtpbGxlclxuIDM3NTpcdFx0ICogdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB0aGVyZWZvcmUgd2Ugc2V0IF9fR0ZQX05PUkVUUlkgdG8ga21hbGxvYyxcbiAzNzY6XHRcdCAqIHdoaWNoIGlzIHVzZWQgZm9yIGxvd2VyIG9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMuXG4gMzc3Olx0XHQgKlxuIDM3ODpcdFx0ICogSXQgaGFzIGJlZW4gb2JzZXJ2ZWQgdGhhdCBoaWdoZXIgb3JkZXIgYWxsb2NhdGlvbiByZXF1ZXN0cyBkb25lIGJ5XG4gMzc5Olx0XHQgKiB2bWFsbG9jIHdpdGggX19HRlBfTk9SRVRSWSBiZWluZyBzZXQgbWlnaHQgZmFpbCBkdWUgdG8gbm90IHRyeWluZ1xuIDM4MDpcdFx0ICogdG8gcmVjbGFpbSBtZW1vcnkgZnJvbSB0aGUgcGFnZSBjYWNoZSwgdGh1cyB3ZSBzZXRcbiAzODE6XHRcdCAqIF9fR0ZQX1JFVFJZX01BWUZBSUwgdG8gYXZvaWQgc3VjaCBzaXR1YXRpb25zLlxuIDM4MjpcdFx0ICovXG4gMzgzOlx0XG4gMzg0Olx0XHRnZnBfdCBnZnAgPSBicGZfbWVtY2dfZmxhZ3MoX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XG4gMzg1Olx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xuIDM4NjpcdFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7XG4gMzg3Olx0XHR2b2lkICphcmVhO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKHNpemUgXHUwMDNlPSBTSVpFX01BWClcbiAzOTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzkxOlx0XG4gMzkyOlx0XHQvKiBrbWFsbG9jKCkmIzM5O2VkIG1lbW9yeSBjYW4mIzM5O3QgYmUgbW1hcCgpJiMzOTtlZCAqL1xuIDM5MzpcdFx0aWYgKG1tYXBhYmxlKSB7XG4gMzk0Olx0XHRcdEJVR19PTighUEFHRV9BTElHTkVEKHNpemUpKTtcbiAzOTU6XHRcdFx0YWxpZ24gPSBTSE1MQkE7XG4gMzk2Olx0XHRcdGZsYWdzID0gVk1fVVNFUk1BUDtcbiAzOTc6XHRcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2M9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSkge1xuIDM5ODpcdFx0XHRhcmVhID0ga21hbGxvY19ub2RlKHNpemUsIGdmcCB8IEdGUF9VU0VSIHwgX19HRlBfTk9SRVRSWSxcbiAzOTk6XHRcdFx0XHRcdCAgICBudW1hX25vZGUpO1xuIDQwMDpcdFx0XHRpZiAoYXJlYSAhPSBOVUxMKVxuIDQwMTpcdFx0XHRcdHJldHVybiBhcmVhO1xuIDQwMjpcdFx0fVxuIDQwMzpcdFxuIDQwNDpcdFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlKHNpemUsIGFsaWduLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbiA0MDU6XHRcdFx0XHRnZnAgfCBHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCwgUEFHRV9LRVJORUwsXG4gNDA2Olx0XHRcdFx0ZmxhZ3MsIG51bWFfbm9kZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiA0MDc6XHR9XG4gNDA4Olx0XG4gNDA5Olx0dm9pZCAqYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxuIDQxMDpcdHtcbiA0MTE6XHRcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcbiA0MTI6XHR9XG4gNDEzOlx0XG4gNDE0Olx0dm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxuIDQxNTpcdHtcbiA0MTY6XHRcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIHRydWUpO1xuIDQxNzpcdH1cbiA0MTg6XHRcbiA0MTk6XHR2b2lkIGJwZl9tYXBfYXJlYV9mcmVlKHZvaWQgKmFyZWEpXG4gNDIwOlx0e1xuIDQyMTpcdFx0a3ZmcmVlKGFyZWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg1NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25jZXJucyBSZWdhcmRpbmcgQlBGIE1hcCBVcGRhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYF9fYnBmX21hcF9hcmVhX2FsbG9jYCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgdXNpbmcgYF9fR0ZQX1pFUk9gLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgbWFwIGlzIHplcm9lZCBvdXQgaW5pdGlhbGx5LiBTbywgYHN0X21hcC0mZ3Q7dXZhbHVlYCBhbmQgYHN0X21hcC0mZ3Q7a3ZhbHVlYCBhcmUgZGVmaW5pdGVseSBzdGFydGluZyBhdCB6ZXJvLiBCdXQsIGhlcmUmIzM5O3Mgd2hlcmUgbXkgYWxhcm0gYmVsbHMgYXJlIHN0YXJ0aW5nIHRvIHJpbmcuCgpgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCBjb3BpZXMgdXNlciBkYXRhIGludG8gYHV2YWx1ZWAgdXNpbmcgYG1lbWNweWAuIFRoZSBrZXkgaXMgdGhhdCBgdmFsdWVgIGluIGBtZW1jcHkodXZhbHVlLCB2YWx1ZSwgbWFwLSZndDt2YWx1ZV9zaXplKWAgaXMgKmNvbWluZyBmcm9tIHVzZXIgc3BhY2UqLiBJcyB0aGF0IGRhdGEgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIHRpbWUgaXQgZ2V0cyBjb3BpZWQgaW50byB0aGUga2VybmVsPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLgoKTGV0JiMzOTtzIHRyYWNlIGJhY2suIEkgc2VlIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSB0aGUgYG1hcF91cGRhdGVfZWxlbWAgc3lzY2FsbC4gVGhlIHN5c2NhbGwgaXMgY29weWluZyBgdmFsdWVfc2l6ZWAgYnl0ZXMgZnJvbSB1c2VyIHNwYWNlLiBPa2F5LCBzbyBpZiB1c2VyIHNwYWNlIHBhc3NlcyBzb21ldGhpbmcgd2l0aCB1bmluaXRpYWxpemVkIGJ5dGVzIOKAkyBtYXliZSBwYWRkaW5nLCBvciBzb21lIHVuaW5pdGlhbGl6ZWQgc3RydWN0IG1lbWJlcnMg4oCTIHRob3NlIGJ5dGVzIGNvdWxkIHBvdGVudGlhbGx5IGdldCBjb3BpZWQgc3RyYWlnaHQgaW50byBgdXZhbHVlYC4gQW5kIHRoZW4sIGBrdmFsdWVgIGlzIHN1YnNlcXVlbnRseSBpbml0aWFsaXplZCBmcm9tIGB1dmFsdWVgPwoKSSYjMzk7bSBzdGFydGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgLSBga2RhdGFgIGlzIGluaXRpYWxpemVkIGZyb20gYHVkYXRhYC4gTGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzY6XHRcbiA3Nzc6XHRcdG1lbWNweSh1dmFsdWUsIHZhbHVlLCBtYXAtXHUwMDNldmFsdWVfc2l6ZSk7XG4gNzc4Olx0XG4gNzc5Olx0XHR1ZGF0YSA9IFx1MDAyNnV2YWx1ZS1cdTAwM2VkYXRhO1xuIDc4MDpcdFx0a2RhdGEgPSBcdTAwMjZrdmFsdWUtXHUwMDNlZGF0YTtcbiA3ODE6XHRcbiA3ODI6XHRcdHBsaW5rID0gc3RfbWFwLVx1MDAzZWxpbmtzO1xuIDc4MzpcdFx0cGtzeW0gPSBzdF9tYXAtXHUwMDNla3N5bXM7XG4gNzg0Olx0XHR0bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChzdF9tYXAtXHUwMDNlYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKTtcbiA3ODU6XHRcdG1vZHVsZV90eXBlID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHN0X29wc19pZHNbSURYX01PRFVMRV9JRF0pO1xuIDc4NjpcdFx0Zm9yX2VhY2hfbWVtYmVyKGksIHQsIG1lbWJlcikge1xuIDc4NzpcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm10eXBlLCAqcHR5cGU7XG4gNzg4Olx0XHRcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiA3ODk6XHRcdFx0c3RydWN0IGJwZl90cmFtcF9saW5rICpsaW5rO1xuIDc5MDpcdFx0XHRzdHJ1Y3QgYnBmX2tzeW0gKmtzeW07XG4gNzkxOlx0XHRcdHUzMiBtb2ZmO1xuIDc5MjpcdFxuIDc5MzpcdFx0XHRtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XG4gNzk0Olx0XHRcdG1uYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KHN0X21hcC1cdTAwM2VidGYsIG1lbWJlci1cdTAwM2VuYW1lX29mZik7XG4gNzk1Olx0XHRcdHB0eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoc3RfbWFwLVx1MDAzZWJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUsIE5VTEwpO1xuIDc5NjpcdFx0XHRpZiAocHR5cGUgPT0gbW9kdWxlX3R5cGUpIHtcbiA3OTc6XHRcdFx0XHRpZiAoKih2b2lkICoqKSh1ZGF0YSAmIzQzOyBtb2ZmKSlcbiA3OTg6XHRcdFx0XHRcdGdvdG8gcmVzZXRfdW5sb2NrO1xuIDc5OTpcdFx0XHRcdCoodm9pZCAqKikoa2RhdGEgJiM0MzsgbW9mZikgPSBCUEZfTU9EVUxFX09XTkVSO1xuIDgwMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDgwMTpcdFx0XHR9XG4gODAyOlx0XG4gODAzOlx0XHRcdGVyciA9IHN0X29wcy1cdTAwM2Vpbml0X21lbWJlcih0LCBtZW1iZXIsIGtkYXRhLCB1ZGF0YSk7XG4gODA0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gODA1Olx0XHRcdFx0Z290byByZXNldF91bmxvY2s7XG4gODA2Olx0XG4gODA3Olx0XHRcdC8qIFRoZSAtXHUwMDNlaW5pdF9tZW1iZXIoKSBoYXMgaGFuZGxlZCB0aGlzIG1lbWJlciAqL1xuIDgwODpcdFx0XHRpZiAoZXJyIFx1MDAzZSAwKVxuIDgwOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDgxMDpcdFxuIDgxMTpcdFx0XHQvKiBJZiBzdF9vcHMtXHUwMDNlaW5pdF9tZW1iZXIgZG9lcyBub3QgaGFuZGxlIGl0LFxuIDgxMjpcdFx0XHQgKiB3ZSB3aWxsIG9ubHkgaGFuZGxlIGZ1bmMgcHRycyBhbmQgemVyby1lZCBtZW1iZXJzXG4gODEzOlx0XHRcdCAqIGhlcmUuICBSZWplY3QgZXZlcnl0aGluZyBlbHNlLlxuIDgxNDpcdFx0XHQgKi9cbiA4MTU6XHRcbiA4MTY6XHRcdFx0LyogQWxsIG5vbiBmdW5jIHB0ciBtZW1iZXIgbXVzdCBiZSAwICovXG4gODE3Olx0XHRcdGlmICghcHR5cGUgfHwgIWJ0Zl90eXBlX2lzX2Z1bmNfcHJvdG8ocHR5cGUpKSB7XG4gODE4Olx0XHRcdFx0dTMyIG1zaXplO1xuIDgxOTpcdFxuIDgyMDpcdFx0XHRcdG10eXBlID0gYnRmX3R5cGVfYnlfaWQoc3RfbWFwLVx1MDAzZWJ0ZiwgbWVtYmVyLVx1MDAzZXR5cGUpO1xuIDgyMTpcdFx0XHRcdG10eXBlID0gYnRmX3Jlc29sdmVfc2l6ZShzdF9tYXAtXHUwMDNlYnRmLCBtdHlwZSwgXHUwMDI2bXNpemUpO1xuIDgyMjpcdFx0XHRcdGlmIChJU19FUlIobXR5cGUpKSB7XG4gODIzOlx0XHRcdFx0XHRlcnIgPSBQVFJfRVJSKG10eXBlKTtcbiA4MjQ6XHRcdFx0XHRcdGdvdG8gcmVzZXRfdW5sb2NrO1xuIDgyNTpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMTUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBjbGlja2VkOiBga2RhdGFgIGlzIGdldHRpbmcgYXV0b21hdGljYWxseSB6ZXJvZWQuIFRoYXQmIzM5O3MgYmVjYXVzZSBga3ZhbHVlYCDigJMgdGhlIGFjdHVhbCBkYXRhIHN0cnVjdHVyZSBpbiB0aGlzIGNvbnRleHQg4oCTIGxpdmVzIGluc2lkZSBgc3RfbWFwYCwgd2hpY2ggd2FzIGFsbG9jYXRlZCB1c2luZyBgYnBmX21hcF9hcmVhX2FsbG9jYC4gQW5kIHJlbWVtYmVyLCBgYnBmX21hcF9hcmVhX2FsbG9jYCAqZ3VhcmFudGVlcyogemVyby1pbml0aWFsaXphdGlvbi4gR290IGl0LgoKU28sIHRoZSBjb2RlIHRoZW4gdXNlcyBgZm9yX2VhY2hfbWVtYmVyYCB0byBjYXJlZnVsbHkgc3RlcCB0aHJvdWdoIGVhY2ggbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUuIFByZXR0eSBzdGFuZGFyZC4gRm9yIGVhY2ggbWVtYmVyIGVuY291bnRlcmVkLCBpdCBjYWxscyBgc3Rfb3BzLSZndDtpbml0X21lbWJlcmAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgc3BlY2lmaWMuCgpJbiB0aGUgY2FzZSBvZiBgbmFtZWAsIGEgcGFydGljdWxhciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyB1c2VkLiBIb3dldmVyLCBpdCYjMzk7cyBjbGVhciB0aGF0IHdoZW4gdGhlIG1lbWJlciBpcyBgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgdGhlIGNvcnJlc3BvbmRpbmcgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgYGJwZl90Y3BfY2FfaW5pdF9tZW1iZXJgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gYW5hbHl6ZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBhbnkgbWVtYmVyIHNwZWNpZmljIHRvIHRoZSBjb25nZXN0aW9uIGFsZ29yaXRobS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9icGZfdGNwX2NhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdHN0YXRpYyBpbnQgYnBmX3RjcF9jYV9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gMjExOlx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4gMjEyOlx0XHRcdFx0XHQgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcbiAyMTM6XHR7XG4gMjE0Olx0XHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp1dGNwX2NhO1xuIDIxNTpcdFx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhO1xuIDIxNjpcdFx0dTMyIG1vZmY7XG4gMjE3Olx0XG4gMjE4Olx0XHR1dGNwX2NhID0gKGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKil1ZGF0YTtcbiAyMTk6XHRcdHRjcF9jYSA9IChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICopa2RhdGE7XG4gMjIwOlx0XG4gMjIxOlx0XHRtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XG4gMjIyOlx0XHRzd2l0Y2ggKG1vZmYpIHtcbiAyMjM6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgZmxhZ3MpOlxuIDIyNDpcdFx0XHRpZiAodXRjcF9jYS1cdTAwM2VmbGFncyBcdTAwMjYgflRDUF9DT05HX01BU0spXG4gMjI1Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjI2Olx0XHRcdHRjcF9jYS1cdTAwM2VmbGFncyA9IHV0Y3BfY2EtXHUwMDNlZmxhZ3M7XG4gMjI3Olx0XHRcdHJldHVybiAxO1xuIDIyODpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCBuYW1lKTpcbiAyMjk6XHRcdFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVx1MDAzZW5hbWUsIHV0Y3BfY2EtXHUwMDNlbmFtZSxcbiAyMzA6XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHRjcF9jYS1cdTAwM2VuYW1lKSkgXHUwMDNjPSAwKVxuIDIzMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIzMjpcdFx0XHRyZXR1cm4gMTtcbiAyMzM6XHRcdH1cbiAyMzQ6XHRcbiAyMzU6XHRcdHJldHVybiAwO1xuIDIzNjpcdH1cbiAyMzc6XHRcbiAyMzg6XHRzdGF0aWMgaW50IGJwZl90Y3BfY2FfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gMjM5Olx0e1xuIDI0MDpcdFx0cmV0dXJuIHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xuIDI0MTpcdH1cbiAyNDI6XHRcbiAyNDM6XHRzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gMjQ0Olx0e1xuIDI0NTpcdFx0dGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKGtkYXRhKTtcbiAyNDY6XHR9XG4gMjQ3Olx0XG4gMjQ4Olx0c3RhdGljIGludCBicGZfdGNwX2NhX3VwZGF0ZSh2b2lkICprZGF0YSwgdm9pZCAqb2xkX2tkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gMjQ5Olx0e1xuIDI1MDpcdFx0cmV0dXJuIHRjcF91cGRhdGVfY29uZ2VzdGlvbl9jb250cm9sKGtkYXRhLCBvbGRfa2RhdGEpO1xuIDI1MTpcdH1cbiAyNTI6XHRcbiAyNTM6XHRzdGF0aWMgaW50IGJwZl90Y3BfY2FfdmFsaWRhdGUodm9pZCAqa2RhdGEpXG4gMjU0Olx0e1xuIDI1NTpcdFx0cmV0dXJuIHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xuIDI1NjpcdH1cbiAyNTc6XHRcbiAyNTg6XHRzdGF0aWMgdTMyIGJwZl90Y3BfY2Ffc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKVxuIDI1OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NjQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBPYmplY3QgTmFtaW5nIGluIEJQRioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBvYmplY3QgbmFtaW5nLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBgYnBmX29ial9uYW1lX2NweWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHdoYXQgdGhpcyBjb3B5IGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBvYmplY3QgbmFtZXMgYXJlIGhhbmRsZWQgdW5kZXIgdGhlIGhvb2QuIFdoYXQmIzM5O3MgdGhlIGltcGxlbWVudGF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cz8gSSBuZWVkIHRvIGFuYWx5emUgYGJwZl9vYmpfbmFtZV9jcHlgIGRpcmVjdGx5IHRvIGZ1bGx5IGdyYXNwIGl0cyBiZWhhdmlvciwgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbmQgYW55IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBzb3VyY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX29ial9uYW1lX2NweSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzY19icGYuYz0zNDQ9c3RhdGljIGludCBibV9icGZfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTM1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJpbmZtdF9taXNjX29wcywgbmFtZSk6XG5mcy9iaW5mbXRfbWlzY19icGYuYzozNTQ6XHRcdGlmIChicGZfb2JqX25hbWVfY3B5KG9wcy1cdTAwM2VuYW1lLCB1b3BzLVx1MDAzZW5hbWUsXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zNTUtXHRcdFx0XHQgICAgIHNpemVvZihvcHMtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTY1NT1zdHJ1Y3QgYnBmX21hcCAqYnBmX3Byb2dfYXJlbmEoc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6NjU2OmludCBicGZfb2JqX25hbWVfY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY1Ny1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjAzPWludCBicGZfZ2V0X2ZpbGVfZmxhZyhpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIyNC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEyMjU6aW50IGJwZl9vYmpfbmFtZV9jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGludCBzaXplKVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIyNi17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI0NC19XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjQ1OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9vYmpfbmFtZV9jcHkpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTI0Ni1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTU0MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1NDI6XHRlcnIgPSBicGZfb2JqX25hbWVfY3B5KG1hcC1cdTAwM2VuYW1lLCBhdHRyLVx1MDAzZW1hcF9uYW1lLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTU0My1cdFx0XHQgICAgICAgc2l6ZW9mKGF0dHItXHUwMDNlbWFwX25hbWUpKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yOTE3PXN0YXRpYyBpbnQgYnBmX3Byb2dfbG9hZCh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMjYtXHRwcm9nLVx1MDAzZWF1eC1cdTAwM2Vsb2FkX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxMjc6XHRlcnIgPSBicGZfb2JqX25hbWVfY3B5KHByb2ctXHUwMDNlYXV4LVx1MDAzZW5hbWUsIGF0dHItXHUwMDNlcHJvZ19uYW1lLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyOC1cdFx0XHQgICAgICAgc2l6ZW9mKGF0dHItXHUwMDNlcHJvZ19uYW1lKSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz03OTM5PXN0YXRpYyBpbnQgYnBmX3NjeF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy03OTU5LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgbmFtZSk6XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjc5NjA6XHRcdHJldCA9IGJwZl9vYmpfbmFtZV9jcHkob3BzLVx1MDAzZW5hbWUsIHVvcHMtXHUwMDNlbmFtZSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzk2MS1cdFx0XHRcdCAgICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKTtcbi0tXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MjEwPXN0YXRpYyBpbnQgYnBmX3RjcF9jYV9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyOC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgbmFtZSk6XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjI5Olx0XHRpZiAoYnBmX29ial9uYW1lX2NweSh0Y3BfY2EtXHUwMDNlbmFtZSwgdXRjcF9jYS1cdTAwM2VuYW1lLFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIzMC1cdFx0XHRcdCAgICAgc2l6ZW9mKHRjcF9jYS1cdTAwM2VuYW1lKSkgXHUwMDNjPSAwKVxuLS1cbm5ldC9zY2hlZC9icGZfcWRpc2MuYz0zNjE9c3RhdGljIGludCBicGZfcWRpc2NfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbm5ldC9zY2hlZC9icGZfcWRpc2MuYy0zODItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBRZGlzY19vcHMsIGlkKTpcbm5ldC9zY2hlZC9icGZfcWRpc2MuYzozODM6XHRcdGlmIChicGZfb2JqX25hbWVfY3B5KHFkaXNjX29wcy1cdTAwM2VpZCwgdXFkaXNjX29wcy1cdTAwM2VpZCxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYy0zODQtXHRcdFx0XHQgICAgIHNpemVvZihxZGlzY19vcHMtXHUwMDNlaWQpKSBcdTAwM2M9IDApXG4tLVxubmV0L3NtYy9zbWNfaHNfYnBmLmM9ODU9c3RhdGljIGludCBzbWNfYnBmX2hzX2N0cmxfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbm5ldC9zbWMvc21jX2hzX2JwZi5jLTk4LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc21jX2hzX2N0cmwsIG5hbWUpOlxubmV0L3NtYy9zbWNfaHNfYnBmLmM6OTk6XHRcdGlmIChicGZfb2JqX25hbWVfY3B5KGtfY3RybC1cdTAwM2VuYW1lLCB1X2N0cmwtXHUwMDNlbmFtZSxcbm5ldC9zbWMvc21jX2hzX2JwZi5jLTEwMC1cdFx0XHRcdCAgICAgc2l6ZW9mKHVfY3RybC1cdTAwM2VuYW1lKSkgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzkzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9vYmpfbmFtZV9jcHlgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLCBhbmQgSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBoYXZlIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgdG8gYmUgdHJ1bHkgdXNlZnVsLgoKKipEaXZpbmcgRGVlcCBpbnRvIGBicGZfb2JqX25hbWVfY3B5YCoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXM6ICpgYnBmX29ial9uYW1lX2NweWAuLi4gc291bmRzIGxpa2Ugd2UmIzM5O3JlIGNvcHlpbmcgb2JqZWN0IG5hbWVzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIEZhaXIgZW5vdWdoLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdywgd2hlcmUsIGFuZCB3aHkgaXQmIzM5O3MgdXNlZC4gSXMgaXQgYSBjcml0aWNhbCBwYXRoIGZ1bmN0aW9uPyBBIHV0aWxpdHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGltcGxlbWVudGF0aW9uPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbj8gV2hhdCBhcmUgdGhlIGNvbnN0cmFpbnRzIGl0IGhhcz8qCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgQlBGIGNvbXBvbmVudHMuICpJcyB0aGlzIGEgZGlyZWN0IGNvcHksIG9yIGlzIHRoZXJlIGFueSBzYW5pdGl6YXRpb24sIHZhbGlkYXRpb24sIG9yIHRydW5jYXRpb24gaGFwcGVuaW5nPyBUaGF0JiMzOTtzIHZpdGFsIHRvIGtub3cgaW1tZWRpYXRlbHkuKiBUaGUgc2l6ZSBwYXJhbWV0ZXJzIGFyZSBnb2luZyB0byBiZSBrZXksIGFuZCBJ4oCZbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG9mZi1ieS1vbmUgZXJyb3JzLiBBbHNvLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYW55IGxvY2tpbmcgbWVjaGFuaXNtczsgZGF0YSByYWNlcyBhcmUgbXkgbWFpbiB3b3JyeS4gV2hhdCBhcmUgdGhlIG1lbW9yeSBiYXJyaWVycz8gVGhpcyB3aWxsIGJlIGltcG9ydGFudCBpZiBtdWx0aXBsZSB0aHJlYWRzIGNhbiB1c2UgdGhpcy4KCkkmIzM5O2xsIGJlIGFza2luZyBteXNlbGYgcXVlc3Rpb25zIGFsb25nIHRoZSB3YXk6ICpXaGF0IGlzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZT8gV2hhdCBhcmUgdGhlIGFzc3VtcHRpb25zIG1hZGUgYnkgdGhlIGRldmVsb3BlcnM/IElzIHRoZSBjb2RlIHdlbGwtZG9jdW1lbnRlZCwgb3IgYW0gSSBnb2luZyB0byBoYXZlIHRvIHJldmVyc2UgZW5naW5lZXIgaXQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBlcnJvcnM/IEFyZSB0aGUgZXJyb3IgY29uZGl0aW9ucyBwcm9wZXJseSBoYW5kbGVkLCBvciBhcmUgdGhlcmUgc2lsZW50IGZhaWx1cmVzPyogSSYjMzk7bGwgYWxzbyB3YW50IHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIE1lbW9yeSBhbGxvY2F0aW9uLCBkYXRhIG1vdmVzLCBhbmQgY29weSBsb29wczsgdGhlc2UgY2FuIHNsb3cgdGhpbmdzIGRvd24uCgpPbmNlIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGludGVybmFsIHdvcmtpbmdzLCBJIHdpbGwgcGxhY2UgdGhpcyBmdW5jdGlvbiBpbiBjb250ZXh0LiAqSXMgaXQgcGFydCBvZiBhIGxhcmdlciBvYmplY3QgbWFuYWdlbWVudCBzeXN0ZW0gd2l0aGluIEJQRj8gSG93IGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlPyBJcyBpdCB1c2VkIGluIGFueSBzZW5zaXRpdmUgYXJlYXM/IEFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgaW1wYWN0cyBvZiB0aGlzIHRoYXQgbWF5IGJlIGxlc3Mgb2J2aW91cz8qIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgaXRzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgQlBGIHN5c3RlbS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIG9wZXJhdGluZyBhcyBpbnRlbmRlZCwgYW5kIGhvdyBpdCBjb3VsZCBiZSBpbXByb3ZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIyNTpcdGludCBicGZfb2JqX25hbWVfY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbjEyMjY6XHR7XG4xMjI3Olx0XHRjb25zdCBjaGFyICplbmQgPSBzcmMgJiM0Mzsgc2l6ZTtcbjEyMjg6XHRcdGNvbnN0IGNoYXIgKm9yaWdfc3JjID0gc3JjO1xuMTIyOTpcdFxuMTIzMDpcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4xMjMxOlx0XHQvKiBDb3B5IGFsbCBpc2FsbnVtKCksICYjMzk7XyYjMzk7IGFuZCAmIzM5Oy4mIzM5OyBjaGFycy4gKi9cbjEyMzI6XHRcdHdoaWxlIChzcmMgXHUwMDNjIGVuZCBcdTAwMjZcdTAwMjYgKnNyYykge1xuMTIzMzpcdFx0XHRpZiAoIWlzYWxudW0oKnNyYykgXHUwMDI2XHUwMDI2XG4xMjM0Olx0XHRcdCAgICAqc3JjICE9ICYjMzk7XyYjMzk7IFx1MDAyNlx1MDAyNiAqc3JjICE9ICYjMzk7LiYjMzk7KVxuMTIzNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTIzNjpcdFx0XHQqZHN0JiM0MzsmIzQzOyA9ICpzcmMmIzQzOyYjNDM7O1xuMTIzNzpcdFx0fVxuMTIzODpcdFxuMTIzOTpcdFx0LyogTm8gJiMzOTtcXDAmIzM5OyBmb3VuZCBpbiBcJiMzNDtzaXplXCYjMzQ7IG51bWJlciBvZiBieXRlcyAqL1xuMTI0MDpcdFx0aWYgKHNyYyA9PSBlbmQpXG4xMjQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI0MjpcdFxuMTI0MzpcdFx0cmV0dXJuIHNyYyAtIG9yaWdfc3JjO1xuMTI0NDpcdH1cbjEyNDU6XHRFWFBPUlRfU1lNQk9MX0dQTChicGZfb2JqX25hbWVfY3B5KTtcbjEyNDY6XHRcbjEyNDc6XHRpbnQgbWFwX2NoZWNrX25vX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuMTI0ODpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbjEyNDk6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLFxuMTI1MDpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcbjEyNTE6XHR7XG4xMjUyOlx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuMTI1MzpcdH1cbjEyNTQ6XHRcbjEyNTU6XHRzdGF0aWMgaW50IG1hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl90b2tlbiAqdG9rZW4sXG4xMjU2Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9rZXlfaWQsIHUzMiBidGZfdmFsdWVfaWQpXG4xMjU3Olx0e1xuMTI1ODpcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgKnZhbHVlX3R5cGU7XG4xMjU5Olx0XHR1MzIga2V5X3NpemUsIHZhbHVlX3NpemU7XG4xMjYwOlx0XHRpbnQgcmV0ID0gMDtcbjEyNjE6XHRcbjEyNjI6XHRcdC8qIFNvbWUgbWFwcyBhbGxvdyBrZXkgdG8gYmUgdW5zcGVjaWZpZWQuICovXG4xMjYzOlx0XHRpZiAoYnRmX2tleV9pZCkge1xuMTI2NDpcdFx0XHRrZXlfdHlwZSA9IGJ0Zl90eXBlX2lkX3NpemUoYnRmLCBcdTAwMjZidGZfa2V5X2lkLCBcdTAwMjZrZXlfc2l6ZSk7XG4xMjY1Olx0XHRcdGlmICgha2V5X3R5cGUgfHwga2V5X3NpemUgIT0gbWFwLVx1MDAzZWtleV9zaXplKVxuMTI2NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI2NzpcdFx0fSBlbHNlIHtcbjEyNjg6XHRcdFx0a2V5X3R5cGUgPSBidGZfdHlwZV9ieV9pZChidGYsIDApO1xuMTI2OTpcdFx0XHRpZiAoIW1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2NoZWNrX2J0ZilcbjEyNzA6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNzE6XHRcdH1cbjEyNzI6XHRcbjEyNzM6XHRcdHZhbHVlX3R5cGUgPSBidGZfdHlwZV9pZF9zaXplKGJ0ZiwgXHUwMDI2YnRmX3ZhbHVlX2lkLCBcdTAwMjZ2YWx1ZV9zaXplKTtcbjEyNzQ6XHRcdGlmICghdmFsdWVfdHlwZSB8fCB2YWx1ZV9zaXplICE9IG1hcC1cdTAwM2V2YWx1ZV9zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTI5MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDg2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29uZ2VzdGlvbiBDb250cm9sIE5hbWUgUmV0cmlldmFsKioKCk9rYXksIHNvIGBicGZfb2JqX25hbWVfY3B5YCBkb2VzIGEgYG1lbXNldGAgYmVmb3JlIGNvcHlpbmcsIHdoaWNoIG1lYW5zIHRoZSBkZXN0aW5hdGlvbiBhcnJheSwgc3BlY2lmaWNhbGx5IGB0Y3BfY2EtJmd0O25hbWVgLCBpcyBhbHdheXMgZnVsbHkgemVyb2VkIG91dCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGlzIGVuc3VyZXMgY29tcGxldGUgaW5pdGlhbGl6YXRpb24sIGluY2x1ZGluZyBwYWRkaW5nLCB1cCB0byBgVENQX0NBX05BTUVfTUFYYC4gQ29uc2VxdWVudGx5LCBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZXMgaW4gQlBGIGNvbnRleHRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkLiBCdWlsdC1pbiBjb25nZXN0aW9uIGNvbnRyb2xzIGFyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCwgd2hpY2ggaW5oZXJlbnRseSBtZWFucyB0aGV5IGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gVGhlcmVmb3JlLCB0aGUgYGNhX29wcy0mZ3Q7bmFtZWAgZmllbGQgaXMgY29uc2lzdGVudGx5IGluaXRpYWxpemVkLgoKSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBsb2NhbCB2YXJpYWJsZSBgY2FfbmFtZWAgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YC4gVGhlIGFycmF5IGBjYV9uYW1lYCBpcyBpbml0aWFsaXplZCB1c2luZyBge31gIHdoaWNoIHplcm9lcyBvdXQgdGhlIGVudGlyZSBhcnJheS4gVGhlbiwgYG1lbWNweWAgY29waWVzIGBUQ1BfQ0FfTkFNRV9NQVhgIGJ5dGVzIGZyb20gYGNhX29wcy0mZ3Q7bmFtZWAgaW50byBgY2FfbmFtZWAuICBCZWNhdXNlIGBjYV9vcHMtJmd0O25hbWVgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBgY2FfbmFtZWAgYWxzbyBiZWNvbWVzIGZ1bGx5IGluaXRpYWxpemVkLiAgRmluYWxseSwgYGNvcHlfdG9fc29ja3B0cmAgdHJhbnNmZXJzIGEgbnVtYmVyIG9mIGJ5dGVzIG5vIG1vcmUgdGhhbiB0aGUgc2l6ZSBvZiBgY2FfbmFtZWAgdG8gdXNlciBzcGFjZSwgZWxpbWluYXRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLgoKQnV0LCB3aGF0IGlmIGBjYV9vcHNgIGlzIE5VTEw/ICBJbiBgZG9fdGNwX2dldHNvY2tvcHRgLCBgY2Ffb3BzYCBpcyBvYnRhaW5lZCBmcm9tIGBpY3NrLSZndDtpY3NrX2NhX29wc2AuIENhbiBgaWNzay0mZ3Q7aWNza19jYV9vcHNgIGV2ZXIgYmUgTlVMTD8gIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBpdCYjMzk7cyBwb3NzaWJsZTogIGBpY3NrLSZndDtpY3NrX2NhX29wc2AgaXMgc2V0IHRvIE5VTEwgaW4gYG1wdGNwX2NhX3Jlc2V0YC4gSWYgYGNhX29wc2AgKmlzKiBOVUxMLCB0aGUgYG1lbWNweWAgd291bGQgZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXIhIFRoZSBwb3RlbnRpYWwgZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGlzIHRoZXJlLCB0aGVuLiBUaGlzIGlzIGhhcHBlbmluZyBpbiBNUFRDUCBjb2RlLCBidXQgYGRvX3RjcF9nZXRzb2Nrb3B0YCBpcyBmb3IgVENQIHNvY2tldHMuICBDb3VsZCBNUFRDUCBjb2RlIGNhbGwgYGRvX3RjcF9nZXRzb2Nrb3B0YD8gV2UgbmVlZCB0byB2ZXJpZnkgaWYgYGNhX29wc2AgY2FuIGJlIE5VTEwgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdGNwX2dldHNvY2tvcHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9NDk5PV9fcG9sbF90IHRjcF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuaW5jbHVkZS9uZXQvdGNwLmgtNTAwLVx0XHQgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpO1xuaW5jbHVkZS9uZXQvdGNwLmg6NTAxOmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbmluY2x1ZGUvbmV0L3RjcC5oLTUwMi1cdFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTU2MDA9c3RhdGljIGludCBzb2xfdGNwX3NvY2tvcHRfY29uZ2VzdGlvbihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgKm9wdHZhbCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy01NjEzLVx0XHRvcHR2YWxbLS0oKm9wdGxlbildID0gJiMzOTtcXDAmIzM5Oztcbm5ldC9jb3JlL2ZpbHRlci5jOjU2MTQ6XHRcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgVENQX0NPTkdFU1RJT04sXG5uZXQvY29yZS9maWx0ZXIuYy01NjE1LVx0XHRcdFx0XHQgS0VSTkVMX1NPQ0tQVFIob3B0dmFsKSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01NjUzPXN0YXRpYyBpbnQgc29sX3RjcF9zb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTcwMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjU3MDI6XHRcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgb3B0bmFtZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MDMtXHRcdFx0XHRcdCBLRVJORUxfU09DS1BUUihvcHR2YWwpLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0MTA9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtNDQ4MS1cbm5ldC9pcHY0L3RjcC5jOjQ0ODI6aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxubmV0L2lwdjQvdGNwLmMtNDQ4My1cdFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4tLVxubmV0L2lwdjQvdGNwLmM9NDg1Nz1ib29sIHRjcF9icGZfYnlwYXNzX2dldHNvY2tvcHQoaW50IGxldmVsLCBpbnQgb3B0bmFtZSlcbm5ldC9pcHY0L3RjcC5jLTQ4NTgte1xubmV0L2lwdjQvdGNwLmM6NDg1OTpcdC8qIFRDUCBkb190Y3BfZ2V0c29ja29wdCBoYXMgb3B0aW1pemVkIGdldHNvY2tvcHQgaW1wbGVtZW50YXRpb25cbm5ldC9pcHY0L3RjcC5jLTQ4NjAtXHQgKiB0byBhdm9pZCBleHRyYSBzb2NrZXQgbG9jayBmb3IgVENQX1pFUk9DT1BZX1JFQ0VJVkUuXG4tLVxubmV0L2lwdjQvdGNwLmM9NDg2OD1pbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ4NzYtXHRcdFx0XHRcdFx0XHRcdG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcC5jOjQ4Nzc6XHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBVU0VSX1NPQ0tQVFIob3B0dmFsKSxcbm5ldC9pcHY0L3RjcC5jLTQ4NzgtXHRcdFx0XHQgVVNFUl9TT0NLUFRSKG9wdGxlbikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzM3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiBgY2Ffb3BzYCBpcyBOVUxMLCB0aGVuIHRyeWluZyB0byBhY2Nlc3MgYGNhX29wcy0mZ3Q7bmFtZWAgd2lsbCB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGFua2Z1bGx5LCBJJiMzOTttIHByZXR0eSBzdXJlIEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBvb3BzIG1lY2hhbmlzbXMgd2lsbCBjYXRjaCB0aGF0IGtpbmQgb2YgdGhpbmcuIEl0JiMzOTtzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZCDigJMgaXQmIzM5O3Mgbm90IGEgc2VjdXJpdHkgbGVhaywgbGlrZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHdvdWxkIGJlLiBTdGlsbCwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGtlcm5lbCBpc24mIzM5O3QgY3Jhc2hpbmchCgpIYW5nIG9uIGEgc2Vjb25k4oCmIERvZXMgYGRvX3RjcF9nZXRzb2Nrb3B0YCAqaXRzZWxmKiBkbyBhIG51bGwgY2hlY2sgb24gYGNhX29wc2A/IFRoYXQmIzM5O3MgdGhlIHJlYWwgcXVlc3Rpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcG90ZW50aWFsIGRlcmVmZXJlbmNlIGlzIGV2ZW4gcG9zc2libGUuIEJlc3QgdG8gYmUgc3VyZSBhbmQgdHJhY2UgdGhlIGNhbGxzLiBBbHJpZ2h0LCBJJiMzOTtsbCBnbyBjaGVjayBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ1NzcgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YC4gVGhhdCBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU2MDpcdFx0XHRpbnQgYXR0cjtcbjQ1NjE6XHRcbjQ1NjI6XHRcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG40NTYzOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40NTY0Olx0XG40NTY1Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ1NjY6XHRcdFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMpO1xuNDU2NzpcdFx0XHRpZiAoY2Ffb3BzIFx1MDAyNlx1MDAyNiBjYV9vcHMtXHUwMDNlZ2V0X2luZm8pXG40NTY4Olx0XHRcdFx0c3ogPSBjYV9vcHMtXHUwMDNlZ2V0X2luZm8oc2ssIH4wVSwgXHUwMDI2YXR0ciwgXHUwMDI2aW5mbyk7XG40NTY5Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDU3MDpcdFxuNDU3MTpcdFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc3opO1xuNDU3MjpcdFx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXG40NTczOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40NTc0Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBcdTAwMjZpbmZvLCBsZW4pKVxuNDU3NTpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuNDU3NjpcdFx0XHRyZXR1cm4gMDtcbjQ1Nzc6XHRcdH1cbjQ1Nzg6XHRcdGNhc2UgVENQX1FVSUNLQUNLOlxuNDU3OTpcdFx0XHR2YWwgPSAhaW5ldF9jc2tfaW5fcGluZ3BvbmdfbW9kZShzayk7XG40NTgwOlx0XHRcdGJyZWFrO1xuNDU4MTpcdFxuNDU4MjpcdFx0Y2FzZSBUQ1BfQ09OR0VTVElPTjoge1xuNDU4MzpcdFx0XHRjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O1xuNDU4NDpcdFxuNDU4NTpcdFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbjQ1ODY6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjQ1ODc6XHRcdFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFRDUF9DQV9OQU1FX01BWCk7XG40NTg4Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcbjQ1ODk6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjQ1OTA6XHRcbjQ1OTE6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuNDU5MjpcdFx0XHRjYV9vcHMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcyk7XG40NTkzOlx0XHRcdG1lbWNweShjYV9uYW1lLCBjYV9vcHMtXHUwMDNlbmFtZSwgc2l6ZW9mKGNhX25hbWUpKTtcbjQ1OTQ6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG40NTk1Olx0XG40NTk2Olx0XHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBjYV9uYW1lLCBsZW4pKVxuNDU5NzpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuNDU5ODpcdFx0XHRyZXR1cm4gMDtcbjQ1OTk6XHRcdH1cbjQ2MDA6XHRcdGNhc2UgVENQX1VMUDpcbjQ2MDE6XHRcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG40NjAyOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40NjAzOlx0XHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfVUxQX05BTUVfTUFYKTtcbjQ2MDQ6XHRcdFx0aWYgKCFpY3NrLVx1MDAzZWljc2tfdWxwX29wcykge1xuNDYwNTpcdFx0XHRcdGxlbiA9IDA7XG40NjA2Olx0XHRcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxuNDYwNzpcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG40NjA4Olx0XHRcdFx0cmV0dXJuIDA7XG40NjA5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1NjAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIENvbmdlc3Rpb24gQ29udHJvbCBOYW1lIFJldHJpZXZhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYFRDUF9DT05HRVNUSU9OYCAobGluZSA0NTkzKSB3aGVyZSBgY2Ffb3BzYCBpc24mIzM5O3QgZXhwbGljaXRseSBjaGVja2VkIGJlZm9yZSB0aGUgYG1lbWNweWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgY29uY2VybmluZyBiZWNhdXNlIGlmIGBjYV9vcHNgIGlzIE5VTEwsIGl0JiMzOTtsbCBjcmFzaC4gSG93ZXZlciwgYWZ0ZXIgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCB0aGlzIHNlZW1zIHVubGlrZWx5IGZvciBhIHN0YW5kYXJkIFRDUCBzb2NrZXQgYXMgYGljc2stJmd0O2ljc2tfY2Ffb3BzYCBpcyBpbml0aWFsaXplZCBpbiBgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sYC4gVGhlIG9ubHkgbGlrZWx5IHNjZW5hcmlvIHdoZXJlIGBjYV9vcHNgIGNvdWxkIGJlIE5VTEwgaXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIE1QVENQLiBFdmVuIHRoZW4sIHRoZSBOVUxMIGRlcmVmZXJlbmNlIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4KCk15IGZvY3VzIHF1aWNrbHkgc2hpZnRzIHRvIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgY2hhciBjYV9uYW1lW1RDUF9DQV9OQU1FX01BWF0gPSB7fTtgLiBUaGlzIGlzIGV4cGxpY2l0bHkgemVyb2VkLCByaWdodCBmcm9tIHRoZSBzdGFydC4gV2UgY29weSBgY2Ffb3BzLSZndDtuYW1lYCBpbnRvIGBjYV9uYW1lYCwgYW5kIHRoZW4gYGNhX25hbWVgIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHaXZlbiB0aGUgemVybyBpbml0aWFsaXphdGlvbiBvZiBgY2FfbmFtZWAgYW5kIHRoZSBmdWxseSBpbml0aWFsaXplZCBgY2Ffb3BzLSZndDtuYW1lYCwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrLgoKU28sIHRoZSBvcmlnaW5hbCBjb2RlIGNvcGllZCBkaXJlY3RseSBmcm9tIGBpY3NrLSZndDtpY3NrX2NhX29wcy0mZ3Q7bmFtZWAgdG8gdXNlciBzcGFjZS4gVGhlIG5ldyBjb2RlIGlzIGNvcHlpbmcgdG8gYSBsb2NhbCB6ZXJvLWluaXRpYWxpemVkIGJ1ZmZlciwgcHJvdGVjdGVkIGJ5IGFuIFJDVSBsb2NrLCBiZWZvcmUgY29weWluZyB0byB1c2VyIHNwYWNlLiBUaGlzIGNoYW5nZSBmaXhlcyBhIGRhdGEgcmFjZSBieSBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBvbGQgYGNhX29wc2Agd2FzIGZyZWVkLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgbWVtY3B5YCBkb2VzbiYjMzk7dCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGNvZGUgY29waWVzIGBzaXplb2YoY2FfbmFtZSlgLCB3aGljaCBpcyBgVENQX0NBX05BTUVfTUFYYC4gTm93LCBgY2Ffb3BzLSZndDtuYW1lYCBpcyBkZWNsYXJlZCBhcyBgY2hhciBuYW1lW1RDUF9DQV9OQU1FX01BWF07YCB3aXRoaW4gdGhlIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYC4gU28sIGBzaXplb2YoY2Ffb3BzLSZndDtuYW1lKWAgaXMgKmFsc28qIGV4YWN0bHkgYFRDUF9DQV9OQU1FX01BWGAuIFRoZSBgbWVtY3B5YCByZWFkcyBleGFjdGx5IHRoZSByaWdodCBhbW91bnQgb2YgbWVtb3J5IGZyb20gYW4gYWxsb2NhdGVkIGJ1ZmZlci4KCk9rYXksIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBwb3RlbnRpYWwgdGhhdCBgY2Ffb3BzLSZndDtuYW1lYCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEJhc2VkIG9uIHdoYXQgSSBrbm93IG9mIGJ1aWx0LWluIGNvbmdlc3Rpb24gY29udHJvbHMgdGhleSBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHRoZXJlZm9yZSB6ZXJvLWluaXRpYWxpemVkLiBCUEYgY29uZ2VzdGlvbiBjb250cm9scyB1c2UgYGJwZl9vYmpfbmFtZV9jcHlgIHdoaWNoIGRvZXMgYG1lbXNldChkc3QsIDAsIHNpemUpYCBiZWZvcmUgY29weWluZyB0aGUgbmFtZS4gU28sIGBjYV9vcHMtJmd0O25hbWVgIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4KCk5vdyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IFdoYXQgYWJvdXQgYSBrZXJuZWwgbW9kdWxlIHRoYXQgcmVnaXN0ZXJzIGEgY29uZ2VzdGlvbiBjb250cm9sIGFuZCAqZG9lc24mIzM5O3QqIHplcm8taW5pdGlhbGl6ZSB0aGUgYG5hbWVgIGZpZWxkPyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYHRjcF9jb25nZXN0aW9uX29wc2AgaW4gbW9kdWxlcy4gVXN1YWxseSwgbW9kdWxlcyBkZWZpbmUgdGhlbSBhcyBgc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgbXlfY2EgPSB7IC4uLiB9O2AuIFN0YXRpYyB2YXJpYWJsZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgdG8gYmUgY2VydGFpbiBpZiBhbnkgbW9kdWxlIGR5bmFtaWNhbGx5IGFsbG9jYXRlcyBgdGNwX2Nvbmdlc3Rpb25fb3BzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jLip0Y3BfY29uZ2VzdGlvbl9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDMzMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBremFsbG9jLip0Y3BfY29uZ2VzdGlvbl9vcHNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGt6YWxsb2MuKnRjcF9jb25nZXN0aW9uX29wc2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3BlY2lmaWMgc2VhcmNoIHRlcm0sIHNvIEkmIzM5O20gbGlrZWx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24gb2YgY29uZ2VzdGlvbiBjb250cm9sIG9iamVjdHMsIHNwZWNpZmljYWxseSB0aGUgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0dXJlLiBUaGUgYGt6YWxsb2NgIGZ1bmN0aW9uIGhpbnRzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB6ZXJvZWQgbWVtb3J5LiBLbm93aW5nIHRoZSBrZXJuZWwsIHRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3IGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0sIG9yIHBvdGVudGlhbGx5IG1vZGlmaWNhdGlvbnMgdG8gYW4gZXhpc3Rpbmcgb25lLCB3aGVyZSBhIGNsZWFuIGFsbG9jYXRpb24gaXMgY3J1Y2lhbC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGluaXRpYWxpemF0aW9uIGJ1Z3MgbHVya2luZyB3aXRoaW4gdGhvc2UgYWxsb2NhdGlvbiBwYXRocy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGFyb3VuZCB0aGUgYWxsb2NhdGlvbnMgYXJlIGRvaW5nLiBUaGlzIGxvb2tzIGludGVyZXN0aW5nLi4uIGxldCYjMzk7cyBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKnRjcF9jb25nZXN0aW9uX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTc1CgkJCQkJCQlvdXRwdXQ6IDI0NwoJCQkJCQkJdGhvdWdodHM6IDE3NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25nZXN0aW9uIENvbnRyb2wgQ29kZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGJlY2F1c2Ugb2YgdGhlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZS4gTXkgZmlyc3QgdGhvdWdodCB3YXMgdGhhdCB0aGUgY29kZSBtaWdodCBiZSBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkgYnkgY29weWluZyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG5hbWUgKGBjYV9vcHMtJmd0O25hbWVgKSB0byBhIGxvY2FsIGJ1ZmZlciBhbmQgdGhlbiB0byB1c2VyIHNwYWNlLgoKSSBjb25zaWRlcmVkIHRoYXQgaWYgdGhlIGBjYV9vcHMtJmd0O25hbWVgIGZpZWxkIGl0c2VsZiB3YXNuJiMzOTt0IGluaXRpYWxpemVkLCB3ZSBjb3VsZCBoYXZlIGEgcHJvYmxlbS4gSG93ZXZlciwgSSBxdWlja2x5IHJlYWxpemVkIHRoYXQgYWxsIGB0Y3BfY29uZ2VzdGlvbl9vcHNgIGFyZSBlaXRoZXIgc3RhdGljYWxseSBpbml0aWFsaXplZCBhdCBjb21waWxlIHRpbWUgKHRodXMgemVyb2VkKSBvciBhbGxvY2F0ZWQgdmlhIEJQRiwgd2hpY2ggaGFzIGJlZW4gdmVyaWZpZWQgdG8gemVyby1pbml0aWFsaXplIHRoZSBuYW1lIGZpZWxkLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBjYV9vcHMtJmd0O25hbWVgLgoKRXZlbiBpZiB0aGUgbmFtZSAqd2FzKiB1bmluaXRpYWxpemVkLCB0aGUgb3JpZ2luYWwgY29kZSBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlciBzcGFjZSwgc28gdGhlIHBhdGNoIGlzbiYjMzk7dCAqaW50cm9kdWNpbmcqIGEgbmV3IGlzc3VlIGJ1dCBpcyBjaGFuZ2luZyB0aGUgbWV0aG9kLiBUaGUgb3JpZ2luYWwgY29kZSBhbHJlYWR5IHVzZWQgYGxlbmAsIHVwIHRvIGBUQ1BfQ0FfTkFNRV9NQVhgLiBOb3csIHdlIGNvcHkgYHNpemVvZihjYV9uYW1lKWAgKHNhbWUgc2l6ZSBhcyBgVENQX0NBX05BTUVfTUFYYCkgZnJvbSBgY2Ffb3BzLSZndDtuYW1lYCB0byBhIGxvY2FsIGJ1ZmZlciBjYWxsZWQgYGNhX25hbWVgLCBhbmQgdGhlbiBjb3B5IGEgcG9ydGlvbiBvZiB0aGF0IGJ1ZmZlciB1cCB0byBgbGVuYCBieXRlcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29kZSByZWFkcyBleGFjdGx5IGBUQ1BfQ0FfTkFNRV9NQVhgIGZyb20gYGNhX29wcy0mZ3Q7bmFtZWAsIGJ1dCBvbmx5IHdyaXRlcyBgbGVuYCBieXRlcyB0byB1c2VyIHNwYWNlLiBFdmVuIGlmIHRoZXJlIGFyZSB1bmluaXRpYWxpemVkIGJ5dGVzIGF0IHRoZSBlbmQsIHRoZSBpc3N1ZSBpcyBub3QgdHJpZ2dlcmVkLgoKVGhlbiwgSSB0aG91Z2h0IGFib3V0IEtNU0FOLCBidXQgaWYgdGhlIGBjYV9vcHMtJmd0O25hbWVgICpkaWQqIGNvbnRhaW4gdW5pbml0aWFsaXplZCBieXRlcywgdGhlIGBtZW1jcHlgIHRvIGBjYV9uYW1lYCAqd291bGQqIHRyaWdnZXIgYSBLTVNBTiB3YXJuaW5nLiBCdXQgd2Uga25vdyBpdCYjMzk7cyBpbml0aWFsaXplZCwgc28gdGhlIEtNU0FOIGNvbmNlcm4gaXMgdW5mb3VuZGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgb3RoZXIgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBxdWlja2x5IHNlZSB0aGVzZSBjaGFuZ2VzIGFyZSBhYm91dCBhZGRpbmcgUkNVIGxvY2tpbmcgYW5kIGBSRUFEX09OQ0VgIG9yIGBXUklURV9PTkNFYCB0byBgaWNzay0mZ3Q7aWNza19jYV9vcHNgLiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCiogICBJbiBgZG9fdGNwX2dldHNvY2tvcHRgLCB3ZSBub3cgaGF2ZSBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYFJFQURfT05DRShpY3NrLSZndDtpY3NrX2NhX29wcylgLCB3aGljaCBhZGRyZXNzZXMgZGF0YSByYWNlcy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4KKiAgIEluIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAsIGBXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBjYSlgIGlzIHVzZWQuCiogICBTYW1lIHRoaW5nIGZvciB0aGUgRENUQ1AgaW5pdGlhbGl6YXRpb24uIFdlIHNlZSBgV1JJVEVfT05DRShpbmV0X2NzayhzayktJmd0O2ljc2tfY2Ffb3BzLCAmYW1wO2RjdGNwX3Jlbm8pYC4KKiAgIFNpbWlsYXIgY2hhbmdlcyBpbiBgdGNwX2NhX29wZW5yZXFfY2hpbGRgIGFuZCBgdGNwX291dHB1dC5jYC4gQWdhaW4sIGp1c3QgYFdSSVRFX09OQ0VgLgoqICAgRmluYWxseSwgd2Ugc2VlIGBXUklURV9PTkNFKGljc2stJmd0O2ljc2tfY2Ffb3BzLCBOVUxMKWAgaW4gYG1wdGNwX2NhX3Jlc2V0YC4KCioqQ29uY2x1c2lvbioqCgpUaGUgcGF0Y2ggZm9jdXNlcyBvbiBmaXhpbmcgZGF0YSByYWNlcyBieSB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFyb3VuZCB0aGUgYGljc2stJmd0O2ljc2tfY2Ffb3BzYCBwb2ludGVyLiBJbiBgZG9fdGNwX2dldHNvY2tvcHRgLCBpdCBjb3BpZXMgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBuYW1lIHRvIGEgbG9jYWwgYnVmZmVyIGBjYV9uYW1lYCB1bmRlciBSQ1UgbG9jayBiZWZvcmUgc2VuZGluZyBpdCB0byB1c2VyIHNwYWNlLiBUaGUgbG9jYWwgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2Ugb2YgdGhlIGNvcHksIGBjYV9vcHMtJmd0O25hbWVgLCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgd2l0aGluIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgYW5kIGlzIGFsc28gZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCwgZWl0aGVyIHN0YXRpY2FsbHkgb3IgYnkgQlBGJiMzOTtzIHplcm8taW5pdGlhbGl6YXRpb24uIFRoZXJlJiMzOTtzIG5vIHdheSB0aGlzIHBhdGNoIGlzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGxlYWtpbmcgaXQgdG8gdXNlciBzcGFjZS4KClRoZSBpc3N1ZSBhZGRyZXNzZWQgaGVyZSBpcyBkYXRhIHJhY2VzLCB3aGljaCBjYW4gbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIEtBU0FOIGFuZCBLQ1NBTiBhcmUgd2VsbCBzdWl0ZWQgdG8gZGV0ZWN0aW5nIHRob3NlIGlzc3VlcywgdGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSBmb3IgdGhpcyBzcGVjaWZpYyBwYXRjaC4gV2UgY2FuIHRoZXJlZm9yZSBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLiBUaGUgS01TQU4gcmVhc29uaW5nIGlzIHRoYXQgZHVlIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGNhX29wcy0mZ3Q7bmFtZWAgdGhlIEtNU0FOIGZ1enppbmcgd291bGQgbm90IHRyaWdnZXIgYW55IGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBkYXRhIHJhY2VzIG9uIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zLCBhbmQgYnkgY29weWluZyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG5hbWUgdG8gYSBsb2NhbCBidWZmZXIgdW5kZXIgUkNVIGxvY2sgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLiBUaGUgbG9jYWwgYnVmZmVyIGBjYV9uYW1lYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2ApLiBUaGUgc291cmNlIGJ1ZmZlciBgY2Ffb3BzLVx1MDAzZW5hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciwgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBicGZfb2JqX25hbWVfY3B5YCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgb24gYGljc2stXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXHUwMDNlbmFtZWAgaXMgYSBmaXhlZC1zaXplIGFycmF5IGluIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgd2hpY2ggaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkIChlaXRoZXIgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCBvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZSB2aWEgYGJwZl9vYmpfbmFtZV9jcHlgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgZGF0YSByYWNlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjA1LjAzMDYxOTY2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDA2NTA5MjY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUQ1BfQ09OR19EQ1RDUFwiLFxuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb190Y3BfZ2V0c29ja29wdFwiLFxuICAgIFwidGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xcIixcbiAgICBcInRjcF9jYV9vcGVucmVxX2NoaWxkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBvbiBgaWNzay1cXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXFx1MDAzZW5hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciwgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBicGZfb2JqX25hbWVfY3B5YCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXFx1MDAzZWljc2tfY2Ffb3BzYCBpbiBUQ1AgYW5kIE1QVENQIHNvY2tldHMuIEl0IGFkZHMgYFJFQURfT05DRWAsIGBXUklURV9PTkNFYCwgYW5kIFJDVSByZWFkIGxvY2tzIGFyb3VuZCB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBhY2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtaXNzZWQgcmFjZSBjb25kaXRpb25zIHJlbWFpbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6MDUuMDMwNjI1NDg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njg2OTk4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YTA5N2Y1YjQ1YzVkNjllZGU5NjYyMzVjODc2NWEzOTQwMWQxYzczXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjUxOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcXG5pbmRleCBiNDIzN2QwZTk5NGQ2Li5jNDU3NzZkM2VkOTBiIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwLmNcXG5AQCAtNDU2Miw5ICs0NTYyLDExIEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4gXFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuLVxcdFxcdGNhX29wcyA9IGljc2stXFx1MDAzZWljc2tfY2Ffb3BzO1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX2NhX29wcyk7XFxuIFxcdFxcdGlmIChjYV9vcHMgXFx1MDAyNlxcdTAwMjYgY2Ffb3BzLVxcdTAwM2VnZXRfaW5mbylcXG4gXFx0XFx0XFx0c3ogPSBjYV9vcHMtXFx1MDAzZWdldF9pbmZvKHNrLCB+MFUsIFxcdTAwMjZhdHRyLCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0XFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHN6KTtcXG4gXFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcXG5AQCAtNDU3NywxNiArNDU3OSwyNCBAQCBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuIFxcdFxcdHZhbCA9ICFpbmV0X2Nza19pbl9waW5ncG9uZ19tb2RlKHNrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRjYXNlIFRDUF9DT05HRVNUSU9OOlxcbitcXHRjYXNlIFRDUF9DT05HRVNUSU9OOiB7XFxuK1xcdFxcdGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307XFxuK1xcbiBcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTtcXG4gXFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFxcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBpY3NrLVxcdTAwM2VpY3NrX2NhX29wcy1cXHUwMDNlbmFtZSwgbGVuKSlcXG4rXFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXFx1MDAzZWljc2tfY2Ffb3BzKTtcXG4rXFx0XFx0bWVtY3B5KGNhX25hbWUsIGNhX29wcy1cXHUwMDNlbmFtZSwgc2l6ZW9mKGNhX25hbWUpKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgY2FfbmFtZSwgbGVuKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXG4rXFx0fVxcbiBcXHRjYXNlIFRDUF9VTFA6XFxuIFxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jb25nLmMgYi9uZXQvaXB2NC90Y3BfY29uZy5jXFxuaW5kZXggZTlmNmM3N2UwNjMxNi4uOGU4M2VmODFmYzE4NyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2NvbmcuY1xcbkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdGNhID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cXHUwMDNlaXB2NC50Y3BfY29uZ2VzdGlvbl9jb250cm9sKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFicGZfdHJ5X21vZHVsZV9nZXQoY2EsIGNhLVxcdTAwM2Vvd25lcikpKVxcbiBcXHRcXHRjYSA9IFxcdTAwMjZ0Y3BfcmVubztcXG4tXFx0aWNzay1cXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcXG4rXFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2NhX29wcywgY2EpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdG1lbXNldChpY3NrLVxcdTAwM2VpY3NrX2NhX3ByaXYsIDAsIHNpemVvZihpY3NrLVxcdTAwM2VpY3NrX2NhX3ByaXYpKTtcXG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbiBcXG4gXFx0dGNwX2NsZWFudXBfY29uZ2VzdGlvbl9jb250cm9sKHNrKTtcXG4tXFx0aWNzay1cXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcXG4rXFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2NhX29wcywgY2EpO1xcbiBcXHRpY3NrLVxcdTAwM2VpY3NrX2NhX3NldHNvY2tvcHQgPSAxO1xcbiBcXHRtZW1zZXQoaWNzay1cXHUwMDNlaWNza19jYV9wcml2LCAwLCBzaXplb2YoaWNzay1cXHUwMDNlaWNza19jYV9wcml2KSk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGN0Y3AuYyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jXFxuaW5kZXggMjc0ZTYyOGU3Y2Y4Ni4uOTlmNjhjMjk5MmQwZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9kY3RjcC5jXFxuQEAgLTExMSw3ICsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG4gXFx0LyogTm8gRUNOIHN1cHBvcnQ/IEZhbGwgYmFjayB0byBSZW5vLiBBbHNvIG5lZWQgdG8gY2xlYXJcXG4gXFx0ICogRUNUIGZyb20gc2sgc2luY2UgaXQgaXMgc2V0IGR1cmluZyAzV0hTIGZvciBEQ1RDUC5cXG4gXFx0ICovXFxuLVxcdGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19jYV9vcHMgPSBcXHUwMDI2ZGN0Y3BfcmVubztcXG4rXFx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfY2Ffb3BzLCBcXHUwMDI2ZGN0Y3BfcmVubyk7XFxuIFxcdElORVRfRUNOX2RvbnR4bWl0KHNrKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXFxuaW5kZXggZjNmYTBiMThlZGEwNi4uMGRkZmQ1YWY2ZTU4ZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcXG5AQCAtNTA3LDcgKzUwNyw3IEBAIHZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIFxcdFxcdGNhID0gdGNwX2NhX2ZpbmRfa2V5KGNhX2tleSk7XFxuIFxcdFxcdGlmIChsaWtlbHkoY2EgXFx1MDAyNlxcdTAwMjYgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cXHUwMDNlb3duZXIpKSkge1xcbiBcXHRcXHRcXHRpY3NrLVxcdTAwM2VpY3NrX2NhX2RzdF9sb2NrZWQgPSB0Y3BfY2FfZHN0X2xvY2tlZChkc3QpO1xcbi1cXHRcXHRcXHRpY3NrLVxcdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKGljc2stXFx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XFxuIFxcdFxcdFxcdGNhX2dvdF9kc3QgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG5pbmRleCBmMjcwOWQ1ODVlZGJkLi43NDcyN2I3ZWI0NDZlIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xcbkBAIC00MDkyLDcgKzQwOTIsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIFxcdGlmIChsaWtlbHkoY2EgXFx1MDAyNlxcdTAwMjYgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cXHUwMDNlb3duZXIpKSkge1xcbiBcXHRcXHRicGZfbW9kdWxlX3B1dChpY3NrLVxcdTAwM2VpY3NrX2NhX29wcywgaWNzay1cXHUwMDNlaWNza19jYV9vcHMtXFx1MDAzZW93bmVyKTtcXG4gXFx0XFx0aWNzay1cXHUwMDNlaWNza19jYV9kc3RfbG9ja2VkID0gdGNwX2NhX2RzdF9sb2NrZWQoZHN0KTtcXG4tXFx0XFx0aWNzay1cXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcXG4rXFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2NhX29wcywgY2EpO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li4wMDZkZTM5ZTgxNjU2IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzIxOCw3ICszMjE4LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2FfcmVzZXQoc3RydWN0IHNvY2sgKnNrKVxcbiBcXG4gXFx0Lyogbm8gbmVlZCB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvcHMsIHRoZSBuYW1lIHdpbGwgc3VmZmljZSAqL1xcbiBcXHR0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc2spO1xcbi1cXHRpY3NrLVxcdTAwM2VpY3NrX2NhX29wcyA9IE5VTEw7XFxuK1xcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19jYV9vcHMsIE5VTEwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjA1LjgwMDM5NzIwOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY3MDA3NjUwNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9DT05HX0RDVENQXCIsXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbFwiLFxuICAgIFwidGNwX2NhX29wZW5yZXFfY2hpbGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gYWNjZXNzaW5nIGBpY3NrLVxcdTAwM2VpY3NrX2NhX29wc2AgaW4gVENQIGFuZCBNUFRDUCBzb2NrZXRzLiBJdCBhZGRzIGBSRUFEX09OQ0VgLCBgV1JJVEVfT05DRWAsIGFuZCBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgYWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWlzc2VkIHJhY2UgY29uZGl0aW9ucyByZW1haW4uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhMDk3ZjViNDVjNWQ2OWVkZTk2NjIzNWM4NzY1YTM5NDAxZDFjNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNzo1MTowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmM0NTc3NmQzZWQ5MGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NTYyLDkgKzQ1NjIsMTEgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdFx0Y2Ffb3BzID0gaWNzay1cdTAwM2VpY3NrX2NhX29wcztcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRjYV9vcHMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcyk7XG4gXHRcdGlmIChjYV9vcHMgXHUwMDI2XHUwMDI2IGNhX29wcy1cdTAwM2VnZXRfaW5mbylcbiBcdFx0XHRzeiA9IGNhX29wcy1cdTAwM2VnZXRfaW5mbyhzaywgfjBVLCBcdTAwMjZhdHRyLCBcdTAwMjZpbmZvKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzeik7XG4gXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcbkBAIC00NTc3LDE2ICs0NTc5LDI0IEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0dmFsID0gIWluZXRfY3NrX2luX3Bpbmdwb25nX21vZGUoc2spO1xuIFx0XHRicmVhaztcbiBcbi1cdGNhc2UgVENQX0NPTkdFU1RJT046XG4rXHRjYXNlIFRDUF9DT05HRVNUSU9OOiB7XG4rXHRcdGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307XG4rXG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTtcbiBcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgaWNzay1cdTAwM2VpY3NrX2NhX29wcy1cdTAwM2VuYW1lLCBsZW4pKVxuK1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzKTtcbitcdFx0bWVtY3B5KGNhX25hbWUsIGNhX29wcy1cdTAwM2VuYW1lLCBzaXplb2YoY2FfbmFtZSkpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdHJldHVybiAwO1xuLVxuK1x0fVxuIFx0Y2FzZSBUQ1BfVUxQOlxuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuY1xuaW5kZXggZTlmNmM3N2UwNjMxNi4uOGU4M2VmODFmYzE4NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9jb25nLmNcbisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmNcbkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spXG4gXHRjYSA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNlaXB2NC50Y3BfY29uZ2VzdGlvbl9jb250cm9sKTtcbiBcdGlmICh1bmxpa2VseSghYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cdTAwM2Vvd25lcikpKVxuIFx0XHRjYSA9IFx1MDAyNnRjcF9yZW5vO1xuLVx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuK1x0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayxcbiBcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiBcbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4rXHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMsIGNhKTtcbiBcdGljc2stXHUwMDNlaWNza19jYV9zZXRzb2Nrb3B0ID0gMTtcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2RjdGNwLmMgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xuaW5kZXggMjc0ZTYyOGU3Y2Y4Ni4uOTlmNjhjMjk5MmQwZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9kY3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xuQEAgLTExMSw3ICsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaylcbiBcdC8qIE5vIEVDTiBzdXBwb3J0PyBGYWxsIGJhY2sgdG8gUmVuby4gQWxzbyBuZWVkIHRvIGNsZWFyXG4gXHQgKiBFQ1QgZnJvbSBzayBzaW5jZSBpdCBpcyBzZXQgZHVyaW5nIDNXSFMgZm9yIERDVENQLlxuIFx0ICovXG4tXHRpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMgPSBcdTAwMjZkY3RjcF9yZW5vO1xuK1x0V1JJVEVfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMsIFx1MDAyNmRjdGNwX3Jlbm8pO1xuIFx0SU5FVF9FQ05fZG9udHhtaXQoc2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbmluZGV4IGYzZmEwYjE4ZWRhMDYuLjBkZGZkNWFmNmU1OGYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xuQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFx0XHRjYSA9IHRjcF9jYV9maW5kX2tleShjYV9rZXkpO1xuIFx0XHRpZiAobGlrZWx5KGNhIFx1MDAyNlx1MDAyNiBicGZfdHJ5X21vZHVsZV9nZXQoY2EsIGNhLVx1MDAzZW93bmVyKSkpIHtcbiBcdFx0XHRpY3NrLVx1MDAzZWljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7XG4tXHRcdFx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuK1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpO1xuIFx0XHRcdGNhX2dvdF9kc3QgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggZjI3MDlkNTg1ZWRiZC4uNzQ3MjdiN2ViNDQ2ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtNDA5Miw3ICs0MDkyLDcgQEAgc3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFx0aWYgKGxpa2VseShjYSBcdTAwMjZcdTAwMjYgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cdTAwM2Vvd25lcikpKSB7XG4gXHRcdGJwZl9tb2R1bGVfcHV0KGljc2stXHUwMDNlaWNza19jYV9vcHMsIGljc2stXHUwMDNlaWNza19jYV9vcHMtXHUwMDNlb3duZXIpO1xuIFx0XHRpY3NrLVx1MDAzZWljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7XG4tXHRcdGljc2stXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcbitcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggYjQ3NGQwMzYyMGE3NS4uMDA2ZGUzOWU4MTY1NiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTMyMTgsNyArMzIxOCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NhX3Jlc2V0KHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdC8qIG5vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3BzLCB0aGUgbmFtZSB3aWxsIHN1ZmZpY2UgKi9cbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gTlVMTDtcbitcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjA1LjgwMDQwMDExOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDc5ODM5NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRDUC9NUFRDUCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBjbGVhbmluZyB1cCB0aGUgYWNjZXNzIHRvIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBpbiB0aGUgVENQIGFuZCBNUFRDUCBjb2RlLiBUaGV5J3JlIHRocm93aW5nIGluIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgdG8gYXZvaWQgZGF0YSByYWNlcywgd2hpY2ggaXMgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIFRoZXkndmUgYWxzbyBhZGRlZCBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCB0aGUgcmVhZHMgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YCB3aGVuIGRlYWxpbmcgd2l0aCBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AgYW5kIGNhbGxpbmcgYGNhX29wcy1cdTAwM2VnZXRfaW5mb2Agb3IgY29weWluZyB0aGUgbmFtZS4gU2VlbXMgbGlrZSBhIHNvbGlkIG1vdmUsIGFkZHJlc3NpbmcgdGhvc2UgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgcmVhZCB2dWxuZXJhYmlsaXRpZXMgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0YCDigJMgdGhpbmsgYFRDUF9DQ19JTkZPYCBhbmQgYFRDUF9DT05HRVNUSU9OYCBvcHRpb25zLlxuXG5Ob3csIHRoZSByZWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUgVENQIGxvZ2ljLCBlc3BlY2lhbGx5IGluIGBkb190Y3BfZ2V0c29ja29wdGAsIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAsIGFuZCBzbyBvbi4gV2UgbmVlZCB0byBleHBsb3JlIHRoaXMuXG5cbkxldCdzIHByaW9yaXRpemUgc29tZSBmdW5jdGlvbnMgZm9yIGZ1enppbmc6IGBkb190Y3BfZ2V0c29ja29wdGAsIGRlZmluaXRlbHkuIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAgaXMgYW5vdGhlciBzb2xpZCBjYW5kaWRhdGUuIGB0Y3BfcmVpbml0X2Nvbmdlc3Rpb25fY29udHJvbGAsIGBkY3RjcF9pbml0YCwgYHRjcF9jYV9kc3RfaW5pdGAgYW5kIGBtcHRjcF9jYV9yZXNldGAsIHRob3NlIGFyZSBzdGF0aWMsIHNvIHRoZXkgbWlnaHQgYmUgdHJpY2tpZXIgdG8gZ2V0IHRvIGRpcmVjdGx5LCBidXQgc3RpbGwgcmVsZXZhbnQuIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAgaXMgbm9uLXN0YXRpYywgc28gd2Ugc2hvdWxkIGNvbnNpZGVyIHRoYXQgYXMgd2VsbC5cblxuT2theSwgY29uZmlybWluZyBgZG9fdGNwX2dldHNvY2tvcHRgIGlzIGluZGVlZCBub24tc3RhdGljLCBpbiBgbmV0L2lwdjQvdGNwLmNgLiBBbmQgYHRjcF9jYV9vcGVucmVxX2NoaWxkYCwgdGhhdCBvbmUncyBpbiBgbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jYC4gYHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sYCwgdGhhdCBvbmUgaXMgaW4gYG5ldC9pcHY0L3RjcF9jb25nLmNgLlxuXG5MYXN0bHksIGxldCdzIG5haWwgZG93biB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBXZSdsbCBuZWVkIGBORVRfSVBWNGAgKG9yIGp1c3QgYElORVRgKSBmb3Igc3VyZS4gYFRDUF9DT05HX0RDVENQYCBpZiB3ZSB3YW50IHRvIGhpdCBgZGN0Y3BfaW5pdGAsIGFuZCBgTVBUQ1BgIGlmIHdlJ3JlIHRhcmdldGluZyBgbXB0Y3BfY2FfcmVzZXRgLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBmdXp6ZXIncyBlbnZpcm9ubWVudC4gT2theSwgbGV0J3MgdmVyaWZ5IHRob3NlIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODA3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6MTYuMjgwMjQ0ODcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjI2MDc5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRDUF9DT05HX0RDVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NjE2PWNvbmZpZyBUQ1BfQ09OR19JTExJTk9JU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy02MjctXFxubmV0L2lwdjQvS2NvbmZpZzo2Mjg6Y29uZmlnIFRDUF9DT05HX0RDVENQXFxubmV0L2lwdjQvS2NvbmZpZy02MjktXFx0dHJpc3RhdGUgXFxcIkRhdGFDZW50ZXIgVENQIChEQ1RDUClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjE5LjQ0Mjg2MzUxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4NzQ1ODgwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTVBUQ1AgQ29uZmlndXJhdGlvbiBDaGVjayAtIFRpbWUgdG8gRHJpbGwgRG93bioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgTVBUQ1AgY29uZmlndXJhdGlvbi4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IG5ldHdvcmsgdHJvdWJsZXNob290aW5nIG9yIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG11bHRpcGF0aCBUQ1AuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgTVBUQ1Agc2V0dXAuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBwZXJoYXBzIHRoZSBzdWJmbG93IGxpbWl0cywgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0gaW4gdXNlIChob3BlZnVsbHkgc29tZXRoaW5nIHNlbnNpYmxlIGxpa2UgQkJSIG9yIFRDUC1DQSksIGFuZCB0aGUgb3ZlcmFsbCBNUFRDUCBwb2xpY3kuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLCB0aG91Z2gsIGVuc3VyaW5nIHRoZSBrZXJuZWwgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgY29uZmlndXJlZCBmb3IgTVBUQ1Agb3BlcmF0aW9uLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgZXN0YWJsaXNoZWQgZmxvd3MgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG9idmlvdXMgbWlzY29uZmlndXJhdGlvbnMgb3IgdW5leHBlY3RlZCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIHRoZSBib3R0bGVuZWNrLiBVbHRpbWF0ZWx5LCBJJ2xsIGJlIHN0cml2aW5nIHRvIGRldGVybWluZSBpZiBNUFRDUCBpcyBldmVuICplbmFibGVkKiBhcyBpdCBzaG91bGQgYmUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6MjguMzE3NDU2Mzc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDAzNDEzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjMzLjAxNzgwOTAzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTA2MDU1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgZG9fdGNwX2dldHNvY2tvcHRgIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGBkb190Y3BfZ2V0c29ja29wdGAuIElzIGl0IHNvbWV0aGluZyB0aGF0J3MgaW50ZW5kZWQgdG8gYmUgYWNjZXNzZWQgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGNvbnRleHQsIG9yIGlzIGl0IGludGVybmFsIHRvIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGZ1bmN0aW9uPyBJbiBvdGhlciB3b3JkcywgaXMgaXQgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiB0byB1c2VyLXNwYWNlLCBvciBpcyBpdCBub24tc3RhdGljLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBpdCBoYXMgYnJvYWRlciB2aXNpYmlsaXR5IHdpdGhpbiBpdHMgZGVmaW5lZCB0cmFuc2xhdGlvbiB1bml0LiBJIHdhbnQgdG8ga25vdyB3aGVyZSBhbmQgaG93IEkgY2FuIGFjY2VzcyB0aGlzIHJvdXRpbmUuIFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgd2lsbCBhZmZlY3QgaG93IEkgYXBwcm9hY2ggd2hhdGV2ZXIgSSdtIGRvaW5nLiBJZiBpdCdzIGV4cG9ydGVkLCB0aGUgaW1wbGljYXRpb25zIGFyZSB2ZXJ5IGRpZmZlcmVudCB0aGFuIGlmIGl0J3Mgc3RhdGljIGFuZCBsaW1pdGVkIHRvIGEgc3BlY2lmaWMgLmMgZmlsZS4gVGhpcyBpbml0aWFsIGNoZWNrIGlzIGNydWNpYWwgZm9yIG15IG92ZXJhbGwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUxOjM2Ljc2ODQxNzc2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwNzY2Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBkb190Y3BfZ2V0c29ja29wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD00OTk9X19wb2xsX3QgdGNwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvdGNwLmgtNTAwLVxcdFxcdCAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6NTAxOmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG5pbmNsdWRlL25ldC90Y3AuaC01MDItXFx0XFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDQxMD1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dldF90aW1lc3RhbXBpbmdfb3B0X3N0YXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ0ODEtXFxubmV0L2lwdjQvdGNwLmM6NDQ4MjppbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxubmV0L2lwdjQvdGNwLmMtNDQ4My1cXHRcXHQgICAgICBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6NDEuMjI5MTkwMzkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwMzg4OTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgKipcblxuT2theSwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IG9yIHJlLWVzdGFibGlzaG1lbnQgcGF0aC4gTXkgaW5pdGlhbCBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiB3aGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gQXJlIHdlIGxvb2tpbmcgYXQgaW5pdGlhbCBTWU4/IEEgcmV0cmFuc21pc3Npb24gYWZ0ZXIgYSBsb3NzIGV2ZW50PyBPciBwZXJoYXBzIGEgY29ubmVjdGlvbiByZXNldCB3aGVyZSB3ZSdyZSBzdGFydGluZyBmcmVzaD8gVGhlIGZ1bmN0aW9uJ3MgbmFtZSBpbXBsaWVzIHdlJ3JlIGFzc2lnbmluZyAob3IgcG90ZW50aWFsbHkgKnJlKi1hc3NpZ25pbmcpIGEgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIGV4aXN0aW5nIHNvY2tldCBvciBhIG5ldyBvbmUsIGFzIHRoZSBsb2dpYyB3aWxsIGRpZmZlci5cblxuTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byByZW1lbWJlciB0aGUgdmFyaW91cyBwbGFjZXMgdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBjYWxsZWQgZnJvbS4gSXMgaXQgY2FsbGVkIGZyb20gdGhlIHNvY2tldCBjcmVhdGlvbiBwYXRoLCBvciBmcm9tIHRoZSBjb25uZWN0aW9uIGFjY2VwdGFuY2UgcGF0aD8gQXJlIHRoZXJlIGRpZmZlcmVudCBwYXRocyBmb3IgaW5pdGlhbCBjb25uZWN0aW9ucyB2ZXJzdXMgY29ubmVjdGlvbnMgd2hlcmUgd2UgYXJlIGhhbmRsaW5nIGEgbG9zcyBldmVudD8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbi4gYHNrYCAoc29ja2V0IHN0cnVjdHVyZSkgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnZvbHZlZCwgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCBvYmplY3QsIHBlcmhhcHMgYSBwcm90b2NvbC1zcGVjaWZpYyBzdHJ1Y3R1cmUsIHRvIHRlbGwgdXMgd2hpY2ggYWxnb3JpdGhtIGlzIGFwcHJvcHJpYXRlLlxuXG5XZSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGNoZWNrcyB0aGF0IGFyZSBiZWluZyBkb25lIHRvIGVuc3VyZSB0aGUgc2VsZWN0ZWQgYWxnb3JpdGhtIGlzIHZhbGlkIGZvciB0aGUgbmV0d29yayBuYW1lc3BhY2UgKGUuZy4gaWYgY2VydGFpbiBhbGdvcml0aG1zIGFyZSBkaXNhYmxlZCBvciBibGFja2xpc3RlZCkuIFdoYXQncyB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtIGlmIHRoZSBkZXNpcmVkIGFsZ29yaXRobSBpc24ndCBhdmFpbGFibGU/IElzIHRoZXJlIGEgZGVmYXVsdCBhbGdvcml0aG0/IEFsc28sIEkgbmVlZCB0byBsb29rIGZvciBhbnkgbG9naWMgYXJvdW5kIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBvdmVycmlkZXMuIElzIHRoZXJlIGEgd2F5IGZvciBhcHBsaWNhdGlvbnMgKG9yIGV2ZW4gdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yKSB0byBkaWN0YXRlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtPyBUaGlzIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGdpdmVuIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgYWN0dWFsIGFzc2lnbm1lbnQgcHJvY2VzczogaG93IHRoZSBzZWxlY3RlZCBhbGdvcml0aG0gaXMgYWN0dWFsbHkgbGlua2VkIHRvIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNoYW5nZXMgdG8gdGhlIGBpbmV0X2Nvbm5lY3Rpb25fc29ja2Agc3RydWN0dXJlIChvciBpdHMgZXF1aXZhbGVudHMpIG9yIHBvc3NpYmx5IG1hbmlwdWxhdGlvbiBvZiBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpcyB3aGVyZSBJJ2xsIHByb2JhYmx5IGZpbmQgcG9pbnRlcnMgdG8gdGhlIGFjdHVhbCBjb25nZXN0aW9uIGNvbnRyb2wgc3RhdGUgbWFjaGluZS4gQW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIG9yIGxvY2tpbmcgdGhhdCBtaWdodCBiZSBpbnZvbHZlZCBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseSwgZXNwZWNpYWxseSBpZiBtdWx0aXBsZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBtaWdodCBiZSBhY2Nlc3NpbmcgdGhpcyBmdW5jdGlvbi4gT3ZlcmFsbCwgaXQgaXMgZ29pbmcgdG8gYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBsZXQncyBsb29rIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTg5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6NDguNzMzMDgyODA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDEwMDIyOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2xcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9MTM5Mz1pbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMTM5NC1cXG5pbmNsdWRlL25ldC90Y3AuaDoxMzk1OnZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0xMzk2LXZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfY29uZy5jPTE5OT1jaGFyICp0Y3BfY2FfZ2V0X25hbWVfYnlfa2V5KHUzMiBrZXksIGNoYXIgKmJ1ZmZlcilcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE1LS8qIEFzc2lnbiBjaG9pY2Ugb2YgY29uZ2VzdGlvbiBjb250cm9sLiAqL1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjE2OnZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTE6NTMuMTQzMTE0MTc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDIzNDk1MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgdGNwX2NhX29wZW5yZXFfY2hpbGRgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBpcyByYWNpbmcuIFRoaXMgbmFtZSBzY3JlYW1zIFwiY2hpbGQgY29ubmVjdGlvblwiIGFuZCBcIm9wZW4gcmVxdWVzdCxcIiB3aGljaCBsaWtlbHkgbWVhbnMgaXQncyBpbnZvbHZlZCBpbiBoYW5kbGluZyBuZXcgVENQIGNvbm5lY3Rpb25zIGluaXRpYXRlZCBmcm9tIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIElzIHRoaXMgcGFydCBvZiB0aGUgU1lOLUFDSyBoYW5kbGluZywgb3IgaXMgaXQgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgZWRnZSBjYXNlP1xuXG5JIG5lZWQgdG8gc2VlIGlmIHRoaXMgaXMgdGllZCBpbnRvIGEgc3BlY2lmaWMgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSwgb3IgaWYgaXQgaXMgYSBtb3JlIGdlbmVyYWwgZnVuY3Rpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2suIFRoZSBuYW1lICpzdWdnZXN0cyogaXQgaXMgY29uZ2VzdGlvbiBjb250cm9sIHJlbGF0ZWQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGhvb2tzIG9yIGNhbGwtb3V0cyB0byBzcGVjaWZpYyBjb25nZXN0aW9uIGNvbnRyb2wgaW1wbGVtZW50YXRpb25zIHdpdGhpbiB0aGUgY29kZS5cblxuTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBwcm9jZXNzIG9mIGhhbmRsaW5nIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3QsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBhbmQgbWF5YmUgZXZlbiBzZXR0aW5nIHVwIGluaXRpYWwgY29uZ2VzdGlvbiBjb250cm9sIHBhcmFtZXRlcnMgKmJlZm9yZSogdGhlIGNvbm5lY3Rpb24gaXMgZnVsbHkgZXN0YWJsaXNoZWQuIEl0J3MgYWxtb3N0IGxpa2UgYSBzdGFnaW5nIGFyZWEgZm9yIGEgbmV3IHNvY2tldCBiZWZvcmUgdGhlIHRocmVlLXdheSBoYW5kc2hha2UgaXMgY29tcGxldGUuIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgdG91Y2hpbmcsIHBhcnRpY3VsYXJseSBhbnl0aGluZyByZWxhdGVkIHRvIHNvY2tldHMsIFRDUCBjb250cm9sIGJsb2NrcyAobGlrZSBgdGNwY2JgKSwgYW5kIGxpa2VseSBhbnkgY29uZ2VzdGlvbiBjb250cm9sIHN0YXRlLiBBbHNvLCBJIG5lZWQgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTElTVEVOIHF1ZXVlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGFueSBsb2NraW5nIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBhcmlzZSB3aXRoIG11bHRpcGxlIGNvbmN1cnJlbnQgY29ubmVjdGlvbiBhdHRlbXB0cy4gVGhhdCdzIGFsd2F5cyBhIHBvaW50IG9mIHZ1bG5lcmFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MzEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo1MTo1OC4wNDU0NjcyMDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTk4MTQ2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0Y3BfY2Ffb3BlbnJlcV9jaGlsZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD01NTc9c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC01NTktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvdGNwLmg6NTYwOnZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTU2MS1zdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQ3MD1zdGF0aWMgdm9pZCB0Y3BfZWNuX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5Ni1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDk3OnZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUyOjAyLjY0NTI4ODIxNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTY1OTgxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyB3aXRoaW4gdGhlIFRDUCBhbmQgTVBUQ1Agc3RhY2ssIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgaG93IHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BlcmF0aW9ucyAoYGljc2stXHUwMDNlaWNza19jYV9vcHNgKSBhcmUgaGFuZGxlZC4gVGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgdGhlIGp1ZGljaW91cyB1c2Ugb2YgYFJFQURfT05DRWAsIGBXUklURV9PTkNFYCBtZW1vcnkgYmFycmllcnMgYW5kIFJDVSByZWFkIGxvY2tzLiBFc3NlbnRpYWxseSwgdGhleSdyZSBib2xzdGVyaW5nIHRoZSBhdG9taWMgYWNjZXNzIGd1YXJhbnRlZXMgYXJvdW5kIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgb3BzIGRhdGEgc3RydWN0dXJlLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGRvX3RjcF9nZXRzb2Nrb3B0YCwgd2hlcmUgdGhlIGZpeCBpcyBpbXBsZW1lbnRlZCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIGB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbGAgYW5kIGB0Y3BfY2Ffb3BlbnJlcV9jaGlsZGAsIHRoYXQgZGVmaW5lIHRoZSBjb250ZXh0IG9mIHRoZSBvcGVyYXRpb25zIGJlaW5nIGFkZHJlc3NlZC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgbG93LWxldmVsIHJldHJpZXZhbCBvZiBjb25nZXN0aW9uIGNvbnRyb2wgb3B0aW9ucywgd2hpY2ggaXMgYSBzZW5zaXRpdmUgYXJlYS4gSSBzZWUgdGhleSd2ZSB6ZXJvZWQgaW4gb24gdGhlIGNhc2VzIHdpdGggYFRDUF9DT05HX0RDVENQYCBhbmQgYE1QVENQYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlaXIgbW9yZSBjb21wbGV4IGNvbmdlc3Rpb24gY29udHJvbCBsb2dpYyBhbmQgY29uY3VycmVuY3kgbW9kZWxzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUuIFRoZSBpbXBhY3QgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCdzIGZpeGluZyB0aGUgd2F5IHRoZXNlIGxvdy1sZXZlbCBmdW5jdGlvbnMgYXJlIGFjY2Vzc2luZyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG9wZXJhdGlvbnMsIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkLiBTbywgSSBuZWVkIHRvIHByaW9yaXRpemUgcmlnb3JvdXMgZnV6emluZyBhbmQgdGVzdGluZyB3aXRoIGFuIGVtcGhhc2lzIG9uIGNvbmN1cnJlbnQgYWNjZXNzLiBJIHdhbnQgdG8gbG9vayBmb3IgYW55IG92ZXJsb29rZWQgcmFjZXMsIGFuZCByZWdyZXNzaW9uIHRlc3RpbmcgdG8gZW5zdXJlIG5vIG5ldyBwcm9ibGVtcyB3ZXJlIGluYWR2ZXJ0ZW50bHkgaW50cm9kdWNlZC4gVGhpcyBpcyB0aGUga2luZCBvZiBmaXggdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzY5LCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo1MjoxMi42MTEyODM3OTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY3NTg3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRDUF9DT05HX0RDVENQXCIsXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3RjcF9nZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbFwiLFxuICAgIFwidGNwX2NhX29wZW5yZXFfY2hpbGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBkYXRhIHJhY2VzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdoZW4gYWNjZXNzaW5nIGBpY3NrLVxcdTAwM2VpY3NrX2NhX29wc2AgaW4gVENQIGFuZCBNUFRDUCBzb2NrZXRzLiBJdCBhZGRzIGBSRUFEX09OQ0VgLCBgV1JJVEVfT05DRWAsIGFuZCBSQ1UgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBvcHMgYWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWlzc2VkIHJhY2UgY29uZGl0aW9ucyByZW1haW4uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0NPTkdfRENUQ1BcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fdGNwX2dldHNvY2tvcHRcIixcbiAgICBcInRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sXCIsXG4gICAgXCJ0Y3BfY2Ffb3BlbnJlcV9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGRhdGEgcmFjZXMgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2hlbiBhY2Nlc3NpbmcgYGljc2stXFx1MDAzZWljc2tfY2Ffb3BzYCBpbiBUQ1AgYW5kIE1QVENQIHNvY2tldHMuIEl0IGFkZHMgYFJFQURfT05DRWAsIGBXUklURV9PTkNFYCwgYW5kIFJDVSByZWFkIGxvY2tzIGFyb3VuZCB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG9wcyBhY2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtaXNzZWQgcmFjZSBjb25kaXRpb25zIHJlbWFpbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NTI6MTIuODA4MDU1NDUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIyODc2MzA3MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo1MjoxMi44MDkwNTkxMzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODMyMjg2NTk1OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBvbiBgaWNzay1cXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXFx1MDAzZW5hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciwgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBicGZfb2JqX25hbWVfY3B5YCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRhMDk3ZjViNDVjNWQ2OWVkZTk2NjIzNWM4NzY1YTM5NDAxZDFjNzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNzo1MTowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmM0NTc3NmQzZWQ5MGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC00NTYyLDkgKzQ1NjIsMTEgQEAgaW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdFx0Y2Ffb3BzID0gaWNzay1cdTAwM2VpY3NrX2NhX29wcztcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRjYV9vcHMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcyk7XG4gXHRcdGlmIChjYV9vcHMgXHUwMDI2XHUwMDI2IGNhX29wcy1cdTAwM2VnZXRfaW5mbylcbiBcdFx0XHRzeiA9IGNhX29wcy1cdTAwM2VnZXRfaW5mbyhzaywgfjBVLCBcdTAwMjZhdHRyLCBcdTAwMjZpbmZvKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzeik7XG4gXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcbkBAIC00NTc3LDE2ICs0NTc5LDI0IEBAIGludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbiBcdFx0dmFsID0gIWluZXRfY3NrX2luX3Bpbmdwb25nX21vZGUoc2spO1xuIFx0XHRicmVhaztcbiBcbi1cdGNhc2UgVENQX0NPTkdFU1RJT046XG4rXHRjYXNlIFRDUF9DT05HRVNUSU9OOiB7XG4rXHRcdGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307XG4rXG4gXHRcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTtcbiBcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgaWNzay1cdTAwM2VpY3NrX2NhX29wcy1cdTAwM2VuYW1lLCBsZW4pKVxuK1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzKTtcbitcdFx0bWVtY3B5KGNhX25hbWUsIGNhX29wcy1cdTAwM2VuYW1lLCBzaXplb2YoY2FfbmFtZSkpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdHJldHVybiAwO1xuLVxuK1x0fVxuIFx0Y2FzZSBUQ1BfVUxQOlxuIFx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuY1xuaW5kZXggZTlmNmM3N2UwNjMxNi4uOGU4M2VmODFmYzE4NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9jb25nLmNcbisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmNcbkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCB0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spXG4gXHRjYSA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNlaXB2NC50Y3BfY29uZ2VzdGlvbl9jb250cm9sKTtcbiBcdGlmICh1bmxpa2VseSghYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cdTAwM2Vvd25lcikpKVxuIFx0XHRjYSA9IFx1MDAyNnRjcF9yZW5vO1xuLVx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuK1x0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIHRjcF9yZWluaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayxcbiBcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiBcbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gY2E7XG4rXHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMsIGNhKTtcbiBcdGljc2stXHUwMDNlaWNza19jYV9zZXRzb2Nrb3B0ID0gMTtcbiBcdG1lbXNldChpY3NrLVx1MDAzZWljc2tfY2FfcHJpdiwgMCwgc2l6ZW9mKGljc2stXHUwMDNlaWNza19jYV9wcml2KSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2RjdGNwLmMgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xuaW5kZXggMjc0ZTYyOGU3Y2Y4Ni4uOTlmNjhjMjk5MmQwZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9kY3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfZGN0Y3AuY1xuQEAgLTExMSw3ICsxMTEsNyBAQCBfX2JwZl9rZnVuYyBzdGF0aWMgdm9pZCBkY3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaylcbiBcdC8qIE5vIEVDTiBzdXBwb3J0PyBGYWxsIGJhY2sgdG8gUmVuby4gQWxzbyBuZWVkIHRvIGNsZWFyXG4gXHQgKiBFQ1QgZnJvbSBzayBzaW5jZSBpdCBpcyBzZXQgZHVyaW5nIDNXSFMgZm9yIERDVENQLlxuIFx0ICovXG4tXHRpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMgPSBcdTAwMjZkY3RjcF9yZW5vO1xuK1x0V1JJVEVfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19jYV9vcHMsIFx1MDAyNmRjdGNwX3Jlbm8pO1xuIFx0SU5FVF9FQ05fZG9udHhtaXQoc2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbmluZGV4IGYzZmEwYjE4ZWRhMDYuLjBkZGZkNWFmNmU1OGYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xuQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFx0XHRjYSA9IHRjcF9jYV9maW5kX2tleShjYV9rZXkpO1xuIFx0XHRpZiAobGlrZWx5KGNhIFx1MDAyNlx1MDAyNiBicGZfdHJ5X21vZHVsZV9nZXQoY2EsIGNhLVx1MDAzZW93bmVyKSkpIHtcbiBcdFx0XHRpY3NrLVx1MDAzZWljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7XG4tXHRcdFx0aWNzay1cdTAwM2VpY3NrX2NhX29wcyA9IGNhO1xuK1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpO1xuIFx0XHRcdGNhX2dvdF9kc3QgPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggZjI3MDlkNTg1ZWRiZC4uNzQ3MjdiN2ViNDQ2ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtNDA5Miw3ICs0MDkyLDcgQEAgc3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFx0aWYgKGxpa2VseShjYSBcdTAwMjZcdTAwMjYgYnBmX3RyeV9tb2R1bGVfZ2V0KGNhLCBjYS1cdTAwM2Vvd25lcikpKSB7XG4gXHRcdGJwZl9tb2R1bGVfcHV0KGljc2stXHUwMDNlaWNza19jYV9vcHMsIGljc2stXHUwMDNlaWNza19jYV9vcHMtXHUwMDNlb3duZXIpO1xuIFx0XHRpY3NrLVx1MDAzZWljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7XG4tXHRcdGljc2stXHUwMDNlaWNza19jYV9vcHMgPSBjYTtcbitcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBjYSk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggYjQ3NGQwMzYyMGE3NS4uMDA2ZGUzOWU4MTY1NiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTMyMTgsNyArMzIxOCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NhX3Jlc2V0KHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdC8qIG5vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3BzLCB0aGUgbmFtZSB3aWxsIHN1ZmZpY2UgKi9cbiBcdHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzayk7XG4tXHRpY3NrLVx1MDAzZWljc2tfY2Ffb3BzID0gTlVMTDtcbitcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjUyOjEyLjgwOTA2MTY1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYxODQ5NTE3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIG91dHNldCwgSSBzZWUgdGhpcyBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyB3aXRoaW4gdGhlIFRDUC9JUCBzdGFjazogYG5ldC9pcHY0L3RjcC5jYCwgYG5ldC9pcHY0L3RjcF9jb25nLmNgLCBgbmV0L2lwdjQvdGNwX2RjdGNwLmNgLCBgbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jYCwgYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2AsIGFuZCBldmVuIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AuIFRoYXQgaW5kaWNhdGVzIHRoaXMgaXMgYSByYXRoZXIgYnJvYWQgY2hhbmdlLCBsaWtlbHkgYWZmZWN0aW5nIGhvdyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbSBpcyBoYW5kbGVkIGF0IHNldmVyYWwgbGF5ZXJzLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgcmFjZSBmaXhlcywgc3BlY2lmaWNhbGx5IGludm9sdmluZyBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gTWFrZXMgc2Vuc2U7IHRoYXQncyBhIGNsYXNzaWMgc2lnbmFsIGZvciBjb25jdXJyZW50IGFjY2VzcyBpc3N1ZXMuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgYFRDUF9DT05HRVNUSU9OYCBnZXRzb2Nrb3B0IGltcGxlbWVudGF0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGhlcmUgaGFzIG15IGltbWVkaWF0ZSBhdHRlbnRpb246XG5cbmBgYGNcblx0Y2FzZSBUQ1BfQ09OR0VTVElPTjoge1xuXHRcdGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307XG5cblx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcblx0XHRcdHJldHVybiAtRUZBVUxUO1xuXHRcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfQ0FfTkFNRV9NQVgpO1xuXHRcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcdTAwMjZsZW4sIHNpemVvZihpbnQpKSlcblx0XHRcdHJldHVybiAtRUZBVUxUO1xuXG5cdFx0cmN1X3JlYWRfbG9jaygpO1xuXHRcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzKTtcblx0XHRtZW1jcHkoY2FfbmFtZSwgY2Ffb3BzLVx1MDAzZW5hbWUsIHNpemVvZihjYV9uYW1lKSk7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cblx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgY2FfbmFtZSwgbGVuKSlcblx0XHRcdHJldHVybiAtRUZBVUxUO1xuXHRcdHJldHVybiAwO1xuXHR9XG5gYGBcblxuVGhlIGludGVudCBpcyBjbGVhcjogcmV0cmlldmUgdGhlIGN1cnJlbnQgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSdzIG5hbWUgYW5kIHJldHVybiBpdCB0byB0aGUgdXNlci4gVGhlIGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2AgaW5pdGlhbGl6YXRpb24gaXMgZ29vZDsgemVyb2luZyB0aGUgYnVmZmVyIGlzIGEgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLiBUaGUgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGBSRUFEX09OQ0VgIGFyZSB0aGVyZSwgYXMgZXhwZWN0ZWQsIGZvciBzYWZldHkuIFRoZW4sIHRoZSBjcml0aWNhbCBzdGVwOiBgbWVtY3B5KGNhX25hbWUsIGNhX29wcy1cdTAwM2VuYW1lLCBzaXplb2YoY2FfbmFtZSkpO2AuIFRoYXQncyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSBhIHBvdGVudGlhbCBwcm9ibGVtLiBgc2l6ZW9mKGNhX25hbWUpYCBpcyBgVENQX0NBX05BTUVfTUFYYCwgYnV0IGlzIGBjYV9vcHMtXHUwMDNlbmFtZWAgKmd1YXJhbnRlZWQqIHRvIGJlIHRoYXQgc2l6ZT8gSWYgYGNhX29wcy1cdTAwM2VuYW1lYCBpcyBhIHZhcmlhYmxlIGxlbmd0aCBzdHJpbmcgb3IgYSBzaG9ydGVyIGZpeGVkLXNpemUgYXJyYXksIHRoaXMgYG1lbWNweWAgY291bGQgcmVhZCBwYXN0IHRoZSBib3VuZHMgb2YgYGNhX29wcy1cdTAwM2VuYW1lYCwgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyLXJlYWQuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdHlwZSBgY2Ffb3BzLVx1MDAzZW5hbWVgIGFjdHVhbGx5IGlzLiBUaW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjU3OjA4Ljk5NDAxNzQ4OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3Njc4NzU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTEzMDY9c3RydWN0IHJhdGVfc2FtcGxlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTEzMjQtXFxuaW5jbHVkZS9uZXQvdGNwLmg6MTMyNTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHtcXG5pbmNsdWRlL25ldC90Y3AuaC0xMzI2LS8qIGZhc3QgcGF0aCBmaWVsZHMgYXJlIHB1dCBmaXJzdCB0byBmaWxsIG9uZSBjYWNoZSBsaW5lICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjU3OjE0LjY3MDgxMjI5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEwMjU4Mjk5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFRDUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBUQ1AgY29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyByZXRyYW5zbWlzc2lvbiBiZWhhdmlvci4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZyBpc24ndCBxdWl0ZSByaWdodCB3aXRoIGhvdyBpdCdzIGhhbmRsaW5nIGRlbGF5ZWQgQUNLcyBpbiB0aGlzIHBhcnRpY3VsYXIgZWRnZSBjYXNlIEknbSBkZWJ1Z2dpbmcuIFRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUg4oCTIGFuZCBJJ20gc3RhcnRpbmcgd2l0aCBgaW5jbHVkZS9uZXQvdGNwLmhgLiBNb3JlIHByZWNpc2VseSwgSSdsbCBiZSBsb29raW5nIGFyb3VuZCBsaW5lIDEzMjUuIFRoaXMgYXJlYSBvZnRlbiBkZWFscyB3aXRoIHRoZSBtb3JlIGludHJpY2F0ZSBkZXRhaWxzIG9mIFRDUCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgdGltZXIgbWFuYWdlbWVudDsgSSdtIGhvcGluZyBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGdvdmVybmluZyByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cyBvciBBQ0sgcHJvY2Vzc2luZyB0aGVyZSwgd2hpY2ggbWlnaHQgc2hlZCBsaWdodCBvbiB0aGlzIGlzc3VlLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIEkgY2FuIGZpbmQgbXkgYW5zd2VyIGRpcmVjdGx5LCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHN0YWNrLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6MDUuNjk2NjQ5MjA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC90Y3AuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMzI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzI1OlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMge1xcbjEzMjY6XFx0LyogZmFzdCBwYXRoIGZpZWxkcyBhcmUgcHV0IGZpcnN0IHRvIGZpbGwgb25lIGNhY2hlIGxpbmUgKi9cXG4xMzI3OlxcdFxcbjEzMjg6XFx0XFx0LyogQSBjb25nZXN0aW9uIGNvbnRyb2wgKENDKSBtdXN0IHByb3ZpZGUgb25lIG9mIGVpdGhlcjpcXG4xMzI5OlxcdFxcdCAqXFxuMTMzMDpcXHRcXHQgKiAoYSkgYSBjb25nX2F2b2lkIGZ1bmN0aW9uLCBpZiB0aGUgQ0Mgd2FudHMgdG8gdXNlIHRoZSBjb3JlIFRDUFxcbjEzMzE6XFx0XFx0ICogICAgIHN0YWNrJ3MgZGVmYXVsdCBmdW5jdGlvbmFsaXR5IHRvIGltcGxlbWVudCBhIFxcXCJjbGFzc2ljXFxcIlxcbjEzMzI6XFx0XFx0ICogICAgIChSZW5vL0NVQklDLXN0eWxlKSByZXNwb25zZSB0byBwYWNrZXQgbG9zcywgUkZDMzE2OCBFQ04sXFxuMTMzMzpcXHRcXHQgKiAgICAgaWRsZSBwZXJpb2RzLCBwYWNpbmcgcmF0ZSBjb21wdXRhdGlvbnMsIGV0Yy5cXG4xMzM0OlxcdFxcdCAqXFxuMTMzNTpcXHRcXHQgKiAoYikgYSBjb25nX2NvbnRyb2wgZnVuY3Rpb24sIGlmIHRoZSBDQyB3YW50cyBjdXN0b20gYmVoYXZpb3IgYW5kXFxuMTMzNjpcXHRcXHQgKiAgICAgIGNvbXBsZXRlIGNvbnRyb2wgb2YgYWxsIGNvbmdlc3Rpb24gY29udHJvbCBiZWhhdmlvcnMuXFxuMTMzNzpcXHRcXHQgKi9cXG4xMzM4OlxcdFxcdC8qIChhKSBcXFwiY2xhc3NpY1xcXCIgcmVzcG9uc2U6IGNhbGN1bGF0ZSBuZXcgY3duZC5cXG4xMzM5OlxcdFxcdCAqL1xcbjEzNDA6XFx0XFx0dm9pZCAoKmNvbmdfYXZvaWQpKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywgdTMyIGFja2VkKTtcXG4xMzQxOlxcdFxcdC8qIChiKSBcXFwiY3VzdG9tXFxcIiByZXNwb25zZTogY2FsbCB3aGVuIHBhY2tldHMgYXJlIGRlbGl2ZXJlZCB0byB1cGRhdGVcXG4xMzQyOlxcdFxcdCAqIGN3bmQgYW5kIHBhY2luZyByYXRlLCBhZnRlciBhbGwgdGhlIGNhX3N0YXRlIHByb2Nlc3NpbmcuXFxuMTM0MzpcXHRcXHQgKi9cXG4xMzQ0OlxcdFxcdHZvaWQgKCpjb25nX2NvbnRyb2wpKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywgaW50IGZsYWcsIGNvbnN0IHN0cnVjdCByYXRlX3NhbXBsZSAqcnMpO1xcbjEzNDU6XFx0XFxuMTM0NjpcXHRcXHQvKiByZXR1cm4gc2xvdyBzdGFydCB0aHJlc2hvbGQgKHJlcXVpcmVkKSAqL1xcbjEzNDc6XFx0XFx0dTMyICgqc3N0aHJlc2gpKHN0cnVjdCBzb2NrICpzayk7XFxuMTM0ODpcXHRcXG4xMzQ5OlxcdFxcdC8qIGNhbGwgYmVmb3JlIGNoYW5naW5nIGNhX3N0YXRlIChvcHRpb25hbCkgKi9cXG4xMzUwOlxcdFxcdHZvaWQgKCpzZXRfc3RhdGUpKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKTtcXG4xMzUxOlxcdFxcbjEzNTI6XFx0XFx0LyogY2FsbCB3aGVuIGN3bmQgZXZlbnQgb2NjdXJzIChvcHRpb25hbCkgKi9cXG4xMzUzOlxcdFxcdHZvaWQgKCpjd25kX2V2ZW50KShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gdGNwX2NhX2V2ZW50IGV2KTtcXG4xMzU0OlxcdFxcbjEzNTU6XFx0XFx0LyogY2FsbCB3aGVuIENBX0VWRU5UX1RYX1NUQVJUIGN3bmQgZXZlbnQgb2NjdXJzIChvcHRpb25hbCkgKi9cXG4xMzU2OlxcdFxcdHZvaWQgKCpjd25kX2V2ZW50X3R4X3N0YXJ0KShzdHJ1Y3Qgc29jayAqc2spO1xcbjEzNTc6XFx0XFxuMTM1ODpcXHRcXHQvKiBjYWxsIHdoZW4gYWNrIGFycml2ZXMgKG9wdGlvbmFsKSAqL1xcbjEzNTk6XFx0XFx0dm9pZCAoKmluX2Fja19ldmVudCkoc3RydWN0IHNvY2sgKnNrLCB1MzIgZmxhZ3MpO1xcbjEzNjA6XFx0XFxuMTM2MTpcXHRcXHQvKiBob29rIGZvciBwYWNrZXQgYWNrIGFjY291bnRpbmcgKG9wdGlvbmFsKSAqL1xcbjEzNjI6XFx0XFx0dm9pZCAoKnBrdHNfYWNrZWQpKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSk7XFxuMTM2MzpcXHRcXG4xMzY0OlxcdFxcdC8qIG92ZXJyaWRlIHN5c2N0bF90Y3BfbWluX3Rzb19zZWdzIChvcHRpb25hbCkgKi9cXG4xMzY1OlxcdFxcdHUzMiAoKm1pbl90c29fc2Vncykoc3RydWN0IHNvY2sgKnNrKTtcXG4xMzY2OlxcdFxcbjEzNjc6XFx0XFx0LyogbmV3IHZhbHVlIG9mIGN3bmQgYWZ0ZXIgbG9zcyAocmVxdWlyZWQpICovXFxuMTM2ODpcXHRcXHR1MzIgICgqdW5kb19jd25kKShzdHJ1Y3Qgc29jayAqc2spO1xcbjEzNjk6XFx0XFx0LyogcmV0dXJucyB0aGUgbXVsdGlwbGllciB1c2VkIGluIHRjcF9zbmRidWZfZXhwYW5kIChvcHRpb25hbCkgKi9cXG4xMzcwOlxcdFxcdHUzMiAoKnNuZGJ1Zl9leHBhbmQpKHN0cnVjdCBzb2NrICpzayk7XFxuMTM3MTpcXHRcXG4xMzcyOlxcdC8qIGNvbnRyb2wvc2xvdyBwYXRocyBwdXQgbGFzdCAqL1xcbjEzNzM6XFx0XFx0LyogZ2V0IGluZm8gZm9yIGluZXRfZGlhZyAob3B0aW9uYWwpICovXFxuMTM3NDpcXHRcXHRzaXplX3QgKCpnZXRfaW5mbykoc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAyOjA1LjY5Njk1MTU4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE3NDIwNzIzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSBwZXJzcGVjdGl2ZSBvbiBleGFtaW5pbmcgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgOlxuXG4qKkRpdmluZyBEZWVwIGludG8gVENQIENvbmdlc3Rpb24gQ29udHJvbCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzYC4gSSBrbm93IHRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgZm9yIGFueSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtIHdpdGhpbiB0aGUgVENQIHN0YWNrLCBzbyBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGZpZWxkcyBhbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGRlZmluZWQgaGVyZS4gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB2YXJpb3VzIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zIGludGVyYWN0IHdpdGggdGhpcy4gU3BlY2lmaWNhbGx5LCBJIGFtIHRoaW5raW5nIGFib3V0IGhvdyBhbGdvcml0aG1zIGhhbmRsZSB0aGVpciBsb2dpYyBieSB1c2luZyB0aG9zZSBvcGVyYXRpb25zLiBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9uIHBvaW50ZXJzIGRlZmluZWQgd2l0aGluIHRoaXMgc3RydWN0PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgbWF5YmUgd2hlcmUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBkaXZlcmdlPyBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IG5ldyBhbGdvcml0aG1zIGFyZSBhYmxlIHRvIFwicGx1ZyBpblwiIHRvIHRoZSBrZXJuZWwgdXNpbmcgdGhpcyBtZWNoYW5pc20uIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyZmFjZSBwcmVjaXNlbHkgd2lsbCBiZSBjcml0aWNhbC4gSSBhbSB0aGlua2luZyBhYm91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIG9mIHRoZSBUQ1Agc3RhY2sgYW5kIGhvdyBpdCBtYW5hZ2VzIHRvIG1ha2UgdGhhdCBtb2R1bGFyLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyBpbnNpZ2h0cyB0aGUgY29kZSBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMzMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6MTUuODcxMTYyNTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIxMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3RjcC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzU6XFx0XFx0XFx0XFx0ICAgdW5pb24gdGNwX2NjX2luZm8gKmluZm8pO1xcbjEzNzY6XFx0XFxuMTM3NzpcXHRcXHRjaGFyIFxcdFxcdFxcdG5hbWVbVENQX0NBX05BTUVfTUFYXTtcXG4xMzc4OlxcdFxcdHN0cnVjdCBtb2R1bGVcXHRcXHQqb3duZXI7XFxuMTM3OTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4xMzgwOlxcdFxcdHUzMlxcdFxcdFxcdGtleTtcXG4xMzgxOlxcdFxcdHUzMlxcdFxcdFxcdGZsYWdzO1xcbjEzODI6XFx0XFxuMTM4MzpcXHRcXHQvKiBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAob3B0aW9uYWwpICovXFxuMTM4NDpcXHRcXHR2b2lkICgqaW5pdCkoc3RydWN0IHNvY2sgKnNrKTtcXG4xMzg1OlxcdFxcdC8qIGNsZWFudXAgcHJpdmF0ZSBkYXRhICAob3B0aW9uYWwpICovXFxuMTM4NjpcXHRcXHR2b2lkICgqcmVsZWFzZSkoc3RydWN0IHNvY2sgKnNrKTtcXG4xMzg3OlxcdH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4xMzg4OlxcdFxcbjEzODk6XFx0aW50IHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XFxuMTM5MDpcXHR2b2lkIHRjcF91bnJlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0eXBlKTtcXG4xMzkxOlxcdGludCB0Y3BfdXBkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0eXBlLFxcbjEzOTI6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpvbGRfdHlwZSk7XFxuMTM5MzpcXHRpbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSk7XFxuMTM5NDpcXHRcXG4xMzk1OlxcdHZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKTtcXG4xMzk2OlxcdHZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7XFxuMTM5NzpcXHR2b2lkIHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spO1xcbjEzOTg6XFx0aW50IHRjcF9zZXRfZGVmYXVsdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcXG4xMzk5OlxcdHZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUpO1xcbjE0MDA6XFx0dm9pZCB0Y3BfZ2V0X2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4xNDAxOlxcdHZvaWQgdGNwX2dldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICpidWYsIHNpemVfdCBsZW4pO1xcbjE0MDI6XFx0aW50IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYWxsb3dlZCk7XFxuMTQwMzpcXHRpbnQgdGNwX3NldF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGxvYWQsXFxuMTQwNDpcXHRcXHRcXHRcXHQgICAgICAgYm9vbCBjYXBfbmV0X2FkbWluKTtcXG4xNDA1OlxcdHUzMiB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrZWQpO1xcbjE0MDY6XFx0dm9pZCB0Y3BfY29uZ19hdm9pZF9haShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgdywgdTMyIGFja2VkKTtcXG4xNDA3OlxcdFxcbjE0MDg6XFx0dTMyIHRjcF9yZW5vX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzayk7XFxuMTQwOTpcXHR1MzIgdGNwX3Jlbm9fdW5kb19jd25kKHN0cnVjdCBzb2NrICpzayk7XFxuMTQxMDpcXHR2b2lkIHRjcF9yZW5vX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWQpO1xcbjE0MTE6XFx0ZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm87XFxuMTQxMjpcXHRcXG4xNDEzOlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnRjcF9jYV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpO1xcbjE0MTQ6XFx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmRfa2V5KHUzMiBrZXkpO1xcbjE0MTU6XFx0dTMyIHRjcF9jYV9nZXRfa2V5X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCAqZWNuX2NhKTtcXG4xNDE2OlxcdCNpZmRlZiBDT05GSUdfSU5FVFxcbjE0MTc6XFx0Y2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpO1xcbjE0MTg6XFx0I2Vsc2VcXG4xNDE5OlxcdHN0YXRpYyBpbmxpbmUgY2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpXFxuMTQyMDpcXHR7XFxuMTQyMTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDIyOlxcdH1cXG4xNDIzOlxcdCNlbmRpZlxcbjE0MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAyOjE1Ljg3MTQ4NzY3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzQ3MDE5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmdlc3Rpb24gQ29udHJvbCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc2VlIHRoYXQgYG5hbWVgIGlzIGRlY2xhcmVkIGFzIGEgZml4ZWQtc2l6ZSBjaGFyYWN0ZXIgYXJyYXk6IGBjaGFyIG5hbWVbVENQX0NBX05BTUVfTUFYXWAuIFJpZ2h0IGF3YXksIHRoZSBgbWVtY3B5YCBpcyBjb3B5aW5nIGBUQ1BfQ0FfTkFNRV9NQVhgIGJ5dGVzIGZyb20gYGNhX29wcy1cdTAwM2VuYW1lYCBpbnRvIGBjYV9uYW1lYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgc2luY2UgYGNhX29wcy1cdTAwM2VuYW1lYCBpcyBpdHNlbGYgYSBmaXhlZC1zaXplIGFycmF5IG9mIHRoZSBzYW1lIHNpemUsIHRoaXMgbG9va3MgbGlrZSBhIHBlcmZlY3RseSBzYWZlIGNvcHkg4oCTIG5vIHBvdGVudGlhbCBmb3IgcmVhZGluZyBvdXRzaWRlIG9mIGJvdW5kcy4gVGhhdOKAmXMgZ29vZC5cblxuQnV0IEkgbmVlZCB0byBiZSAqc3VyZSouIE15IGV4cGVydCBpbnR1aXRpb24gaXMga2lja2luZyBpbiwgYW5kIEkgc3RhcnQgd29uZGVyaW5nOiBpcyBgY2Ffb3BzLVx1MDAzZW5hbWVgICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIGFjcm9zcyBhbGwgdGhlc2UgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0cz8gVXN1YWxseSwgdGhlc2UgdGhpbmdzIGFyZSBzdGF0aWMgdmFyaWFibGVzIGRlZmluZWQgaW4ga2VybmVsIG1vZHVsZXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgZGVmYXVsdC4gVGhhdCdzIHRoZSBjb21tb24gY2FzZSwgYW5kIHVzdWFsbHkgbm90IHNvbWV0aGluZyB0byBzd2VhdC5cblxuSG93ZXZlciwgSSBuZWVkIHRvIGNvdmVyIGFsbCB0aGUgYmFzZXMuIEknbSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlIG1pZ2h0IGJlIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYHRjcF9jb25nZXN0aW9uX29wc2Agc3RydWN0dXJlcyB3aGVyZSBgbmFtZWAgbWlnaHQgKm5vdCogYmUgZnVsbHkgemVyb2VkLiBOb3csIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgQlBGIGxhbmRzY2FwZS4gV2l0aCBCUEYgYmVpbmcgYWJsZSB0byByZWdpc3RlciBjb25nZXN0aW9uIGNvbnRyb2xzLCB0aGF04oCZcyBhIG5ldyBhdHRhY2sgdmVjdG9yLiBJIHNob3VsZCBjaGVjayBgYnBmX3RjcF9jYWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdWNoIGR5bmFtaWMgaW5zdGFuY2VzLiBHb3R0YSBjb3ZlciBhbGwgbXkgYmFzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMjoyMS42NDYxOTM5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMjIxMzU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MjE9dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wbXR1X2Nvb2tpZSAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3N5bmNfbXNzLHRjcF9jdXJyZW50X21zcyx0Y3BfLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICAgICAgICAgICBpY3NrX2NhX29wcyAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3BfdHNvX3NlZ3MsdGMuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTIzLXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgIGljc2tfYWZfb3BzICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3Bfc2VuZF9zeW5fZC4uLlxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD0yOD1zdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXQ7XFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaDoyOTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzO1xcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzAtXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPTgxPXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTk2LVxcdF9fdTMyXFx0XFx0XFx0ICBpY3NrX3BtdHVfY29va2llO1xcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg6OTc6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqaWNza19jYV9vcHM7XFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC05OC1cXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzICppY3NrX2FmX29wcztcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaD01NT1zdHJ1Y3QgbmV0bnNfaXB2NCB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgtMjM2LVxcdGludCBzeXNjdGxfdGNwX2Zhc3RvcGVuO1xcbmluY2x1ZGUvbmV0L25ldG5zL2lwdjQuaDoyMzc6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBfX3JjdSAgKnRjcF9jb25nZXN0aW9uX2NvbnRyb2w7XFxuaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oLTIzOC1cXHRzdHJ1Y3QgdGNwX2Zhc3RvcGVuX2NvbnRleHQgX19yY3UgKnRjcF9mYXN0b3Blbl9jdHg7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0xMzA2PXN0cnVjdCByYXRlX3NhbXBsZSB7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0xMzI0LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjEzMjU6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMTMyNi0vKiBmYXN0IHBhdGggZmllbGRzIGFyZSBwdXQgZmlyc3QgdG8gZmlsbCBvbmUgY2FjaGUgbGluZSAqL1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMTM4OC1cXG5pbmNsdWRlL25ldC90Y3AuaDoxMzg5OmludCB0Y3BfcmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnR5cGUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjEzOTA6dm9pZCB0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MTM5MTppbnQgdGNwX3VwZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdHlwZSxcXG5pbmNsdWRlL25ldC90Y3AuaDoxMzkyOlxcdFxcdFxcdFxcdCAgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqb2xkX3R5cGUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjEzOTM6aW50IHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTEzOTQtXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0xNDEwPXZvaWQgdGNwX3Jlbm9fY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZCk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MTQxMTpleHRlcm4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfcmVubztcXG5pbmNsdWRlL25ldC90Y3AuaC0xNDEyLVxcbmluY2x1ZGUvbmV0L3RjcC5oOjE0MTM6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MTQxNDpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2FfZmluZF9rZXkodTMyIGtleSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtMTQxNS11MzIgdGNwX2NhX2dldF9rZXlfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLCBib29sICplY25fY2EpO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9MTcxNj1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvdGNwLmgtMTcxNy17XFxuaW5jbHVkZS9uZXQvdGNwLmg6MTcxODpcXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktXFx1MDAzZWljc2tfY2Ffb3BzO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MTktXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTE5ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjA3LS8qIFxcXCJjb25zdCB2b2lkICpcXFwiIGJlY2F1c2Ugc29tZSBzdWJzeXN0ZW0gaXNcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwODogKiBwYXNzaW5nIGEgY29uc3QgKGUuZy4gY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqKVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjA5LSAqL1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTE1Mj1icGZfdGNwX2NhX2dldF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCxcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xNjktXFx0XFx0aWYgKHByb2dfb3BzX21vZmYocHJvZykgIT1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTcwOlxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCByZWxlYXNlKSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTcxLVxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX3NldHNvY2tvcHRfbm9kZWxheV9wcm90bztcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0xODAtXFx0XFx0aWYgKHByb2dfb3BzX21vZmYocHJvZykgIT1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MTgxOlxcdFxcdCAgICBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCByZWxlYXNlKSlcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMTgyLVxcdFxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX2dldHNvY2tvcHRfcHJvdG87XFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM9MjEwPXN0YXRpYyBpbnQgYnBmX3RjcF9jYV9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjEzLXtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6MjE0OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnV0Y3BfY2E7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIxNTpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2E7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIxNi1cXHR1MzIgbW9mZjtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjE3LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMTg6XFx0dXRjcF9jYSA9IChjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICopdWRhdGE7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIxOTpcXHR0Y3BfY2EgPSAoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqKWtkYXRhO1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjAtXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMjIyLVxcdHN3aXRjaCAobW9mZikge1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMjM6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCBmbGFncyk6XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyNC1cXHRcXHRpZiAodXRjcF9jYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+VENQX0NPTkdfTUFTSylcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjctXFx0XFx0cmV0dXJuIDE7XFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjIyODpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMsIG5hbWUpOlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMjktXFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVxcdTAwM2VuYW1lLCB1dGNwX2NhLVxcdTAwM2VuYW1lLFxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTMxMT1zdGF0aWMgdm9pZCBfX2JwZl90Y3BfY2FfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzE0LVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzozMTU6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgX19icGZfb3BzX3RjcF9jb25nZXN0aW9uX29wcyA9IHtcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtMzE2LVxcdC5zc3RocmVzaCA9IGJwZl90Y3BfY2Ffc3N0aHJlc2gsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0yMDk9aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjEzLXtcXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMTQ6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzO1xcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxNS1cXHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmhhbmRsZXI7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NDgyPWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ1NTYtXFx0Y2FzZSBUQ1BfQ0NfSU5GTzoge1xcbm5ldC9pcHY0L3RjcC5jOjQ1NTc6XFx0XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzO1xcbm5ldC9pcHY0L3RjcC5jLTQ1NTgtXFx0XFx0dW5pb24gdGNwX2NjX2luZm8gaW5mbztcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTUxNzA9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2Fib3J0KTtcXG5uZXQvaXB2NC90Y3AuYy01MTcxLVxcbm5ldC9pcHY0L3RjcC5jOjUxNzI6ZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm87XFxubmV0L2lwdjQvdGNwLmMtNTE3My1cXG4tLVxcbm5ldC9pcHY0L3RjcF9iYnIuYz0xMTMwPV9fYnBmX2tmdW5jIHN0YXRpYyB2b2lkIGJicl9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmJyLmMtMTE0My1cXG5uZXQvaXB2NC90Y3BfYmJyLmM6MTE0NDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfYmJyX2Nvbmdfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX2Jici5jLTExNDUtXFx0LmZsYWdzXFx0XFx0PSBUQ1BfQ09OR19OT05fUkVTVFJJQ1RFRCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9iaWMuYz0xOTA9c3RhdGljIHZvaWQgYmljdGNwX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9iaWMuYy0yMDEtXFxubmV0L2lwdjQvdGNwX2JpYy5jOjIwMjpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBiaWN0Y3AgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfYmljLmMtMjAzLVxcdC5pbml0XFx0XFx0PSBiaWN0Y3BfaW5pdCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9jZGcuYz0zODc9c3RhdGljIHZvaWQgdGNwX2NkZ19yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9jZGcuYy0zOTQtXFxubmV0L2lwdjQvdGNwX2NkZy5jOjM5NTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfY2RnIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX2NkZy5jLTM5Ni1cXHQuY29uZ19hdm9pZCA9IHRjcF9jZGdfY29uZ19hdm9pZCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjM9c3RhdGljIExJU1RfSEVBRCh0Y3BfY29uZ19saXN0KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjUtLyogU2ltcGxlIGxpbmVhciBzZWFyY2gsIGRvbid0IGV4cGVjdCBtYW55IGVudHJpZXMhICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzoyNjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2FfZmluZChjb25zdCBjaGFyICpuYW1lKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjcte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6Mjg6XFx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqZTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTI5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0zOD12b2lkIHRjcF9zZXRfY2Ffc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1OCBjYV9zdGF0ZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtNDktLyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3UgbG9jayBoZWxkICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo1MDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmRfYXV0b2xvYWQoY29uc3QgY2hhciAqbmFtZSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTUxLXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjUyOlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhID0gdGNwX2NhX2ZpbmQobmFtZSk7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy01My1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtNjUtLyogU2ltcGxlIGxpbmVhciBzZWFyY2gsIG5vdCBtdWNoIGluIGhlcmUuICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo2NjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2FfZmluZF9rZXkodTMyIGtleSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTY3LXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjY4OlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmU7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy02OS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtNzctXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo3ODppbnQgdGNwX3ZhbGlkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTc5LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtOTItICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo5MzppbnQgdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTk0LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MTE2PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2wpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0xMjMtICovXFxubmV0L2lwdjQvdGNwX2NvbmcuYzoxMjQ6dm9pZCB0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0xMjUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0xMzk9RVhQT1JUX1NZTUJPTF9HUEwodGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMTQ1LSAqL1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MTQ2OmludCB0Y3BfdXBkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSwgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqb2xkX2NhKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMTQ3LXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjE0ODpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpleGlzdGluZztcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTE0OS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MTgxPXUzMiB0Y3BfY2FfZ2V0X2tleV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgKmVjbl9jYSlcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTE4Mi17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzoxODM6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy0xODQtXFx0dTMyIGtleSA9IFRDUF9DQV9VTlNQRUM7XFxuLS1cXG5uZXQvaXB2NC90Y3BfY29uZy5jPTE5OT1jaGFyICp0Y3BfY2FfZ2V0X25hbWVfYnlfa2V5KHUzMiBrZXksIGNoYXIgKmJ1ZmZlcilcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTIwMC17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzoyMDE6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yMDItXFx0Y2hhciAqcmV0ID0gTlVMTDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjE2PXZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yMTktXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjIwOlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjIxLVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0yNTA9c3RhdGljIHZvaWQgdGNwX3JlaW5pdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjUxOlxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNTIte1xcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0yODE9aW50IHRjcF9zZXRfZGVmYXVsdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjgyLXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjI4MzpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjI4NDpcXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpwcmV2O1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjg1LVxcdGludCByZXQ7XFxuLS1cXG5uZXQvaXB2NC90Y3BfY29uZy5jPTMxOT12b2lkIHRjcF9nZXRfYXZhaWxhYmxlX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICpidWYsIHNpemVfdCBtYXhsZW4pXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0zMjAte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MzIxOlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzIyLVxcdHNpemVfdCBvZmZzID0gMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MzM3PXZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUpXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0zMzgte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MzM5OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzQwLVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0zNDg9dm9pZCB0Y3BfZ2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IG1heGxlbilcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTM0OS17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzozNTA6XFx0c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy0zNTEtXFx0c2l6ZV90IG9mZnMgPSAwO1xcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0zNjk9aW50IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqdmFsKVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtMzcwLXtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjM3MTpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTM3Mi1cXHRjaGFyICpzYXZlZF9jbG9uZSwgKmNsb25lLCAqbmFtZTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9NDEyPWludCB0Y3Bfc2V0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgbG9hZCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmMtNDE1LVxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jOjQxNjpcXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTQxNy1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9NTI5PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yZW5vX3VuZG9fY3duZCk7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy01MzAtXFxubmV0L2lwdjQvdGNwX2NvbmcuYzo1MzE6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfcmVubyA9IHtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTUzMi1cXHQuZmxhZ3NcXHRcXHQ9IFRDUF9DT05HX05PTl9SRVNUUklDVEVELFxcbi0tXFxubmV0L2lwdjQvdGNwX2N1YmljLmM9NDQ5PV9fYnBmX2tmdW5jIHN0YXRpYyB2b2lkIGN1YmljdGNwX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGFja19zYW1wbGUgKnNhbXBsZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9jdWJpYy5jLTQ3NC1cXG5uZXQvaXB2NC90Y3BfY3ViaWMuYzo0NzU6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgY3ViaWN0Y3AgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfY3ViaWMuYy00NzYtXFx0LmluaXRcXHRcXHQ9IGN1YmljdGNwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYz03Nz1NT0RVTEVfUEFSTV9ERVNDKGRjdGNwX2FscGhhX29uX2luaXQsIFxcXCJwYXJhbWV0ZXIgZm9yIGluaXRpYWwgYWxwaGEgdmFsdWVcXFwiKTtcXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy03OC1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYzo3OTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBkY3RjcF9yZW5vO1xcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTgwLVxcbi0tXFxubmV0L2lwdjQvdGNwX2RjdGNwLmM9MjQ3PV9fYnBmX2tmdW5jIHN0YXRpYyB1MzIgZGN0Y3BfY3duZF91bmRvKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9kY3RjcC5jLTI1NC1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYzoyNTU6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGN0Y3AgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yNTYtXFx0LmluaXRcXHRcXHQ9IGRjdGNwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yNjktXFxubmV0L2lwdjQvdGNwX2RjdGNwLmM6MjcwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwX3Jlbm8gX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfZGN0Y3AuYy0yNzEtXFx0LnNzdGhyZXNoXFx0PSB0Y3BfcmVub19zc3RocmVzaCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYz0xNTE9c3RhdGljIHUzMiBoc3RjcF9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMtMTU5LVxcbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYzoxNjA6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2hpZ2hzcGVlZCBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYy0xNjEtXFx0LmluaXRcXHRcXHQ9IGhzdGNwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaHRjcC5jPTI2OD1zdGF0aWMgdm9pZCBodGNwX3N0YXRlKHN0cnVjdCBzb2NrICpzaywgdTggbmV3X3N0YXRlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2h0Y3AuYy0yODgtXFxubmV0L2lwdjQvdGNwX2h0Y3AuYzoyODk6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgaHRjcCBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF9odGNwLmMtMjkwLVxcdC5pbml0XFx0XFx0PSBodGNwX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaHlibGEuYz05MD1zdGF0aWMgdm9pZCBoeWJsYV9jb25nX2F2b2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywgdTMyIGFja2VkKVxcbi0tXFxubmV0L2lwdjQvdGNwX2h5YmxhLmMtMTY2LVxcbm5ldC9pcHY0L3RjcF9oeWJsYS5jOjE2NzpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfaHlibGEgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfaHlibGEuYy0xNjgtXFx0LmluaXRcXHRcXHQ9IGh5YmxhX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaWxsaW5vaXMuYz0zMDc9c3RhdGljIHNpemVfdCB0Y3BfaWxsaW5vaXNfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBleHQsIGludCAqYXR0cixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbGxpbm9pcy5jLTMyOS1cXG5uZXQvaXB2NC90Y3BfaWxsaW5vaXMuYzozMzA6c3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2lsbGlub2lzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX2lsbGlub2lzLmMtMzMxLVxcdC5pbml0XFx0XFx0PSB0Y3BfaWxsaW5vaXNfaW5pdCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTYwNT1zdGF0aWMgdm9pZCB0Y3Bfc25kYnVmX2V4cGFuZChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MDctXFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjA4OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19jYV9vcHM7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjA5LVxcdGludCBzbmRtZW0sIHBlcl9tc3M7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbHAuYz0yNzQ9c3RhdGljIHZvaWQgdGNwX2xwX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2xwLmMtMzI5LVxcbm5ldC9pcHY0L3RjcF9scC5jOjMzMDpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfbHAgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfbHAuYy0zMzEtXFx0LmluaXQgPSB0Y3BfbHBfaW5pdCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00OTc9dm9pZCB0Y3BfY2Ffb3BlbnJlcV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01MDMtXFx0aWYgKGNhX2tleSAhPSBUQ1BfQ0FfVU5TUEVDKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjUwNDpcXHRcXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTA1LVxcbi0tXFxubmV0L2lwdjQvdGNwX252LmM9NDUzPXN0YXRpYyBzaXplX3QgdGNwbnZfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbnYuYy00NjktXFxubmV0L2lwdjQvdGNwX252LmM6NDcwOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcG52IF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX252LmMtNDcxLVxcdC5pbml0XFx0XFx0PSB0Y3Budl9pbml0LFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIxNTY9c3RhdGljIHZvaWQgdGNwX2N3bmRfdmFsaWRhdGUoc3RydWN0IHNvY2sgKnNrLCBib29sIGlzX2N3bmRfbGltaXRlZClcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjE1Ny17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIxNTg6XFx0Y29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2Ffb3BzID0gaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2NhX29wcztcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjE1OS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMjc2PXN0YXRpYyB1MzIgdGNwX3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1zc19ub3cpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNzcte1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMjc4OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcyA9IGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19jYV9vcHM7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIyNzktXFx0dTMyIG1pbl90c28sIHRzb19zZWdzO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQwODE9c3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQwODMtXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MDg0OlxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MDg1LVxcdHUzMiBjYV9rZXkgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9DQ19BTEdPKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jPTM0PXN0YXRpYyB1MzIgdGNwX3NjYWxhYmxlX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jLTQwLVxcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jOjQxOnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9zY2FsYWJsZSBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF9zY2FsYWJsZS5jLTQyLVxcdC5zc3RocmVzaFxcdD0gdGNwX3NjYWxhYmxlX3NzdGhyZXNoLFxcbi0tXFxubmV0L2lwdjQvdGNwX3ZlZ2FzLmM9MzEzPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF92ZWdhc19nZXRfaW5mbyk7XFxubmV0L2lwdjQvdGNwX3ZlZ2FzLmMtMzE0LVxcbm5ldC9pcHY0L3RjcF92ZWdhcy5jOjMxNTpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfdmVnYXMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvaXB2NC90Y3BfdmVnYXMuYy0zMTYtXFx0LmluaXRcXHRcXHQ9IHRjcF92ZWdhc19pbml0LFxcbi0tXFxubmV0L2lwdjQvdGNwX3Zlbm8uYz0yMDA9c3RhdGljIHUzMiB0Y3BfdmVub19zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfdmVuby5jLTIxMi1cXG5uZXQvaXB2NC90Y3BfdmVuby5jOjIxMzpzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfdmVubyBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF92ZW5vLmMtMjE0LVxcdC5pbml0XFx0XFx0PSB0Y3BfdmVub19pbml0LFxcbi0tXFxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmM9MjYyPXN0YXRpYyBzaXplX3QgdGNwX3dlc3R3b29kX2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBpbnQgKmF0dHIsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfd2VzdHdvb2QuYy0yNzgtXFxubmV0L2lwdjQvdGNwX3dlc3R3b29kLmM6Mjc5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF93ZXN0d29vZCBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9pcHY0L3RjcF93ZXN0d29vZC5jLTI4MC1cXHQuaW5pdFxcdFxcdD0gdGNwX3dlc3R3b29kX2luaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfeWVhaC5jPTE4OD1zdGF0aWMgdTMyIHRjcF95ZWFoX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF95ZWFoLmMtMjA4LVxcbm5ldC9pcHY0L3RjcF95ZWFoLmM6MjA5OnN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF95ZWFoIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L2lwdjQvdGNwX3llYWguYy0yMTAtXFx0LmluaXRcXHRcXHQ9IHRjcF95ZWFoX2luaXQsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTUyND1zdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy01MjYtXFx0X191MzIgKmtlcm5fZnVuY19vZmY7XFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1Mjc6XFx0LyogZS5nLiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGluIGJwZl9wcm9nJ3MgYnRmIGZvcm1hdCAqL1xcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTI4LVxcdHZvaWQgKmRhdGE7XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUzMi1cXHQgKlxcdFsuLi4gc29tZSBvdGhlciBrZXJuZWwgZmllbGRzIC4uLl1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjUzMzpcXHQgKlxcdHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGF0YTtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTUzNC1cXHQgKiB9XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTEwNDY9ZmluZF9zdHJ1Y3Rfb3BzX2tlcm5fdHlwZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdG5hbWVfcmF3LFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDgyLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTA4MzpcXHQvKiBGaW5kIFxcXCJzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzXFxcIiBmcm9tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDg0LVxcdCAqIHN0cnVjdCBicGZfc3RydWN0X29wc190Y3BfY29uZ2VzdGlvbl9vcHMge1xcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTA4NS1cXHQgKlxcdFsgLi4uIF1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjEwODY6XFx0ICpcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRhdGE7XFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xMDg3LVxcdCAqIH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY2NfY3ViaWMuYy01LSAqICAgIGlzIHRoYXQgdGhpcyBicGYgcHJvZ3JhbSByZWxpZXMgb24gYGNvbmdfY29udHJvbGAgcmF0aGVyIHRoYW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2NjX2N1YmljLmM6NjogKiAgICBgY29uZ19hdm9pZGAgaW4gdGhlIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9jY19jdWJpYy5jLTctICogMi4gTG9naWMgc3VjaCBhcyB0Y3BfY3duZF9yZWR1Y3Rpb24sIHRjcF9jb25nX2F2b2lkLCBhbmRcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY2NfY3ViaWMuYz0xNjg9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9jY19jdWJpYy5jOjE2OTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNjX2N1YmljID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY2NfY3ViaWMuYy0xNzAtXFx0LmluaXRcXHRcXHQ9ICh2b2lkICopYnBmX2N1YmljX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2N1YmljLmM9NTQ0PVNFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfY3ViaWMuYzo1NDU6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBjdWJpYyA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2N1YmljLmMtNTQ2LVxcdC5pbml0XFx0XFx0PSAodm9pZCAqKWJwZl9jdWJpY19pbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jPTIzOT1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwLmM6MjQwOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgZGN0Y3Bfbm91c2UgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jLTI0MS1cXHQuaW5pdFxcdFxcdD0gKHZvaWQgKilicGZfZGN0Y3BfaW5pdCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZGN0Y3AuYz0yNDc9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9kY3RjcC5jOjI0ODpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZGN0Y3AuYy0yNDktXFx0LmluaXRcXHRcXHQ9ICh2b2lkICopYnBmX2RjdGNwX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYz0xOD1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYzoxOTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGRjdGNwX3JlbCA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2RjdGNwX3JlbGVhc2UuYy0yMC1cXHQucmVsZWFzZVxcdD0gKHZvaWQgKilkY3RjcF9ub3VzZV9yZWxlYXNlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl90Y3Bfbm9ncGwuYz0xMz1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3RjcF9ub2dwbC5jOjE0OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgYnBmX25vZ3BsdGNwID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfdGNwX25vZ3BsLmMtMTUtXFx0LmluaXQgICAgICAgICAgID0gKHZvaWQgKilub2dwbHRjcF9pbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmM9MjE9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9pbmNvbXBsX2Nvbmdfb3BzLmM6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBpbmNvbXBsX2Nvbmdfb3BzID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfaW5jb21wbF9jb25nX29wcy5jLTIzLVxcdC8qIEludGVudGlvbmFsbHkgbGVhdmluZyBvdXQgYW55IG9mIHRoZSByZXF1aXJlZCBjb25nX2F2b2lkKCkgYW5kXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX2tmdW5jLmM9MTEyPVNFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffa2Z1bmMuYzoxMTM6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfY2Ffa2Z1bmMgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV9rZnVuYy5jLTExNC1cXHQuaW5pdFxcdFxcdD0gKHZvaWQgKilpbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91bnN1cHBfY29uZ19vcC5jPTE3PVNFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW5zdXBwX2Nvbmdfb3AuYzoxODpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHVuc3VwcF9jb25nX29wID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW5zdXBwX2Nvbmdfb3AuYy0xOS1cXHQuZ2V0X2luZm8gPSAodm9pZCAqKXVuc3VwcF9jb25nX29wX2dldF9pbmZvLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91bnRydXN0ZWRfYnRmX3dyaXRlLmM9MjI9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91bnRydXN0ZWRfYnRmX3dyaXRlLmM6MjM6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB1bnRydXN0ZWRfYnRmX3dyaXRlID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdW50cnVzdGVkX2J0Zl93cml0ZS5jLTI0LVxcdC5pbml0ID0gKHZvaWQgKil1bnRydXN0ZWRfYnRmX3dyaXRlX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jPTQyPVNFQyhcXFwiLnN0cnVjdF9vcHMubGlua1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo0MzpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX3VwZGF0ZV8xID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmMtNDQtXFx0LmluaXQgPSAodm9pZCAqKWNhX3VwZGF0ZV8xX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jPTUxPVNFQyhcXFwiLnN0cnVjdF9vcHMubGlua1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo1MjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX3VwZGF0ZV8yID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmMtNTMtXFx0LmluaXQgPSAodm9pZCAqKWNhX3VwZGF0ZV8yX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3VwZGF0ZS5jPTYwPVNFQyhcXFwiLnN0cnVjdF9vcHMubGlua1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo2MTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX3dyb25nID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmMtNjItXFx0LmNvbmdfY29udHJvbCA9ICh2b2lkICopY2FfdXBkYXRlX2NvbmdfY29udHJvbCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2FfdXBkYXRlLmM9Njg9U0VDKFxcXCIuc3RydWN0X29wc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYzo2OTpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIGNhX25vX2xpbmsgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV91cGRhdGUuYy03MC1cXHQuY29uZ19jb250cm9sID0gKHZvaWQgKiljYV91cGRhdGVfY29uZ19jb250cm9sLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RjcF9jYV93cml0ZV9za19wYWNpbmcuYz01Nj1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGNwX2NhX3dyaXRlX3NrX3BhY2luZy5jOjU3OnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgd3JpdGVfc2tfcGFjaW5nID0ge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90Y3BfY2Ffd3JpdGVfc2tfcGFjaW5nLmMtNTgtXFx0LmluaXQgPSAodm9pZCAqKXdyaXRlX3NrX3BhY2luZ19pbml0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L25vbl9zY3hfa2Z1bmNfZGVueS5icGYuYz0zMT1TRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbm9uX3NjeF9rZnVuY19kZW55LmJwZi5jOjMyOnN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX25vbl9zY3hfY2EgPSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L25vbl9zY3hfa2Z1bmNfZGVueS5icGYuYy0zMy1cXHQuc3N0aHJlc2ggICA9ICh2b2lkICopdGNwX2NhX3NzdGhyZXNoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMjoyNi40NDg0MTk3OThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1MzE5NjE0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBCUEYtUmVnaXN0ZXJlZCBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgaW4gYG5ldC9pcHY0L2JwZl90Y3BfY2EuY2AgYW5kIHNvbWV0aGluZydzIGNhdGNoaW5nIG15IGF0dGVudGlvbi4gQlBGIGNhbiByZWdpc3RlciBgdGNwX2Nvbmdlc3Rpb25fb3BzYCwgd2hpY2ggaXMgY29vbCwgYnV0IEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBuYW1lIGlzIGhhbmRsZWQuIFRoZSBjb2RlIHVzZXMgYGJwZl9vYmpfbmFtZV9jcHlgIHRvIGNvcHkgdGhlIG5hbWUsIHdoaWNoIHNlZW1zIGZpbmUg4oCTIGl0IG51bGwtdGVybWluYXRlcywgc28gdGhhdCBwYXJ0J3MgY292ZXJlZC4gVGhlIEJQRiBpbmZyYXN0cnVjdHVyZSBhbGxvY2F0ZXMgdGhlIHJlc3Qgb2YgYHRjcF9jYWAsIGFuZCBnZW5lcmFsbHksIHRoYXQgbWVhbnMgemVyb2VkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZCBmb3IgYXZvaWRpbmcgZ2FyYmFnZSBkYXRhLlxuXG5CdXQgdGhlbiBJIHNlZSB0aGlzIHNuaXBwZXQ6XG5cbmBgYGNcblx0XHRjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O1xuLi4uXG5cdFx0cmN1X3JlYWRfbG9jaygpO1xuXHRcdGNhX29wcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzKTtcblx0XHRtZW1jcHkoY2FfbmFtZSwgY2Ffb3BzLVx1MDAzZW5hbWUsIHNpemVvZihjYV9uYW1lKSk7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cblx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgY2FfbmFtZSwgbGVuKSlcbmBgYFxuXG5BbmQgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBgbWVtY3B5YCBjb3BpZXMgKmV4YWN0bHkqIGBUQ1BfQ0FfTkFNRV9NQVhgIGJ5dGVzIGZyb20gYGNhX29wcy1cdTAwM2VuYW1lYCBpbnRvIGBjYV9uYW1lYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB3aGlsZSBgYnBmX29ial9uYW1lX2NweWAgZW5zdXJlcyB0aGF0IHRoZSBuYW1lIGlzIG51bGwtdGVybWluYXRlZCwgaXQgKmRvZXNuJ3QqIHplcm8gb3V0IGFueSB0cmFpbGluZyBieXRlcyBpbiB0aGUgYG5hbWVgIGZpZWxkIG9mIHRoZSBgdGNwX2Nvbmdlc3Rpb25fb3BzYCBzdHJ1Y3R1cmUuIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgbmFtZSBpc24ndCBhIGZ1bGwgYFRDUF9DQV9OQU1FX01BWGAgY2hhcmFjdGVycyBsb25nLCB0aGVuIHRoZXJlJ3MgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFmdGVyKiB0aGUgbnVsbCB0ZXJtaW5hdG9yLlxuXG5TbywgaWYgYGNhX29wcy1cdTAwM2VuYW1lYCAqZG9lcyogaGF2ZSB1bmluaXRpYWxpemVkIGJ5dGVzICphZnRlciogdGhlIG51bGwgdGVybWluYXRvciwgdGhvc2UgdW5pbml0aWFsaXplZCBieXRlcyBhcmUgY29waWVkIHRvIGBjYV9uYW1lYC4gVGhlbiwgdGhvc2UgYnl0ZXMgaW4gYGNhX25hbWVgIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBgY29weV90b19zb2NrcHRyYC4gVGhhdCdzIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWssIGlzbid0IGl0PyBUaGF0IGNhbid0IGJlIGdvb2QuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyAqYWN0dWFsbHkqIGEgcHJvYmxlbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGNhX29wcy1cdTAwM2VuYW1lYCBjYW4gYWN0dWFsbHkgKmhhdmUqIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFNwZWNpZmljYWxseSwgYGNhX29wcy1cdTAwM2VuYW1lYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgYGNoYXIgbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdYCBpbnNpZGUgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLlxuXG5Gb3IgYnVpbHQtaW4gY29uZ2VzdGlvbiBjb250cm9scywgc3RhdGljYWxseSBhbGxvY2F0ZWQsIHRob3NlIHdpbGwgYmUgemVyby1pbml0aWFsaXplZC4gQnV0IHdoYXQgYWJvdXQgQlBGIGNvbmdlc3Rpb24gY29udHJvbHM/IEkgbmVlZCB0byBnbyBsb29rIGFuZCBzZWUgaG93IEJQRiBhbGxvY2F0ZXMgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLiBUaGF0J3MgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MjksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6MzYuOTgwMzg1MDE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMxNDQyOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9NzE0PXN0YXRpYyB2b2lkIGJwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlX2tzeW1zKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKnN0X21hcClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MjUtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjcyNjpzdGF0aWMgbG9uZyBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy03MjctXFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMTk0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBicGZfc3RydWN0X29wc19tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEyMDAtXFx0Lm1hcF9kZWxldGVfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTIwMTpcXHQubWFwX3VwZGF0ZV9lbGVtID0gYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMjAyLVxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGJwZl9zdHJ1Y3Rfb3BzX21hcF9zZXFfc2hvd19lbGVtLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMjo0MS40MTE4MzU5NjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MjMxMjA2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYC4gTGV0J3MgZ2V0IHJpZ2h0IGludG8gdGhpcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHNwZWNpZmljYWxseSBpcyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgbWlnaHQgbHVyayB3aXRoaW4gaXRzIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHN1YnRsZSBnb3RjaGFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxvY2tpbmcsIGFuZCBjb25jdXJyZW5jeSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gZGF0YSByYWNlcyBvciBtZW1vcnkgY29ycnVwdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBpdCdzIGRlYWxpbmcgd2l0aCB1cGRhdGluZyBlbGVtZW50cyB3aXRoaW4gYSBCUEYgbWFwLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgcmVhZC93cml0ZSBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBJcyBpdCBoYW5kbGluZyBlcnJvcnMgZ3JhY2VmdWxseT8gQXJlIHRoZXJlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbGlrZSBpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHRoYXQgbmVlZCB0byBiZSBjYXJlZnVsbHkgY29uc2lkZXJlZD8gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGRvaW5nIGEgbG90IG9mIHBvaW50ZXIganVnZ2xpbmcgYW5kIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6NTIuMzM0OTY2MjEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI2OlxcdHN0YXRpYyBsb25nIGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIDcyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbiA3Mjg6XFx0e1xcbiA3Mjk6XFx0XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XFxuIDczMDpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MgPSBzdF9tYXAtXFx1MDAzZXN0X29wc19kZXNjO1xcbiA3MzE6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHMgPSBzdF9vcHNfZGVzYy1cXHUwMDNlc3Rfb3BzO1xcbiA3MzI6XFx0XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX3ZhbHVlICp1dmFsdWUsICprdmFsdWU7XFxuIDczMzpcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1vZHVsZV90eXBlO1xcbiA3MzQ6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcXG4gNzM1OlxcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCA9IHN0X29wc19kZXNjLVxcdTAwM2V0eXBlO1xcbiA3MzY6XFx0XFx0c3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzO1xcbiA3Mzc6XFx0XFx0dm9pZCAqdWRhdGEsICprZGF0YTtcXG4gNzM4OlxcdFxcdGludCBwcm9nX2ZkLCBlcnI7XFxuIDczOTpcXHRcXHR1MzIgaSwgdHJhbXBvbGluZV9zdGFydCwgaW1hZ2Vfb2ZmID0gMDtcXG4gNzQwOlxcdFxcdHZvaWQgKmN1cl9pbWFnZSA9IE5VTEwsICppbWFnZSA9IE5VTEw7XFxuIDc0MTpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmsgKipwbGluaztcXG4gNzQyOlxcdFxcdHN0cnVjdCBicGZfa3N5bSAqKnBrc3ltO1xcbiA3NDM6XFx0XFx0Y29uc3QgY2hhciAqdG5hbWUsICptbmFtZTtcXG4gNzQ0OlxcdFxcbiA3NDU6XFx0XFx0aWYgKGZsYWdzKVxcbiA3NDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc0NzpcXHRcXG4gNzQ4OlxcdFxcdGlmICgqKHUzMiAqKWtleSAhPSAwKVxcbiA3NDk6XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0ZXJyID0gY2hlY2tfemVyb19ob2xlcyhzdF9tYXAtXFx1MDAzZWJ0Ziwgc3Rfb3BzX2Rlc2MtXFx1MDAzZXZhbHVlX3R5cGUsIHZhbHVlKTtcXG4gNzUyOlxcdFxcdGlmIChlcnIpXFxuIDc1MzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NTQ6XFx0XFxuIDc1NTpcXHRcXHR1dmFsdWUgPSB2YWx1ZTtcXG4gNzU2OlxcdFxcdGVyciA9IGNoZWNrX3plcm9faG9sZXMoc3RfbWFwLVxcdTAwM2VidGYsIHQsIHV2YWx1ZS1cXHUwMDNlZGF0YSk7XFxuIDc1NzpcXHRcXHRpZiAoZXJyKVxcbiA3NTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0XFx0aWYgKHV2YWx1ZS1cXHUwMDNlY29tbW9uLnN0YXRlIHx8IHJlZmNvdW50X3JlYWQoXFx1MDAyNnV2YWx1ZS1cXHUwMDNlY29tbW9uLnJlZmNudCkpXFxuIDc2MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0dG5vZGVzID0ga3phbGxvY19vYmpzKCp0bm9kZXMsIEJQRl9UUkFNUF9NQVgpO1xcbiA3NjQ6XFx0XFx0aWYgKCF0bm9kZXMpXFxuIDc2NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzY2OlxcdFxcbiA3Njc6XFx0XFx0dXZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKXN0X21hcC1cXHUwMDNldXZhbHVlO1xcbiA3Njg6XFx0XFx0a3ZhbHVlID0gKHN0cnVjdCBicGZfc3RydWN0X29wc192YWx1ZSAqKVxcdTAwMjZzdF9tYXAtXFx1MDAzZWt2YWx1ZTtcXG4gNzY5OlxcdFxcbiA3NzA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c3RfbWFwLVxcdTAwM2Vsb2NrKTtcXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0aWYgKGt2YWx1ZS1cXHUwMDNlY29tbW9uLnN0YXRlICE9IEJQRl9TVFJVQ1RfT1BTX1NUQVRFX0lOSVQpIHtcXG4gNzczOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4gNzc0OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiA3NzU6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMjo1Mi4zMzUyMDEzNzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1MzcwNzI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYGJwZl9zdHJ1Y3Rfb3BzX21hcF91cGRhdGVfZWxlbWAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBkZXRhaWxzIG9uIGBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW1gLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHVwZGF0aW5nIGVsZW1lbnRzIHdpdGhpbiBzdHJ1Y3QtYmFzZWQgQlBGIG1hcHMuIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgd2hlbiBtdWx0aXBsZSBCUEYgcHJvZ3JhbXMgYXJlIHRyeWluZyB0byBtb2RpZnkgdGhlIHNhbWUgc3RydWN0dXJlIHNpbXVsdGFuZW91c2x5LiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQsIGlmIGFueSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgQlBGIGV4ZWN1dGlvbiBtb2RlbC4gSSdsbCBhbHNvIGJlIGV4YW1pbmluZyBob3cgZXJyb3IgaGFuZGxpbmcgaXMgbWFuYWdlZCDigJMgcGFydGljdWxhcmx5IGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBhbmQgaW52YWxpZCBrZXkvdmFsdWUgY29tYmluYXRpb25zLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucyBidWlsdCBpbnRvIHRoZSB1cGRhdGUgcHJvY2Vzcz8gQXJlIHRoZXJlIGFueSBub3RhYmxlIGRpZmZlcmVuY2VzIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGJlaGF2ZXMgY29tcGFyZWQgdG8gYGJwZl9tYXBfdXBkYXRlX2VsZW1gIGZvciBvdGhlciBtYXAgdHlwZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBkYXRhIGNvbnNpc3RlbmN5IHdpdGhpbiBhIEJQRi1kcml2ZW4gc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI3NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6NTkuNDg4OTEyNTg3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzc2OlxcdFxcbiA3Nzc6XFx0XFx0bWVtY3B5KHV2YWx1ZSwgdmFsdWUsIG1hcC1cXHUwMDNldmFsdWVfc2l6ZSk7XFxuIDc3ODpcXHRcXG4gNzc5OlxcdFxcdHVkYXRhID0gXFx1MDAyNnV2YWx1ZS1cXHUwMDNlZGF0YTtcXG4gNzgwOlxcdFxcdGtkYXRhID0gXFx1MDAyNmt2YWx1ZS1cXHUwMDNlZGF0YTtcXG4gNzgxOlxcdFxcbiA3ODI6XFx0XFx0cGxpbmsgPSBzdF9tYXAtXFx1MDAzZWxpbmtzO1xcbiA3ODM6XFx0XFx0cGtzeW0gPSBzdF9tYXAtXFx1MDAzZWtzeW1zO1xcbiA3ODQ6XFx0XFx0dG5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc3RfbWFwLVxcdTAwM2VidGYsIHQtXFx1MDAzZW5hbWVfb2ZmKTtcXG4gNzg1OlxcdFxcdG1vZHVsZV90eXBlID0gYnRmX3R5cGVfYnlfaWQoYnRmX3ZtbGludXgsIHN0X29wc19pZHNbSURYX01PRFVMRV9JRF0pO1xcbiA3ODY6XFx0XFx0Zm9yX2VhY2hfbWVtYmVyKGksIHQsIG1lbWJlcikge1xcbiA3ODc6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICptdHlwZSwgKnB0eXBlO1xcbiA3ODg6XFx0XFx0XFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xcbiA3ODk6XFx0XFx0XFx0c3RydWN0IGJwZl90cmFtcF9saW5rICpsaW5rO1xcbiA3OTA6XFx0XFx0XFx0c3RydWN0IGJwZl9rc3ltICprc3ltO1xcbiA3OTE6XFx0XFx0XFx0dTMyIG1vZmY7XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdFxcdG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcXG4gNzk0OlxcdFxcdFxcdG1uYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KHN0X21hcC1cXHUwMDNlYnRmLCBtZW1iZXItXFx1MDAzZW5hbWVfb2ZmKTtcXG4gNzk1OlxcdFxcdFxcdHB0eXBlID0gYnRmX3R5cGVfcmVzb2x2ZV9wdHIoc3RfbWFwLVxcdTAwM2VidGYsIG1lbWJlci1cXHUwMDNldHlwZSwgTlVMTCk7XFxuIDc5NjpcXHRcXHRcXHRpZiAocHR5cGUgPT0gbW9kdWxlX3R5cGUpIHtcXG4gNzk3OlxcdFxcdFxcdFxcdGlmICgqKHZvaWQgKiopKHVkYXRhICsgbW9mZikpXFxuIDc5ODpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc2V0X3VubG9jaztcXG4gNzk5OlxcdFxcdFxcdFxcdCoodm9pZCAqKikoa2RhdGEgKyBtb2ZmKSA9IEJQRl9NT0RVTEVfT1dORVI7XFxuIDgwMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODAxOlxcdFxcdFxcdH1cXG4gODAyOlxcdFxcbiA4MDM6XFx0XFx0XFx0ZXJyID0gc3Rfb3BzLVxcdTAwM2Vpbml0X21lbWJlcih0LCBtZW1iZXIsIGtkYXRhLCB1ZGF0YSk7XFxuIDgwNDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gODA1OlxcdFxcdFxcdFxcdGdvdG8gcmVzZXRfdW5sb2NrO1xcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHRcXHQvKiBUaGUgLVxcdTAwM2Vpbml0X21lbWJlcigpIGhhcyBoYW5kbGVkIHRoaXMgbWVtYmVyICovXFxuIDgwODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2UgMClcXG4gODA5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRcXHQvKiBJZiBzdF9vcHMtXFx1MDAzZWluaXRfbWVtYmVyIGRvZXMgbm90IGhhbmRsZSBpdCxcXG4gODEyOlxcdFxcdFxcdCAqIHdlIHdpbGwgb25seSBoYW5kbGUgZnVuYyBwdHJzIGFuZCB6ZXJvLWVkIG1lbWJlcnNcXG4gODEzOlxcdFxcdFxcdCAqIGhlcmUuICBSZWplY3QgZXZlcnl0aGluZyBlbHNlLlxcbiA4MTQ6XFx0XFx0XFx0ICovXFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdFxcdC8qIEFsbCBub24gZnVuYyBwdHIgbWVtYmVyIG11c3QgYmUgMCAqL1xcbiA4MTc6XFx0XFx0XFx0aWYgKCFwdHlwZSB8fCAhYnRmX3R5cGVfaXNfZnVuY19wcm90byhwdHlwZSkpIHtcXG4gODE4OlxcdFxcdFxcdFxcdHUzMiBtc2l6ZTtcXG4gODE5OlxcdFxcbiA4MjA6XFx0XFx0XFx0XFx0bXR5cGUgPSBidGZfdHlwZV9ieV9pZChzdF9tYXAtXFx1MDAzZWJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlKTtcXG4gODIxOlxcdFxcdFxcdFxcdG10eXBlID0gYnRmX3Jlc29sdmVfc2l6ZShzdF9tYXAtXFx1MDAzZWJ0ZiwgbXR5cGUsIFxcdTAwMjZtc2l6ZSk7XFxuIDgyMjpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKG10eXBlKSkge1xcbiA4MjM6XFx0XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihtdHlwZSk7XFxuIDgyNDpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc2V0X3VubG9jaztcXG4gODI1OlxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDI6NTkuNDg5MTUxMjE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODQ3MzgwNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIERhdGEgRmxvdyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGF0YSBmbG93IGJldHRlci4gSXQgbG9va3MgbGlrZSBga2RhdGFgIGlzIGdldHRpbmcgaXRzIGluaXRpYWwgdmFsdWUgZGlyZWN0bHkgZnJvbSBga3ZhbHVlLVx1MDAzZWRhdGFgLiBBbmQgYGt2YWx1ZWAsIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBpcyBhIGNvbXBvbmVudCBvZiB0aGlzIGBzdF9tYXBgIHN0cnVjdHVyZS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgc29tZSBxdWVzdGlvbnMgYWJvdXQgb3duZXJzaGlwIGFuZCBsaWZlY3ljbGUuIEkgbmVlZCB0byBiYWNrIHVwIGEgbGV2ZWwgaGVyZS4gTGV0IG1lIHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIGBzdF9tYXBgLiBXaGVyZSBpcyB0aGlzIHRoaW5nIGJlaW5nIGNyZWF0ZWQgYW5kIGhvdyBpcyBpdCBiZWluZyBwb3B1bGF0ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHRvIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IHBvc3NpYmxlIGlzc3VlcyB3aXRoIG1lbW9yeSwgZGF0YSBjb25zaXN0ZW5jeSwgb3IgZXZlbiBjb25jdXJyZW5jeS4gUmlnaHQgbm93LCB0aGlzIGNvbm5lY3Rpb24gaXMgYSBsaXR0bGUgdG9vIG9wYXF1ZSBmb3IgbXkgbGlraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyMywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDM6MTUuMzM2NTM1NjU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDIxMzYxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTAyNz1zdGF0aWMgdm9pZCBicGZfc3RydWN0X29wc19tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjEtXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjEwNjI6c3RhdGljIGludCBicGZfc3RydWN0X29wc19tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTEwNjMte1xcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTEwNzE9c3RhdGljIHUzMiBjb3VudF9mdW5jX3B0cnMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4My1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTA4NDpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmJwZl9zdHJ1Y3Rfb3BzX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTA4NS17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MTE5ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYnBmX3N0cnVjdF9vcHNfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE5NTpcXHQubWFwX2FsbG9jX2NoZWNrID0gYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jX2NoZWNrLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTk2OlxcdC5tYXBfYWxsb2MgPSBicGZfc3RydWN0X29wc19tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExOTctXFx0Lm1hcF9mcmVlID0gYnBmX3N0cnVjdF9vcHNfbWFwX2ZyZWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjE5LjM1NzkwNjcxNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzk5NDc2MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBicGZfc3RydWN0X29wc19tYXBfYWxsb2NgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJyb2FkZXIgQlBGIGVjb3N5c3RlbSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIGN1c3RvbSBtYXAgdHlwZXMgYW5kIHN0cnVjdHVyZSBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgd2hldGhlciBpdCdzIGFkaGVyaW5nIHRvIHRoZSBleHBlY3RlZCBtZW1vcnkgbW9kZWwgd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgc3Vic3lzdGVtLiBJIHdhbnQgdG8gY29uZmlybSBpZiBpdCdzIHVzaW5nIHRoZSBzdGFuZGFyZCBga21hbGxvY2Agb3IsIHBlcmhhcHMsIGEgbW9yZSBvcHRpbWl6ZWQsIEJQRi1zcGVjaWZpYyBhbGxvY2F0b3IuIEkgbmVlZCB0byBlbnN1cmUgaXQgaW50ZWdyYXRlcyBzZWFtbGVzc2x5IHdpdGggYW55IGV4aXN0aW5nIG1hcCBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIEJQRiB2ZXJpZmllci4gQW55IHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbnQgYWNjZXNzIGlzc3VlcyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gYWxzbyBuZWVkcyB0byBiZSBvbiBteSByYWRhciwgZXNwZWNpYWxseSBpZiB0aGlzIG5ldyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgaGlnaC1mcmVxdWVuY3kgb3IgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciByZXNvdXJjZSBsaW1pdHMg4oCTIGRvZXMgdGhlIGFsbG9jYXRpb24gYWNjb3VudCBmb3IgcGVyLUJQRi1wcm9ncmFtIG1lbW9yeSBjYXBzIG9yIHRoZSBvdmVyYWxsIHN5c3RlbSBtZW1vcnk/IExldCdzIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgaG93IGl0IHdvcmtzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA3MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjI0Ljc1NzM4ODE0MloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODQ6XFx0c3RhdGljIHN0cnVjdCBicGZfbWFwICpicGZfc3RydWN0X29wc19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMTA4NTpcXHR7XFxuMTA4NjpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2M7XFxuMTA4NzpcXHRcXHRzaXplX3Qgc3RfbWFwX3NpemU7XFxuMTA4ODpcXHRcXHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfbWFwICpzdF9tYXA7XFxuMTA4OTpcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsICp2dDtcXG4xMDkwOlxcdFxcdHN0cnVjdCBtb2R1bGUgKm1vZCA9IE5VTEw7XFxuMTA5MTpcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbjEwOTI6XFx0XFx0c3RydWN0IGJ0ZiAqYnRmO1xcbjEwOTM6XFx0XFx0aW50IHJldDtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0aWYgKGF0dHItXFx1MDAzZW1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX1ZUWVBFX0JURl9PQkpfRkQpIHtcXG4xMDk2OlxcdFxcdFxcdC8qIFRoZSBtYXAgaG9sZHMgYnRmIGZvciBpdHMgd2hvbGUgbGlmZSB0aW1lLiAqL1xcbjEwOTc6XFx0XFx0XFx0YnRmID0gYnRmX2dldF9ieV9mZChhdHRyLVxcdTAwM2V2YWx1ZV90eXBlX2J0Zl9vYmpfZmQpO1xcbjEwOTg6XFx0XFx0XFx0aWYgKElTX0VSUihidGYpKVxcbjEwOTk6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGJ0Zik7XFxuMTEwMDpcXHRcXHRcXHRpZiAoIWJ0Zl9pc19tb2R1bGUoYnRmKSkge1xcbjExMDE6XFx0XFx0XFx0XFx0YnRmX3B1dChidGYpO1xcbjExMDI6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuMTEwMzpcXHRcXHRcXHR9XFxuMTEwNDpcXHRcXG4xMTA1OlxcdFxcdFxcdG1vZCA9IGJ0Zl90cnlfZ2V0X21vZHVsZShidGYpO1xcbjExMDY6XFx0XFx0XFx0LyogbW9kIGhvbGRzIGEgcmVmY250IHRvIGJ0Zi4gV2UgZG9uJ3QgbmVlZCBhbiBleHRyYSByZWZjbnRcXG4xMTA3OlxcdFxcdFxcdCAqIGhlcmUuXFxuMTEwODpcXHRcXHRcXHQgKi9cXG4xMTA5OlxcdFxcdFxcdGJ0Zl9wdXQoYnRmKTtcXG4xMTEwOlxcdFxcdFxcdGlmICghbW9kKVxcbjExMTE6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuMTExMjpcXHRcXHR9IGVsc2Uge1xcbjExMTM6XFx0XFx0XFx0YnRmID0gYnBmX2dldF9idGZfdm1saW51eCgpO1xcbjExMTQ6XFx0XFx0XFx0aWYgKElTX0VSUihidGYpKVxcbjExMTU6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGJ0Zik7XFxuMTExNjpcXHRcXHRcXHRpZiAoIWJ0ZilcXG4xMTE3OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7XFxuMTExODpcXHRcXHR9XFxuMTExOTpcXHRcXG4xMTIwOlxcdFxcdHN0X29wc19kZXNjID0gYnBmX3N0cnVjdF9vcHNfZmluZF92YWx1ZShidGYsIGF0dHItXFx1MDAzZWJ0Zl92bWxpbnV4X3ZhbHVlX3R5cGVfaWQpO1xcbjExMjE6XFx0XFx0aWYgKCFzdF9vcHNfZGVzYykge1xcbjExMjI6XFx0XFx0XFx0cmV0ID0gLUVOT1RTVVBQO1xcbjExMjM6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuMTEyNDpcXHRcXHR9XFxuMTEyNTpcXHRcXG4xMTI2OlxcdFxcdHZ0ID0gc3Rfb3BzX2Rlc2MtXFx1MDAzZXZhbHVlX3R5cGU7XFxuMTEyNzpcXHRcXHRpZiAoYXR0ci1cXHUwMDNldmFsdWVfc2l6ZSAhPSB2dC1cXHUwMDNlc2l6ZSkge1xcbjExMjg6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMTI5OlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbjExMzA6XFx0XFx0fVxcbjExMzE6XFx0XFxuMTEzMjpcXHRcXHR0ID0gc3Rfb3BzX2Rlc2MtXFx1MDAzZXR5cGU7XFxuMTEzMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDM6MjQuNzU3NjUyODYyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjQ4OTcyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jYC4gSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbiwgc28gbGV0J3Mgc3RhcnQgcmVhZGluZy4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHdoYXQgaXQgZG9lcywgYmVjYXVzZSBJIGtub3cgdGhhdCBtYXBzIGFyZSBmdW5kYW1lbnRhbCB0byBlQlBGJ3MgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRob3NlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZWRnZSBjYXNlcyBpdCBtaWdodCBoYW5kbGUsIGFueSBlcnJvciBjaGVja2luZyB0aGF0J3MgaW1wbGVtZW50ZWQsIGFuZCBvZiBjb3Vyc2UsIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGVCUEYgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGlzIGZvciBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjI5LjEyMjU1MzI2MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzQ6XFx0XFx0c3RfbWFwX3NpemUgPSBzaXplb2YoKnN0X21hcCkgK1xcbjExMzU6XFx0XFx0XFx0Lyoga3ZhbHVlIHN0b3JlcyB0aGVcXG4xMTM2OlxcdFxcdFxcdCAqIHN0cnVjdCBicGZfc3RydWN0X29wc190Y3BfY29uZ2VzdGlvbnNfb3BzXFxuMTEzNzpcXHRcXHRcXHQgKi9cXG4xMTM4OlxcdFxcdFxcdCh2dC1cXHUwMDNlc2l6ZSAtIHNpemVvZihzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfdmFsdWUpKTtcXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0c3RfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcF9zaXplLCBOVU1BX05PX05PREUpO1xcbjExNDE6XFx0XFx0aWYgKCFzdF9tYXApIHtcXG4xMTQyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTE0MzpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4xMTQ0OlxcdFxcdH1cXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0c3RfbWFwLVxcdTAwM2VzdF9vcHNfZGVzYyA9IHN0X29wc19kZXNjO1xcbjExNDc6XFx0XFx0bWFwID0gXFx1MDAyNnN0X21hcC1cXHUwMDNlbWFwO1xcbjExNDg6XFx0XFxuMTE0OTpcXHRcXHRzdF9tYXAtXFx1MDAzZXV2YWx1ZSA9IGJwZl9tYXBfYXJlYV9hbGxvYyh2dC1cXHUwMDNlc2l6ZSwgTlVNQV9OT19OT0RFKTtcXG4xMTUwOlxcdFxcdHN0X21hcC1cXHUwMDNlZnVuY3NfY250ID0gY291bnRfZnVuY19wdHJzKGJ0ZiwgdCk7XFxuMTE1MTpcXHRcXHRzdF9tYXAtXFx1MDAzZWxpbmtzID1cXG4xMTUyOlxcdFxcdFxcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2xpbmsgKiksXFxuMTE1MzpcXHRcXHRcXHRcXHRcXHQgICBOVU1BX05PX05PREUpO1xcbjExNTQ6XFx0XFxuMTE1NTpcXHRcXHRzdF9tYXAtXFx1MDAzZWtzeW1zID1cXG4xMTU2OlxcdFxcdFxcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2tzeW0gKiksXFxuMTE1NzpcXHRcXHRcXHRcXHRcXHQgICBOVU1BX05PX05PREUpO1xcbjExNTg6XFx0XFx0aWYgKCFzdF9tYXAtXFx1MDAzZXV2YWx1ZSB8fCAhc3RfbWFwLVxcdTAwM2VsaW5rcyB8fCAhc3RfbWFwLVxcdTAwM2Vrc3ltcykge1xcbjExNTk6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xMTYwOlxcdFxcdFxcdGdvdG8gZXJyb3V0X2ZyZWU7XFxuMTE2MTpcXHRcXHR9XFxuMTE2MjpcXHRcXHRzdF9tYXAtXFx1MDAzZWJ0ZiA9IGJ0ZjtcXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2c3RfbWFwLVxcdTAwM2Vsb2NrKTtcXG4xMTY1OlxcdFxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIobWFwLCBhdHRyKTtcXG4xMTY2OlxcdFxcbjExNjc6XFx0XFx0cmV0dXJuIG1hcDtcXG4xMTY4OlxcdFxcbjExNjk6XFx0ZXJyb3V0X2ZyZWU6XFxuMTE3MDpcXHRcXHRfX2JwZl9zdHJ1Y3Rfb3BzX21hcF9mcmVlKG1hcCk7XFxuMTE3MTpcXHRlcnJvdXQ6XFxuMTE3MjpcXHRcXHRtb2R1bGVfcHV0KG1vZCk7XFxuMTE3MzpcXHRcXG4xMTc0OlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuMTE3NTpcXHR9XFxuMTE3NjpcXHRcXG4xMTc3OlxcdHN0YXRpYyB1NjQgYnBmX3N0cnVjdF9vcHNfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbjExNzg6XFx0e1xcbjExNzk6XFx0XFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX21hcCAqc3RfbWFwID0gKHN0cnVjdCBicGZfc3RydWN0X29wc19tYXAgKiltYXA7XFxuMTE4MDpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MgPSBzdF9tYXAtXFx1MDAzZXN0X29wc19kZXNjO1xcbjExODE6XFx0XFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2dCA9IHN0X29wc19kZXNjLVxcdTAwM2V2YWx1ZV90eXBlO1xcbjExODI6XFx0XFx0dTY0IHVzYWdlO1xcbjExODM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjI5LjEyMjc1ODkzMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTYyMjU2MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTWVtb3J5IEFsbG9jYXRpb24gYW5kIFplcm9pbmc6IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBgYnBmX21hcF9hcmVhX2FsbG9jYCBpcyB0aGUgZnVuY3Rpb24gd2UncmUgdXNpbmcgdG8gYWxsb2NhdGUgbWVtb3J5IGhlcmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpczogZG9lcyB0aGlzIHRoaW5nIHplcm8gdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXM/IFdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgZGF0YSBhbmQgc3VidGxlIGJ1Z3MgYXJlIGEgcmVhbCBwYWluLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGF0IG1lbW9yeSBibG9jay4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGxvb2sgZm9yIHNvbWUgc29saWQgZG9jdW1lbnRhdGlvbiB0byB2ZXJpZnkgdGhpcyBiZWhhdmlvci4gQmVzdCBjYXNlIHNjZW5hcmlvLCBpdCdzIGV4cGxpY2l0bHkgemVyb2VkIGZvciBzZWN1cml0eSBhbmQgc3RhYmlsaXR5LiBXb3JzdCBjYXNlLCB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBpdCBvdXJzZWx2ZXMgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBsZWFrYWdlIG9yIHVuZGVmaW5lZCBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBMZXQncyBtYWtlIHN1cmUgYmVmb3JlIHdlIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxODcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjM0LjI4NTAxODU1MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzODU0OTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX2FyZWFfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0yNzY2PXZvaWQgYnBmX21hcF9wdXQoc3RydWN0IGJwZl9tYXAgKm1hcCk7XFxuaW5jbHVkZS9saW51eC9icGYuaDoyNzY3OnZvaWQgKmJwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzY4LXZvaWQgKmJwZl9tYXBfYXJlYV9tbWFwYWJsZV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI5OS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAwOlxcdGFyZW5hID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqYXJlbmEpLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDEtXFx0aWYgKCFhcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFycmF5X21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDEtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTQyOlxcdFxcdGFycmF5ID0gYnBmX21hcF9hcmVhX2FsbG9jKGFycmF5X3NpemUsIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0My1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2Jsb29tX2ZpbHRlci5jPTk5PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYmxvb21fbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xNDQtXFx0Yml0c2V0X2J5dGVzID0gQklUU19UT19MT05HUygodTY0KWJpdHNldF9tYXNrICsgMSkgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7XFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYzoxNDU6XFx0Ymxvb20gPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpibG9vbSkgKyBiaXRzZXRfYnl0ZXMsIG51bWFfbm9kZSk7XFxua2VybmVsL2JwZi9ibG9vbV9maWx0ZXIuYy0xNDYtXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pbnNuX2FycmF5LmM9NDQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICppbnNuX2FycmF5X2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTQ4LVxcbmtlcm5lbC9icGYvYnBmX2luc25fYXJyYXkuYzo0OTpcXHRpbnNuX2FycmF5ID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9icGZfaW5zbl9hcnJheS5jLTUwLVxcdGlmICghaW5zbl9hcnJheSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz03NzM9YnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTc4MC1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NzgxOlxcdHNtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpzbWFwKSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNzgyLVxcdGlmICghc21hcClcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYz0xMDg0PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYnBmX3N0cnVjdF9vcHNfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExMzktXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjExNDA6XFx0c3RfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHN0X21hcF9zaXplLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTQxLVxcdGlmICghc3RfbWFwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE0OC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MTE0OTpcXHRzdF9tYXAtXFx1MDAzZXV2YWx1ZSA9IGJwZl9tYXBfYXJlYV9hbGxvYyh2dC1cXHUwMDNlc2l6ZSwgTlVNQV9OT19OT0RFKTtcXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMTE1MC1cXHRzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCA9IGNvdW50X2Z1bmNfcHRycyhidGYsIHQpO1xcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTUxLVxcdHN0X21hcC1cXHUwMDNlbGlua3MgPVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTUyOlxcdFxcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2xpbmsgKiksXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTMtXFx0XFx0XFx0XFx0ICAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0xMTU1LVxcdHN0X21hcC1cXHUwMDNla3N5bXMgPVxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYzoxMTU2OlxcdFxcdGJwZl9tYXBfYXJlYV9hbGxvYyhzdF9tYXAtXFx1MDAzZWZ1bmNzX2NudCAqIHNpemVvZihzdHJ1Y3QgYnBmX2tzeW0gKiksXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTExNTctXFx0XFx0XFx0XFx0ICAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM9ODU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpjcHVfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy0xMDAtXFxua2VybmVsL2JwZi9jcHVtYXAuYzoxMDE6XFx0Y21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmNtYXApLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTAyLVxcdGlmICghY21hcClcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTA3LVxcdC8qIEFsbG9jIGFycmF5IGZvciBwb3NzaWJsZSByZW1vdGUgXFxcImRlc3RpbmF0aW9uXFxcIiBDUFVzICovXFxua2VybmVsL2JwZi9jcHVtYXAuYzoxMDg6XFx0Y21hcC1cXHUwMDNlY3B1X21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhjbWFwLVxcdTAwM2VtYXAubWF4X2VudHJpZXMgKlxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTA5LVxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3QgYnBmX2NwdV9tYXBfZW50cnkgKiksXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTkxPXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqZGV2X21hcF9jcmVhdGVfaGFzaCh1bnNpZ25lZCBpbnQgZW50cmllcyxcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtOTYtXFxua2VybmVsL2JwZi9kZXZtYXAuYzo5NzpcXHRoYXNoID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIGVudHJpZXMgKiBzaXplb2YoKmhhc2gpLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvZGV2bWFwLmMtOTgtXFx0aWYgKGhhc2ggIT0gTlVMTClcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmM9MTM2PXN0YXRpYyBpbnQgZGV2X21hcF9pbml0X21hcChzdHJ1Y3QgYnBmX2R0YWIgKmR0YWIsIHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9kZXZtYXAuYy0xNTMtXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjE1NDpcXHRcXHRkdGFiLVxcdTAwM2VuZXRkZXZfbWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpIGR0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyAqXFxua2VybmVsL2JwZi9kZXZtYXAuYy0xNTUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBicGZfZHRhYl9uZXRkZXYgKiksXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTE2ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmRldl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTE2OC1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjE2OTpcXHRkdGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqZHRhYiksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9kZXZtYXAuYy0xNzAtXFx0aWYgKCFkdGFiKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE5PXN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjYtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzI3OlxcdGh0YWItXFx1MDAzZWVsZW1zID0gYnBmX21hcF9hcmVhX2FsbG9jKCh1NjQpaHRhYi1cXHUwMDNlZWxlbV9zaXplICogbnVtX2VudHJpZXMsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzI4LVxcdFxcdFxcdFxcdFxcdCBodGFiLVxcdTAwM2VtYXAubnVtYV9ub2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTU0NT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTU4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjU1OTpcXHRodGFiID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqaHRhYiksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTYwLVxcdGlmICghaHRhYilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTYwMS1cXHRlcnIgPSAtRU5PTUVNO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjYwMjpcXHRodGFiLVxcdTAwM2VidWNrZXRzID0gYnBmX21hcF9hcmVhX2FsbG9jKGh0YWItXFx1MDAzZW5fYnVja2V0cyAqXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNjAzLVxcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3QgYnVja2V0KSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3OTQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzk5LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4MDA6XFx0cmh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpyaHRhYiksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgwMS1cXHRpZiAoIXJodGFiKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM9Mjk2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqY2dyb3VwX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzI2LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjMyNzpcXHRtYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwKSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjgtXFx0aWYgKCFtYXApXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9NTcxPXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqdHJpZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy01ODctXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjU4ODpcXHR0cmllID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqdHJpZSksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU4OS1cXHRpZiAoIXRyaWUpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz01MDM9c3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfb2ZmbG9hZF9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MTUtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6NTE2OlxcdG9mZm1hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKm9mZm1hcCksIE5VTUFfTk9fTk9ERSk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNTE3LVxcdGlmICghb2ZmbWFwKVxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9NjU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpxdWV1ZV9zdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy03My1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzo3NDpcXHRxcyA9IGJwZl9tYXBfYXJlYV9hbGxvYyhxdWV1ZV9zaXplLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTc1LVxcdGlmICghcXMpXFxuLS1cXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jPTE0OT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJldXNlcG9ydF9hcnJheV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvcmV1c2Vwb3J0X2FycmF5LmMtMTU0LVxcdC8qIGFsbG9jYXRlIGFsbCBtYXAgZWxlbWVudHMgYW5kIHplcm8taW5pdGlhbGl6ZSB0aGVtICovXFxua2VybmVsL2JwZi9yZXVzZXBvcnRfYXJyYXkuYzoxNTU6XFx0YXJyYXkgPSBicGZfbWFwX2FyZWFfYWxsb2Moc3RydWN0X3NpemUoYXJyYXksIHB0cnMsIGF0dHItXFx1MDAzZW1heF9lbnRyaWVzKSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL3JldXNlcG9ydF9hcnJheS5jLTE1Ni1cXHRpZiAoIWFycmF5KVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmM9OTM9c3RhdGljIHN0cnVjdCBicGZfcmluZ2J1ZiAqYnBmX3JpbmdidWZfYXJlYV9hbGxvYyhzaXplX3QgZGF0YV9zeiwgaW50IG51bWFfbm9kZSlcXG4tLVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTEyMi1cXHRhcnJheV9zaXplID0gKG5yX21ldGFfcGFnZXMgKyAyICogbnJfZGF0YV9wYWdlcykgKiBzaXplb2YoKnBhZ2VzKTtcXG5rZXJuZWwvYnBmL3JpbmdidWYuYzoxMjM6XFx0cGFnZXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoYXJyYXlfc2l6ZSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL3JpbmdidWYuYy0xMjQtXFx0aWYgKCFwYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTE5ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJpbmdidWZfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmMtMjEyLVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjIxMzpcXHRyYl9tYXAgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpyYl9tYXApLCBOVU1BX05PX05PREUpO1xcbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTIxNC1cXHRpZiAoIXJiX21hcClcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYz02OD1zdGF0aWMgaW50IHByZWFsbG9jX2VsZW1zX2FuZF9mcmVlbGlzdChzdHJ1Y3QgYnBmX3N0YWNrX21hcCAqc21hcClcXG4tLVxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03My1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM6NzQ6XFx0c21hcC1cXHUwMDNlZWxlbXMgPSBicGZfbWFwX2FyZWFfYWxsb2MoZWxlbV9zaXplICogc21hcC1cXHUwMDNlbWFwLm1heF9lbnRyaWVzLFxcbmtlcm5lbC9icGYvc3RhY2ttYXAuYy03NS1cXHRcXHRcXHRcXHRcXHQgc21hcC1cXHUwMDNlbWFwLm51bWFfbm9kZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmM9OTM9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTI1LVxcdGNvc3QgPSBuX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IHN0YWNrX21hcF9idWNrZXQgKikgKyBzaXplb2YoKnNtYXApO1xcbmtlcm5lbC9icGYvc3RhY2ttYXAuYzoxMjY6XFx0c21hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhjb3N0LCBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpKTtcXG5rZXJuZWwvYnBmL3N0YWNrbWFwLmMtMTI3LVxcdGlmICghc21hcClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTMwOD1zdGF0aWMgaW50IGJwZl9tYXBfY29weV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzcxLSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3MjpzdGF0aWMgdm9pZCAqX19icGZfbWFwX2FyZWFfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUsIGJvb2wgbW1hcGFibGUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzczLXtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQwOC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0MDk6dm9pZCAqYnBmX21hcF9hcmVhX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQxMC17XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDExOlxcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTItfVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDE0PXZvaWQgKmJwZl9tYXBfYXJlYV9tbWFwYWJsZV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTUte1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQxNjpcXHRyZXR1cm4gX19icGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlLCB0cnVlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00MTctfVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0zOT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnNvY2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00OS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjUwOlxcdHN0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpzdGFiKSwgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTUxLVxcdGlmICghc3RhYilcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzo1NzpcXHRzdGFiLVxcdTAwM2Vza3MgPSBicGZfbWFwX2FyZWFfYWxsb2MoKHU2NCkgc3RhYi1cXHUwMDNlbWFwLm1heF9lbnRyaWVzICpcXG5uZXQvY29yZS9zb2NrX21hcC5jLTU4LVxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHNvY2sgKiksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTEwOTg9c3RhdGljIHN0cnVjdCBicGZfbWFwICpzb2NrX2hhc2hfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTEtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMTEyOlxcdGh0YWIgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCpodGFiKSwgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMTMtXFx0aWYgKCFodGFiKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTI2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTEyNzpcXHRodGFiLVxcdTAwM2VidWNrZXRzID0gYnBmX21hcF9hcmVhX2FsbG9jKGh0YWItXFx1MDAzZWJ1Y2tldHNfbnVtICpcXG5uZXQvY29yZS9zb2NrX21hcC5jLTExMjgtXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKHN0cnVjdCBicGZfc2h0YWJfYnVja2V0KSxcXG4tLVxcbm5ldC94ZHAveHNrbWFwLmM9NjQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICp4c2tfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxubmV0L3hkcC94c2ttYXAuYy03Ny1cXG5uZXQveGRwL3hza21hcC5jOjc4OlxcdG0gPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZSwgbnVtYV9ub2RlKTtcXG5uZXQveGRwL3hza21hcC5jLTc5LVxcdGlmICghbSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDM6MzkuMzIzNTc0Mzk2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDY5MDQ2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX2JwZl9tYXBfYXJlYV9hbGxvY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBfX2JwZl9tYXBfYXJlYV9hbGxvY2AuIEknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gQlBGIG1hcCBtYW5hZ2VtZW50LCBsaWtlbHkgZGVhbGluZyB3aXRoIGFsbG9jYXRpb24gb2YgbWVtb3J5IHJlZ2lvbnMgdXNlZCB0byBzdG9yZSBtYXAgZGF0YS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgdGhpcyB1c2luZyBhIHNwZWNpZmljIHNsYWIgYWxsb2NhdG9yLCBvciBzb21ldGhpbmcgbW9yZSBiYXNpYyBsaWtlIGBrbWFsbG9jYD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGJlaW5nIGVuZm9yY2VkLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZXk/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGFyZ3VtZW50cyBiZWluZyBwYXNzZWQg4oCTIHNpemUsIGZsYWdzLCBwb3NzaWJseSBOVU1BIG5vZGUgaW5mb3JtYXRpb24uIFRoZSBmbGFncyBhcmUgZ29pbmcgdG8gYmUga2V5LCBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyBsaWtlIGBHRlBfS0VSTkVMYCBhbmQgcG90ZW50aWFsbHkgb3RoZXJzIHJlbGF0ZWQgdG8gbWVtb3J5IHR5cGVzIG9yIGxvY2tpbmcuIEnigJlsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzIGFuZCBjYWxsZWVzLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBtYXAgaW5mcmFzdHJ1Y3R1cmUsIG9yIGlmIHRoZXJlJ3MgYW55IGJsZWVkIG92ZXIgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgYW5kIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCBpZiB0aGVyZSBhcmUgbG9ja3MgaW52b2x2ZWQuIEFyZSB0aGVyZSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIEJQRiBtYXAgb3BlcmF0aW9ucyBhcmUgZGV0ZXJtaW5lZCwgc28gdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGVzc2VudGlhbCBmb3Igb3B0aW1pemluZyB0aGluZ3MgZG93biB0aGUgcm9hZC4gQWxyaWdodCwgdGltZSB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY0OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjAzOjQ0LjMzMDQ4Mjc4NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MjpcXHRzdGF0aWMgdm9pZCAqX19icGZfbWFwX2FyZWFfYWxsb2ModTY0IHNpemUsIGludCBudW1hX25vZGUsIGJvb2wgbW1hcGFibGUpXFxuIDM3MzpcXHR7XFxuIDM3NDpcXHRcXHQvKiBXZSByZWFsbHkganVzdCB3YW50IHRvIGZhaWwgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIE9PTSBraWxsZXJcXG4gMzc1OlxcdFxcdCAqIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgdGhlcmVmb3JlIHdlIHNldCBfX0dGUF9OT1JFVFJZIHRvIGttYWxsb2MsXFxuIDM3NjpcXHRcXHQgKiB3aGljaCBpcyB1c2VkIGZvciBsb3dlciBvcmRlciBhbGxvY2F0aW9uIHJlcXVlc3RzLlxcbiAzNzc6XFx0XFx0ICpcXG4gMzc4OlxcdFxcdCAqIEl0IGhhcyBiZWVuIG9ic2VydmVkIHRoYXQgaGlnaGVyIG9yZGVyIGFsbG9jYXRpb24gcmVxdWVzdHMgZG9uZSBieVxcbiAzNzk6XFx0XFx0ICogdm1hbGxvYyB3aXRoIF9fR0ZQX05PUkVUUlkgYmVpbmcgc2V0IG1pZ2h0IGZhaWwgZHVlIHRvIG5vdCB0cnlpbmdcXG4gMzgwOlxcdFxcdCAqIHRvIHJlY2xhaW0gbWVtb3J5IGZyb20gdGhlIHBhZ2UgY2FjaGUsIHRodXMgd2Ugc2V0XFxuIDM4MTpcXHRcXHQgKiBfX0dGUF9SRVRSWV9NQVlGQUlMIHRvIGF2b2lkIHN1Y2ggc2l0dWF0aW9ucy5cXG4gMzgyOlxcdFxcdCAqL1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRnZnBfdCBnZnAgPSBicGZfbWVtY2dfZmxhZ3MoX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTyk7XFxuIDM4NTpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwO1xcbiAzODY6XFx0XFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7XFxuIDM4NzpcXHRcXHR2b2lkICphcmVhO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlPSBTSVpFX01BWClcXG4gMzkwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHQvKiBrbWFsbG9jKCknZWQgbWVtb3J5IGNhbid0IGJlIG1tYXAoKSdlZCAqL1xcbiAzOTM6XFx0XFx0aWYgKG1tYXBhYmxlKSB7XFxuIDM5NDpcXHRcXHRcXHRCVUdfT04oIVBBR0VfQUxJR05FRChzaXplKSk7XFxuIDM5NTpcXHRcXHRcXHRhbGlnbiA9IFNITUxCQTtcXG4gMzk2OlxcdFxcdFxcdGZsYWdzID0gVk1fVVNFUk1BUDtcXG4gMzk3OlxcdFxcdH0gZWxzZSBpZiAoc2l6ZSBcXHUwMDNjPSAoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSkge1xcbiAzOTg6XFx0XFx0XFx0YXJlYSA9IGttYWxsb2Nfbm9kZShzaXplLCBnZnAgfCBHRlBfVVNFUiB8IF9fR0ZQX05PUkVUUlksXFxuIDM5OTpcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlKTtcXG4gNDAwOlxcdFxcdFxcdGlmIChhcmVhICE9IE5VTEwpXFxuIDQwMTpcXHRcXHRcXHRcXHRyZXR1cm4gYXJlYTtcXG4gNDAyOlxcdFxcdH1cXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlKHNpemUsIGFsaWduLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG4gNDA1OlxcdFxcdFxcdFxcdGdmcCB8IEdGUF9LRVJORUwgfCBfX0dGUF9SRVRSWV9NQVlGQUlMLCBQQUdFX0tFUk5FTCxcXG4gNDA2OlxcdFxcdFxcdFxcdGZsYWdzLCBudW1hX25vZGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuIDQwNzpcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdHZvaWQgKmJwZl9tYXBfYXJlYV9hbGxvYyh1NjQgc2l6ZSwgaW50IG51bWFfbm9kZSlcXG4gNDEwOlxcdHtcXG4gNDExOlxcdFxcdHJldHVybiBfX2JwZl9tYXBfYXJlYV9hbGxvYyhzaXplLCBudW1hX25vZGUsIGZhbHNlKTtcXG4gNDEyOlxcdH1cXG4gNDEzOlxcdFxcbiA0MTQ6XFx0dm9pZCAqYnBmX21hcF9hcmVhX21tYXBhYmxlX2FsbG9jKHU2NCBzaXplLCBpbnQgbnVtYV9ub2RlKVxcbiA0MTU6XFx0e1xcbiA0MTY6XFx0XFx0cmV0dXJuIF9fYnBmX21hcF9hcmVhX2FsbG9jKHNpemUsIG51bWFfbm9kZSwgdHJ1ZSk7XFxuIDQxNzpcXHR9XFxuIDQxODpcXHRcXG4gNDE5OlxcdHZvaWQgYnBmX21hcF9hcmVhX2ZyZWUodm9pZCAqYXJlYSlcXG4gNDIwOlxcdHtcXG4gNDIxOlxcdFxcdGt2ZnJlZShhcmVhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDM6NDQuMzMxODE2MzI0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4ODk1OTk5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uY2VybnMgUmVnYXJkaW5nIEJQRiBNYXAgVXBkYXRlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgX19icGZfbWFwX2FyZWFfYWxsb2NgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIHVzaW5nIGBfX0dGUF9aRVJPYCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtZWFucyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIG1hcCBpcyB6ZXJvZWQgb3V0IGluaXRpYWxseS4gU28sIGBzdF9tYXAtXHUwMDNldXZhbHVlYCBhbmQgYHN0X21hcC1cdTAwM2VrdmFsdWVgIGFyZSBkZWZpbml0ZWx5IHN0YXJ0aW5nIGF0IHplcm8uIEJ1dCwgaGVyZSdzIHdoZXJlIG15IGFsYXJtIGJlbGxzIGFyZSBzdGFydGluZyB0byByaW5nLlxuXG5gYnBmX3N0cnVjdF9vcHNfbWFwX3VwZGF0ZV9lbGVtYCBjb3BpZXMgdXNlciBkYXRhIGludG8gYHV2YWx1ZWAgdXNpbmcgYG1lbWNweWAuIFRoZSBrZXkgaXMgdGhhdCBgdmFsdWVgIGluIGBtZW1jcHkodXZhbHVlLCB2YWx1ZSwgbWFwLVx1MDAzZXZhbHVlX3NpemUpYCBpcyAqY29taW5nIGZyb20gdXNlciBzcGFjZSouIElzIHRoYXQgZGF0YSBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgdGltZSBpdCBnZXRzIGNvcGllZCBpbnRvIHRoZSBrZXJuZWw/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZS5cblxuTGV0J3MgdHJhY2UgYmFjay4gSSBzZWUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcm9tIHRoZSBgbWFwX3VwZGF0ZV9lbGVtYCBzeXNjYWxsLiBUaGUgc3lzY2FsbCBpcyBjb3B5aW5nIGB2YWx1ZV9zaXplYCBieXRlcyBmcm9tIHVzZXIgc3BhY2UuIE9rYXksIHNvIGlmIHVzZXIgc3BhY2UgcGFzc2VzIHNvbWV0aGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgYnl0ZXMg4oCTIG1heWJlIHBhZGRpbmcsIG9yIHNvbWUgdW5pbml0aWFsaXplZCBzdHJ1Y3QgbWVtYmVycyDigJMgdGhvc2UgYnl0ZXMgY291bGQgcG90ZW50aWFsbHkgZ2V0IGNvcGllZCBzdHJhaWdodCBpbnRvIGB1dmFsdWVgLiBBbmQgdGhlbiwgYGt2YWx1ZWAgaXMgc3Vic2VxdWVudGx5IGluaXRpYWxpemVkIGZyb20gYHV2YWx1ZWA/XG5cbkknbSBzdGFydGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgLSBga2RhdGFgIGlzIGluaXRpYWxpemVkIGZyb20gYHVkYXRhYC4gTGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBicGZfc3RydWN0X29wc19tYXBfdXBkYXRlX2VsZW1gIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMzo1My4yMjE0MjEyMDNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRtZW1jcHkodXZhbHVlLCB2YWx1ZSwgbWFwLVxcdTAwM2V2YWx1ZV9zaXplKTtcXG4gNzc4OlxcdFxcbiA3Nzk6XFx0XFx0dWRhdGEgPSBcXHUwMDI2dXZhbHVlLVxcdTAwM2VkYXRhO1xcbiA3ODA6XFx0XFx0a2RhdGEgPSBcXHUwMDI2a3ZhbHVlLVxcdTAwM2VkYXRhO1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRcXHRwbGluayA9IHN0X21hcC1cXHUwMDNlbGlua3M7XFxuIDc4MzpcXHRcXHRwa3N5bSA9IHN0X21hcC1cXHUwMDNla3N5bXM7XFxuIDc4NDpcXHRcXHR0bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChzdF9tYXAtXFx1MDAzZWJ0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpO1xcbiA3ODU6XFx0XFx0bW9kdWxlX3R5cGUgPSBidGZfdHlwZV9ieV9pZChidGZfdm1saW51eCwgc3Rfb3BzX2lkc1tJRFhfTU9EVUxFX0lEXSk7XFxuIDc4NjpcXHRcXHRmb3JfZWFjaF9tZW1iZXIoaSwgdCwgbWVtYmVyKSB7XFxuIDc4NzpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm10eXBlLCAqcHR5cGU7XFxuIDc4ODpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIDc4OTpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX2xpbmsgKmxpbms7XFxuIDc5MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX2tzeW0gKmtzeW07XFxuIDc5MTpcXHRcXHRcXHR1MzIgbW9mZjtcXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0XFx0bW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbiA3OTQ6XFx0XFx0XFx0bW5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoc3RfbWFwLVxcdTAwM2VidGYsIG1lbWJlci1cXHUwMDNlbmFtZV9vZmYpO1xcbiA3OTU6XFx0XFx0XFx0cHR5cGUgPSBidGZfdHlwZV9yZXNvbHZlX3B0cihzdF9tYXAtXFx1MDAzZWJ0ZiwgbWVtYmVyLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4gNzk2OlxcdFxcdFxcdGlmIChwdHlwZSA9PSBtb2R1bGVfdHlwZSkge1xcbiA3OTc6XFx0XFx0XFx0XFx0aWYgKCoodm9pZCAqKikodWRhdGEgKyBtb2ZmKSlcXG4gNzk4OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzZXRfdW5sb2NrO1xcbiA3OTk6XFx0XFx0XFx0XFx0Kih2b2lkICoqKShrZGF0YSArIG1vZmYpID0gQlBGX01PRFVMRV9PV05FUjtcXG4gODAwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MDE6XFx0XFx0XFx0fVxcbiA4MDI6XFx0XFxuIDgwMzpcXHRcXHRcXHRlcnIgPSBzdF9vcHMtXFx1MDAzZWluaXRfbWVtYmVyKHQsIG1lbWJlciwga2RhdGEsIHVkYXRhKTtcXG4gODA0OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA4MDU6XFx0XFx0XFx0XFx0Z290byByZXNldF91bmxvY2s7XFxuIDgwNjpcXHRcXG4gODA3OlxcdFxcdFxcdC8qIFRoZSAtXFx1MDAzZWluaXRfbWVtYmVyKCkgaGFzIGhhbmRsZWQgdGhpcyBtZW1iZXIgKi9cXG4gODA4OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzZSAwKVxcbiA4MDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgxMDpcXHRcXG4gODExOlxcdFxcdFxcdC8qIElmIHN0X29wcy1cXHUwMDNlaW5pdF9tZW1iZXIgZG9lcyBub3QgaGFuZGxlIGl0LFxcbiA4MTI6XFx0XFx0XFx0ICogd2Ugd2lsbCBvbmx5IGhhbmRsZSBmdW5jIHB0cnMgYW5kIHplcm8tZWQgbWVtYmVyc1xcbiA4MTM6XFx0XFx0XFx0ICogaGVyZS4gIFJlamVjdCBldmVyeXRoaW5nIGVsc2UuXFxuIDgxNDpcXHRcXHRcXHQgKi9cXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0XFx0LyogQWxsIG5vbiBmdW5jIHB0ciBtZW1iZXIgbXVzdCBiZSAwICovXFxuIDgxNzpcXHRcXHRcXHRpZiAoIXB0eXBlIHx8ICFidGZfdHlwZV9pc19mdW5jX3Byb3RvKHB0eXBlKSkge1xcbiA4MTg6XFx0XFx0XFx0XFx0dTMyIG1zaXplO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRcXHRcXHRtdHlwZSA9IGJ0Zl90eXBlX2J5X2lkKHN0X21hcC1cXHUwMDNlYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUpO1xcbiA4MjE6XFx0XFx0XFx0XFx0bXR5cGUgPSBidGZfcmVzb2x2ZV9zaXplKHN0X21hcC1cXHUwMDNlYnRmLCBtdHlwZSwgXFx1MDAyNm1zaXplKTtcXG4gODIyOlxcdFxcdFxcdFxcdGlmIChJU19FUlIobXR5cGUpKSB7XFxuIDgyMzpcXHRcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKG10eXBlKTtcXG4gODI0OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzZXRfdW5sb2NrO1xcbiA4MjU6XFx0XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowMzo1My4yMjE2MTU0MzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgxNzg1NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IGNsaWNrZWQ6IGBrZGF0YWAgaXMgZ2V0dGluZyBhdXRvbWF0aWNhbGx5IHplcm9lZC4gVGhhdCdzIGJlY2F1c2UgYGt2YWx1ZWAg4oCTIHRoZSBhY3R1YWwgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhpcyBjb250ZXh0IOKAkyBsaXZlcyBpbnNpZGUgYHN0X21hcGAsIHdoaWNoIHdhcyBhbGxvY2F0ZWQgdXNpbmcgYGJwZl9tYXBfYXJlYV9hbGxvY2AuIEFuZCByZW1lbWJlciwgYGJwZl9tYXBfYXJlYV9hbGxvY2AgKmd1YXJhbnRlZXMqIHplcm8taW5pdGlhbGl6YXRpb24uIEdvdCBpdC5cblxuU28sIHRoZSBjb2RlIHRoZW4gdXNlcyBgZm9yX2VhY2hfbWVtYmVyYCB0byBjYXJlZnVsbHkgc3RlcCB0aHJvdWdoIGVhY2ggbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUuIFByZXR0eSBzdGFuZGFyZC4gRm9yIGVhY2ggbWVtYmVyIGVuY291bnRlcmVkLCBpdCBjYWxscyBgc3Rfb3BzLVx1MDAzZWluaXRfbWVtYmVyYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIHNwZWNpZmljLlxuXG5JbiB0aGUgY2FzZSBvZiBgbmFtZWAsIGEgcGFydGljdWxhciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyB1c2VkLiBIb3dldmVyLCBpdCdzIGNsZWFyIHRoYXQgd2hlbiB0aGUgbWVtYmVyIGlzIGB0Y3BfY29uZ2VzdGlvbl9vcHNgLCB0aGUgY29ycmVzcG9uZGluZyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBgYnBmX3RjcF9jYV9pbml0X21lbWJlcmAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBmdW5jdGlvbiB0byBhbmFseXplLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIGFueSBtZW1iZXIgc3BlY2lmaWMgdG8gdGhlIGNvbmdlc3Rpb24gYWxnb3JpdGhtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMxNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDQ6MDAuMDM5NDc2ODcyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9icGZfdGNwX2NhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdHN0YXRpYyBpbnQgYnBmX3RjcF9jYV9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuIDIxMTpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXFxuIDIxMjpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcXG4gMjEzOlxcdHtcXG4gMjE0OlxcdFxcdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnV0Y3BfY2E7XFxuIDIxNTpcXHRcXHRzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICp0Y3BfY2E7XFxuIDIxNjpcXHRcXHR1MzIgbW9mZjtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0dXRjcF9jYSA9IChjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICopdWRhdGE7XFxuIDIxOTpcXHRcXHR0Y3BfY2EgPSAoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqKWtkYXRhO1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XFxuIDIyMjpcXHRcXHRzd2l0Y2ggKG1vZmYpIHtcXG4gMjIzOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcywgZmxhZ3MpOlxcbiAyMjQ6XFx0XFx0XFx0aWYgKHV0Y3BfY2EtXFx1MDAzZWZsYWdzIFxcdTAwMjYgflRDUF9DT05HX01BU0spXFxuIDIyNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjI2OlxcdFxcdFxcdHRjcF9jYS1cXHUwMDNlZmxhZ3MgPSB1dGNwX2NhLVxcdTAwM2VmbGFncztcXG4gMjI3OlxcdFxcdFxcdHJldHVybiAxO1xcbiAyMjg6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzLCBuYW1lKTpcXG4gMjI5OlxcdFxcdFxcdGlmIChicGZfb2JqX25hbWVfY3B5KHRjcF9jYS1cXHUwMDNlbmFtZSwgdXRjcF9jYS1cXHUwMDNlbmFtZSxcXG4gMjMwOlxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHRjcF9jYS1cXHUwMDNlbmFtZSkpIFxcdTAwM2M9IDApXFxuIDIzMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjMyOlxcdFxcdFxcdHJldHVybiAxO1xcbiAyMzM6XFx0XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHRyZXR1cm4gMDtcXG4gMjM2OlxcdH1cXG4gMjM3OlxcdFxcbiAyMzg6XFx0c3RhdGljIGludCBicGZfdGNwX2NhX3JlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbiAyMzk6XFx0e1xcbiAyNDA6XFx0XFx0cmV0dXJuIHRjcF9yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHRzdGF0aWMgdm9pZCBicGZfdGNwX2NhX3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuIDI0NDpcXHR7XFxuIDI0NTpcXHRcXHR0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHRzdGF0aWMgaW50IGJwZl90Y3BfY2FfdXBkYXRlKHZvaWQgKmtkYXRhLCB2b2lkICpvbGRfa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaylcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdHJldHVybiB0Y3BfdXBkYXRlX2Nvbmdlc3Rpb25fY29udHJvbChrZGF0YSwgb2xkX2tkYXRhKTtcXG4gMjUxOlxcdH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0c3RhdGljIGludCBicGZfdGNwX2NhX3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxcbiAyNTQ6XFx0e1xcbiAyNTU6XFx0XFx0cmV0dXJuIHRjcF92YWxpZGF0ZV9jb25nZXN0aW9uX2NvbnRyb2woa2RhdGEpO1xcbiAyNTY6XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRzdGF0aWMgdTMyIGJwZl90Y3BfY2Ffc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKVxcbiAyNTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNDowMC4wMzk2Mzk1MzJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNTI5NzQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gT2JqZWN0IE5hbWluZyBpbiBCUEYqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG9iamVjdCBuYW1pbmcsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBicGZfb2JqX25hbWVfY3B5YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gd2hhdCB0aGlzIGNvcHkgZnVuY3Rpb24gYWN0dWFsbHkgZG9lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG9iamVjdCBuYW1lcyBhcmUgaGFuZGxlZCB1bmRlciB0aGUgaG9vZC4gV2hhdCdzIHRoZSBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpbiB0ZXJtcyBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3M/IEkgbmVlZCB0byBhbmFseXplIGBicGZfb2JqX25hbWVfY3B5YCBkaXJlY3RseSB0byBmdWxseSBncmFzcCBpdHMgYmVoYXZpb3IsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgYW5kIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gTGV0J3MgZ2V0IHRvIHRoZSBzb3VyY2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0NjQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA0OjA0Ljk3NDk0MDg5M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2OTg1NjM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfb2JqX25hbWVfY3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjX2JwZi5jPTM0ND1zdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0zNTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBuYW1lKTpcXG5mcy9iaW5mbXRfbWlzY19icGYuYzozNTQ6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTM1NS1cXHRcXHRcXHRcXHQgICAgIHNpemVvZihvcHMtXFx1MDAzZW5hbWUpKSBcXHUwMDNjPSAwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD02NTU9c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaDo2NTY6aW50IGJwZl9vYmpfbmFtZV9jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY1Ny1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyMDM9aW50IGJwZl9nZXRfZmlsZV9mbGFnKGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyMjQtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTIyNTppbnQgYnBmX29ial9uYW1lX2NweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgaW50IHNpemUpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTIyNi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMjQ0LX1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMjQ1OkVYUE9SVF9TWU1CT0xfR1BMKGJwZl9vYmpfbmFtZV9jcHkpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyNDYtXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTQxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE1NDI6XFx0ZXJyID0gYnBmX29ial9uYW1lX2NweShtYXAtXFx1MDAzZW5hbWUsIGF0dHItXFx1MDAzZW1hcF9uYW1lLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1NDMtXFx0XFx0XFx0ICAgICAgIHNpemVvZihhdHRyLVxcdTAwM2VtYXBfbmFtZSkpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMjYtXFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2Vsb2FkX3RpbWUgPSBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTI3OlxcdGVyciA9IGJwZl9vYmpfbmFtZV9jcHkocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VuYW1lLCBhdHRyLVxcdTAwM2Vwcm9nX25hbWUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyOC1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGF0dHItXFx1MDAzZXByb2dfbmFtZSkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz03OTM5PXN0YXRpYyBpbnQgYnBmX3NjeF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc5NTktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgbmFtZSk6XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo3OTYwOlxcdFxcdHJldCA9IGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzk2MS1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG9wcy1cXHUwMDNlbmFtZSkpO1xcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTIxMD1zdGF0aWMgaW50IGJwZl90Y3BfY2FfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTIyOC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMsIG5hbWUpOlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzoyMjk6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkodGNwX2NhLVxcdTAwM2VuYW1lLCB1dGNwX2NhLVxcdTAwM2VuYW1lLFxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy0yMzAtXFx0XFx0XFx0XFx0ICAgICBzaXplb2YodGNwX2NhLVxcdTAwM2VuYW1lKSkgXFx1MDAzYz0gMClcXG4tLVxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYz0zNjE9c3RhdGljIGludCBicGZfcWRpc2NfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxubmV0L3NjaGVkL2JwZl9xZGlzYy5jLTM4Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBRZGlzY19vcHMsIGlkKTpcXG5uZXQvc2NoZWQvYnBmX3FkaXNjLmM6MzgzOlxcdFxcdGlmIChicGZfb2JqX25hbWVfY3B5KHFkaXNjX29wcy1cXHUwMDNlaWQsIHVxZGlzY19vcHMtXFx1MDAzZWlkLFxcbm5ldC9zY2hlZC9icGZfcWRpc2MuYy0zODQtXFx0XFx0XFx0XFx0ICAgICBzaXplb2YocWRpc2Nfb3BzLVxcdTAwM2VpZCkpIFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuYz04NT1zdGF0aWMgaW50IHNtY19icGZfaHNfY3RybF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5uZXQvc21jL3NtY19oc19icGYuYy05OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzbWNfaHNfY3RybCwgbmFtZSk6XFxubmV0L3NtYy9zbWNfaHNfYnBmLmM6OTk6XFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkoa19jdHJsLVxcdTAwM2VuYW1lLCB1X2N0cmwtXFx1MDAzZW5hbWUsXFxubmV0L3NtYy9zbWNfaHNfYnBmLmMtMTAwLVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHVfY3RybC1cXHUwMDNlbmFtZSkpIFxcdTAwM2M9IDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA0OjA5LjU0NDgwMjQxMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDY3NDIzMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnBmX29ial9uYW1lX2NweWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMsIGFuZCBJJ20gcHJvYmFibHkgZ29pbmcgdG8gaGF2ZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IHRvIGJlIHRydWx5IHVzZWZ1bC5cblxuKipEaXZpbmcgRGVlcCBpbnRvIGBicGZfb2JqX25hbWVfY3B5YCoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpczogKmBicGZfb2JqX25hbWVfY3B5YC4uLiBzb3VuZHMgbGlrZSB3ZSdyZSBjb3B5aW5nIG9iamVjdCBuYW1lcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBGYWlyIGVub3VnaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3csIHdoZXJlLCBhbmQgd2h5IGl0J3MgdXNlZC4gSXMgaXQgYSBjcml0aWNhbCBwYXRoIGZ1bmN0aW9uPyBBIHV0aWxpdHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGltcGxlbWVudGF0aW9uPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbj8gV2hhdCBhcmUgdGhlIGNvbnN0cmFpbnRzIGl0IGhhcz8qXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIEJQRiBjb21wb25lbnRzLiAqSXMgdGhpcyBhIGRpcmVjdCBjb3B5LCBvciBpcyB0aGVyZSBhbnkgc2FuaXRpemF0aW9uLCB2YWxpZGF0aW9uLCBvciB0cnVuY2F0aW9uIGhhcHBlbmluZz8gVGhhdCdzIHZpdGFsIHRvIGtub3cgaW1tZWRpYXRlbHkuKiBUaGUgc2l6ZSBwYXJhbWV0ZXJzIGFyZSBnb2luZyB0byBiZSBrZXksIGFuZCBJ4oCZbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIG9mZi1ieS1vbmUgZXJyb3JzLiBBbHNvLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCBhbnkgbG9ja2luZyBtZWNoYW5pc21zOyBkYXRhIHJhY2VzIGFyZSBteSBtYWluIHdvcnJ5LiBXaGF0IGFyZSB0aGUgbWVtb3J5IGJhcnJpZXJzPyBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IGlmIG11bHRpcGxlIHRocmVhZHMgY2FuIHVzZSB0aGlzLlxuXG5JJ2xsIGJlIGFza2luZyBteXNlbGYgcXVlc3Rpb25zIGFsb25nIHRoZSB3YXk6ICpXaGF0IGlzIHRoZSBpbnRlbmRlZCB1c2UgY2FzZT8gV2hhdCBhcmUgdGhlIGFzc3VtcHRpb25zIG1hZGUgYnkgdGhlIGRldmVsb3BlcnM/IElzIHRoZSBjb2RlIHdlbGwtZG9jdW1lbnRlZCwgb3IgYW0gSSBnb2luZyB0byBoYXZlIHRvIHJldmVyc2UgZW5naW5lZXIgaXQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBlcnJvcnM/IEFyZSB0aGUgZXJyb3IgY29uZGl0aW9ucyBwcm9wZXJseSBoYW5kbGVkLCBvciBhcmUgdGhlcmUgc2lsZW50IGZhaWx1cmVzPyogSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gTWVtb3J5IGFsbG9jYXRpb24sIGRhdGEgbW92ZXMsIGFuZCBjb3B5IGxvb3BzOyB0aGVzZSBjYW4gc2xvdyB0aGluZ3MgZG93bi5cblxuT25jZSBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbnRlcm5hbCB3b3JraW5ncywgSSB3aWxsIHBsYWNlIHRoaXMgZnVuY3Rpb24gaW4gY29udGV4dC4gKklzIGl0IHBhcnQgb2YgYSBsYXJnZXIgb2JqZWN0IG1hbmFnZW1lbnQgc3lzdGVtIHdpdGhpbiBCUEY/IEhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZT8gSXMgaXQgdXNlZCBpbiBhbnkgc2Vuc2l0aXZlIGFyZWFzPyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGltcGFjdHMgb2YgdGhpcyB0aGF0IG1heSBiZSBsZXNzIG9idmlvdXM/KiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2UsIGl0cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIEJQRiBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBpdCdzIG9wZXJhdGluZyBhcyBpbnRlbmRlZCwgYW5kIGhvdyBpdCBjb3VsZCBiZSBpbXByb3ZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNDoxOS4wMTIyMjg1NDNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjU6XFx0aW50IGJwZl9vYmpfbmFtZV9jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGludCBzaXplKVxcbjEyMjY6XFx0e1xcbjEyMjc6XFx0XFx0Y29uc3QgY2hhciAqZW5kID0gc3JjICsgc2l6ZTtcXG4xMjI4OlxcdFxcdGNvbnN0IGNoYXIgKm9yaWdfc3JjID0gc3JjO1xcbjEyMjk6XFx0XFxuMTIzMDpcXHRcXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcXG4xMjMxOlxcdFxcdC8qIENvcHkgYWxsIGlzYWxudW0oKSwgJ18nIGFuZCAnLicgY2hhcnMuICovXFxuMTIzMjpcXHRcXHR3aGlsZSAoc3JjIFxcdTAwM2MgZW5kIFxcdTAwMjZcXHUwMDI2ICpzcmMpIHtcXG4xMjMzOlxcdFxcdFxcdGlmICghaXNhbG51bSgqc3JjKSBcXHUwMDI2XFx1MDAyNlxcbjEyMzQ6XFx0XFx0XFx0ICAgICpzcmMgIT0gJ18nIFxcdTAwMjZcXHUwMDI2ICpzcmMgIT0gJy4nKVxcbjEyMzU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIzNjpcXHRcXHRcXHQqZHN0KysgPSAqc3JjKys7XFxuMTIzNzpcXHRcXHR9XFxuMTIzODpcXHRcXG4xMjM5OlxcdFxcdC8qIE5vICdcXFxcMCcgZm91bmQgaW4gXFxcInNpemVcXFwiIG51bWJlciBvZiBieXRlcyAqL1xcbjEyNDA6XFx0XFx0aWYgKHNyYyA9PSBlbmQpXFxuMTI0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjQyOlxcdFxcbjEyNDM6XFx0XFx0cmV0dXJuIHNyYyAtIG9yaWdfc3JjO1xcbjEyNDQ6XFx0fVxcbjEyNDU6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYnBmX29ial9uYW1lX2NweSk7XFxuMTI0NjpcXHRcXG4xMjQ3OlxcdGludCBtYXBfY2hlY2tfbm9fYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXFxuMTI0ODpcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4xMjQ5OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSxcXG4xMjUwOlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxcbjEyNTE6XFx0e1xcbjEyNTI6XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4xMjUzOlxcdH1cXG4xMjU0OlxcdFxcbjEyNTU6XFx0c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxcbjEyNTY6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9rZXlfaWQsIHUzMiBidGZfdmFsdWVfaWQpXFxuMTI1NzpcXHR7XFxuMTI1ODpcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCAqdmFsdWVfdHlwZTtcXG4xMjU5OlxcdFxcdHUzMiBrZXlfc2l6ZSwgdmFsdWVfc2l6ZTtcXG4xMjYwOlxcdFxcdGludCByZXQgPSAwO1xcbjEyNjE6XFx0XFxuMTI2MjpcXHRcXHQvKiBTb21lIG1hcHMgYWxsb3cga2V5IHRvIGJlIHVuc3BlY2lmaWVkLiAqL1xcbjEyNjM6XFx0XFx0aWYgKGJ0Zl9rZXlfaWQpIHtcXG4xMjY0OlxcdFxcdFxcdGtleV90eXBlID0gYnRmX3R5cGVfaWRfc2l6ZShidGYsIFxcdTAwMjZidGZfa2V5X2lkLCBcXHUwMDI2a2V5X3NpemUpO1xcbjEyNjU6XFx0XFx0XFx0aWYgKCFrZXlfdHlwZSB8fCBrZXlfc2l6ZSAhPSBtYXAtXFx1MDAzZWtleV9zaXplKVxcbjEyNjY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI2NzpcXHRcXHR9IGVsc2Uge1xcbjEyNjg6XFx0XFx0XFx0a2V5X3R5cGUgPSBidGZfdHlwZV9ieV9pZChidGYsIDApO1xcbjEyNjk6XFx0XFx0XFx0aWYgKCFtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWFwX2NoZWNrX2J0ZilcXG4xMjcwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNzE6XFx0XFx0fVxcbjEyNzI6XFx0XFxuMTI3MzpcXHRcXHR2YWx1ZV90eXBlID0gYnRmX3R5cGVfaWRfc2l6ZShidGYsIFxcdTAwMjZidGZfdmFsdWVfaWQsIFxcdTAwMjZ2YWx1ZV9zaXplKTtcXG4xMjc0OlxcdFxcdGlmICghdmFsdWVfdHlwZSB8fCB2YWx1ZV9zaXplICE9IG1hcC1cXHUwMDNldmFsdWVfc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MDQ6MTkuMDEyNzIxMjYzWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNDQ2Nzc5NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25nZXN0aW9uIENvbnRyb2wgTmFtZSBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBgYnBmX29ial9uYW1lX2NweWAgZG9lcyBhIGBtZW1zZXRgIGJlZm9yZSBjb3B5aW5nLCB3aGljaCBtZWFucyB0aGUgZGVzdGluYXRpb24gYXJyYXksIHNwZWNpZmljYWxseSBgdGNwX2NhLVx1MDAzZW5hbWVgLCBpcyBhbHdheXMgZnVsbHkgemVyb2VkIG91dCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGlzIGVuc3VyZXMgY29tcGxldGUgaW5pdGlhbGl6YXRpb24sIGluY2x1ZGluZyBwYWRkaW5nLCB1cCB0byBgVENQX0NBX05BTUVfTUFYYC4gQ29uc2VxdWVudGx5LCBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZXMgaW4gQlBGIGNvbnRleHRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkLiBCdWlsdC1pbiBjb25nZXN0aW9uIGNvbnRyb2xzIGFyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCwgd2hpY2ggaW5oZXJlbnRseSBtZWFucyB0aGV5IGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gVGhlcmVmb3JlLCB0aGUgYGNhX29wcy1cdTAwM2VuYW1lYCBmaWVsZCBpcyBjb25zaXN0ZW50bHkgaW5pdGlhbGl6ZWQuXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgbG9jYWwgdmFyaWFibGUgYGNhX25hbWVgIGluIGBkb190Y3BfZ2V0c29ja29wdGAuIFRoZSBhcnJheSBgY2FfbmFtZWAgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYHt9YCB3aGljaCB6ZXJvZXMgb3V0IHRoZSBlbnRpcmUgYXJyYXkuIFRoZW4sIGBtZW1jcHlgIGNvcGllcyBgVENQX0NBX05BTUVfTUFYYCBieXRlcyBmcm9tIGBjYV9vcHMtXHUwMDNlbmFtZWAgaW50byBgY2FfbmFtZWAuICBCZWNhdXNlIGBjYV9vcHMtXHUwMDNlbmFtZWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIGBjYV9uYW1lYCBhbHNvIGJlY29tZXMgZnVsbHkgaW5pdGlhbGl6ZWQuICBGaW5hbGx5LCBgY29weV90b19zb2NrcHRyYCB0cmFuc2ZlcnMgYSBudW1iZXIgb2YgYnl0ZXMgbm8gbW9yZSB0aGFuIHRoZSBzaXplIG9mIGBjYV9uYW1lYCB0byB1c2VyIHNwYWNlLCBlbGltaW5hdGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuXG5cbkJ1dCwgd2hhdCBpZiBgY2Ffb3BzYCBpcyBOVUxMPyAgSW4gYGRvX3RjcF9nZXRzb2Nrb3B0YCwgYGNhX29wc2AgaXMgb2J0YWluZWQgZnJvbSBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AuIENhbiBgaWNzay1cdTAwM2VpY3NrX2NhX29wc2AgZXZlciBiZSBOVUxMPyAgTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgaXQncyBwb3NzaWJsZTogIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBpcyBzZXQgdG8gTlVMTCBpbiBgbXB0Y3BfY2FfcmVzZXRgLiBJZiBgY2Ffb3BzYCAqaXMqIE5VTEwsIHRoZSBgbWVtY3B5YCB3b3VsZCBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlciEgVGhlIHBvdGVudGlhbCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaXMgdGhlcmUsIHRoZW4uIFRoaXMgaXMgaGFwcGVuaW5nIGluIE1QVENQIGNvZGUsIGJ1dCBgZG9fdGNwX2dldHNvY2tvcHRgIGlzIGZvciBUQ1Agc29ja2V0cy4gIENvdWxkIE1QVENQIGNvZGUgY2FsbCBgZG9fdGNwX2dldHNvY2tvcHRgPyBXZSBuZWVkIHRvIHZlcmlmeSBpZiBgY2Ffb3BzYCBjYW4gYmUgTlVMTCBpbiBgZG9fdGNwX2dldHNvY2tvcHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI5MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA0OjQxLjQ1OTUwNjA5NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzMTU4NzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb190Y3BfZ2V0c29ja29wdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD00OTk9X19wb2xsX3QgdGNwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvdGNwLmgtNTAwLVxcdFxcdCAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6NTAxOmludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG5pbmNsdWRlL25ldC90Y3AuaC01MDItXFx0XFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTYwMD1zdGF0aWMgaW50IHNvbF90Y3Bfc29ja29wdF9jb25nZXN0aW9uKHN0cnVjdCBzb2NrICpzaywgY2hhciAqb3B0dmFsLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTYxMy1cXHRcXHRvcHR2YWxbLS0oKm9wdGxlbildID0gJ1xcXFwwJztcXG5uZXQvY29yZS9maWx0ZXIuYzo1NjE0OlxcdFxcdHJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgU09MX1RDUCwgVENQX0NPTkdFU1RJT04sXFxubmV0L2NvcmUvZmlsdGVyLmMtNTYxNS1cXHRcXHRcXHRcXHRcXHQgS0VSTkVMX1NPQ0tQVFIob3B0dmFsKSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU2NTM9c3RhdGljIGludCBzb2xfdGNwX3NvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MDEtXFxubmV0L2NvcmUvZmlsdGVyLmM6NTcwMjpcXHRcXHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIFNPTF9UQ1AsIG9wdG5hbWUsXFxubmV0L2NvcmUvZmlsdGVyLmMtNTcwMy1cXHRcXHRcXHRcXHRcXHQgS0VSTkVMX1NPQ0tQVFIob3B0dmFsKSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0MTA9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00NDgxLVxcbm5ldC9pcHY0L3RjcC5jOjQ0ODI6aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbm5ldC9pcHY0L3RjcC5jLTQ0ODMtXFx0XFx0ICAgICAgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00ODU3PWJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbm5ldC9pcHY0L3RjcC5jLTQ4NTgte1xcbm5ldC9pcHY0L3RjcC5jOjQ4NTk6XFx0LyogVENQIGRvX3RjcF9nZXRzb2Nrb3B0IGhhcyBvcHRpbWl6ZWQgZ2V0c29ja29wdCBpbXBsZW1lbnRhdGlvblxcbm5ldC9pcHY0L3RjcC5jLTQ4NjAtXFx0ICogdG8gYXZvaWQgZXh0cmEgc29ja2V0IGxvY2sgZm9yIFRDUF9aRVJPQ09QWV9SRUNFSVZFLlxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDg2OD1pbnQgdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg3Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwLmM6NDg3NzpcXHRyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBVU0VSX1NPQ0tQVFIob3B0dmFsKSxcXG5uZXQvaXB2NC90Y3AuYy00ODc4LVxcdFxcdFxcdFxcdCBVU0VSX1NPQ0tQVFIob3B0bGVuKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA0OjQ2LjQ5MTEwMzg4MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg0NzQ0NDI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYGNhX29wc2AgaXMgTlVMTCwgdGhlbiB0cnlpbmcgdG8gYWNjZXNzIGBjYV9vcHMtXHUwMDNlbmFtZWAgd2lsbCB0cmlnZ2VyIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGFua2Z1bGx5LCBJJ20gcHJldHR5IHN1cmUgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIG9vcHMgbWVjaGFuaXNtcyB3aWxsIGNhdGNoIHRoYXQga2luZCBvZiB0aGluZy4gSXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQg4oCTIGl0J3Mgbm90IGEgc2VjdXJpdHkgbGVhaywgbGlrZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHdvdWxkIGJlLiBTdGlsbCwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGtlcm5lbCBpc24ndCBjcmFzaGluZyFcblxuSGFuZyBvbiBhIHNlY29uZOKApiBEb2VzIGBkb190Y3BfZ2V0c29ja29wdGAgKml0c2VsZiogZG8gYSBudWxsIGNoZWNrIG9uIGBjYV9vcHNgPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcG90ZW50aWFsIGRlcmVmZXJlbmNlIGlzIGV2ZW4gcG9zc2libGUuIEJlc3QgdG8gYmUgc3VyZSBhbmQgdHJhY2UgdGhlIGNhbGxzLiBBbHJpZ2h0LCBJJ2xsIGdvIGNoZWNrIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDU3NyBpbiBgZG9fdGNwX2dldHNvY2tvcHRgLiBUaGF0IHNob3VsZCBzaG93IG1lIHRoZSByZWxldmFudCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzM3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNDo1OS4zMzg1NTEyNTlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5Mjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTYwOlxcdFxcdFxcdGludCBhdHRyO1xcbjQ1NjE6XFx0XFxuNDU2MjpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuNDU2MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTY0OlxcdFxcbjQ1NjU6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1NjY6XFx0XFx0XFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXFx1MDAzZWljc2tfY2Ffb3BzKTtcXG40NTY3OlxcdFxcdFxcdGlmIChjYV9vcHMgXFx1MDAyNlxcdTAwMjYgY2Ffb3BzLVxcdTAwM2VnZXRfaW5mbylcXG40NTY4OlxcdFxcdFxcdFxcdHN6ID0gY2Ffb3BzLVxcdTAwM2VnZXRfaW5mbyhzaywgfjBVLCBcXHUwMDI2YXR0ciwgXFx1MDAyNmluZm8pO1xcbjQ1Njk6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDU3MDpcXHRcXG40NTcxOlxcdFxcdFxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzeik7XFxuNDU3MjpcXHRcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNmxlbiwgc2l6ZW9mKGludCkpKVxcbjQ1NzM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNDU3NDpcXHRcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdHZhbCwgXFx1MDAyNmluZm8sIGxlbikpXFxuNDU3NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTc2OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1Nzc6XFx0XFx0fVxcbjQ1Nzg6XFx0XFx0Y2FzZSBUQ1BfUVVJQ0tBQ0s6XFxuNDU3OTpcXHRcXHRcXHR2YWwgPSAhaW5ldF9jc2tfaW5fcGluZ3BvbmdfbW9kZShzayk7XFxuNDU4MDpcXHRcXHRcXHRicmVhaztcXG40NTgxOlxcdFxcbjQ1ODI6XFx0XFx0Y2FzZSBUQ1BfQ09OR0VTVElPTjoge1xcbjQ1ODM6XFx0XFx0XFx0Y2hhciBjYV9uYW1lW1RDUF9DQV9OQU1FX01BWF0gPSB7fTtcXG40NTg0OlxcdFxcbjQ1ODU6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjQ1ODY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNDU4NzpcXHRcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX0NBX05BTUVfTUFYKTtcXG40NTg4OlxcdFxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXFxuNDU4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTkwOlxcdFxcbjQ1OTE6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1OTI6XFx0XFx0XFx0Y2Ffb3BzID0gUkVBRF9PTkNFKGljc2stXFx1MDAzZWljc2tfY2Ffb3BzKTtcXG40NTkzOlxcdFxcdFxcdG1lbWNweShjYV9uYW1lLCBjYV9vcHMtXFx1MDAzZW5hbWUsIHNpemVvZihjYV9uYW1lKSk7XFxuNDU5NDpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG40NTk1OlxcdFxcbjQ1OTY6XFx0XFx0XFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIGNhX25hbWUsIGxlbikpXFxuNDU5NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NTk4OlxcdFxcdFxcdHJldHVybiAwO1xcbjQ1OTk6XFx0XFx0fVxcbjQ2MDA6XFx0XFx0Y2FzZSBUQ1BfVUxQOlxcbjQ2MDE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZsZW4sIG9wdGxlbiwgc2l6ZW9mKGludCkpKVxcbjQ2MDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNDYwMzpcXHRcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgVENQX1VMUF9OQU1FX01BWCk7XFxuNDYwNDpcXHRcXHRcXHRpZiAoIWljc2stXFx1MDAzZWljc2tfdWxwX29wcykge1xcbjQ2MDU6XFx0XFx0XFx0XFx0bGVuID0gMDtcXG40NjA2OlxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2bGVuLCBzaXplb2YoaW50KSkpXFxuNDYwNzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40NjA4OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjQ2MDk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNDo1OS4zMzk5NDc0MjlaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIzNzU4NjE1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sIE5hbWUgUmV0cmlldmFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYFRDUF9DT05HRVNUSU9OYCAobGluZSA0NTkzKSB3aGVyZSBgY2Ffb3BzYCBpc24ndCBleHBsaWNpdGx5IGNoZWNrZWQgYmVmb3JlIHRoZSBgbWVtY3B5YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBjb25jZXJuaW5nIGJlY2F1c2UgaWYgYGNhX29wc2AgaXMgTlVMTCwgaXQnbGwgY3Jhc2guIEhvd2V2ZXIsIGFmdGVyIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgdGhpcyBzZWVtcyB1bmxpa2VseSBmb3IgYSBzdGFuZGFyZCBUQ1Agc29ja2V0IGFzIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBpcyBpbml0aWFsaXplZCBpbiBgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sYC4gVGhlIG9ubHkgbGlrZWx5IHNjZW5hcmlvIHdoZXJlIGBjYV9vcHNgIGNvdWxkIGJlIE5VTEwgaXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIE1QVENQLiBFdmVuIHRoZW4sIHRoZSBOVUxMIGRlcmVmZXJlbmNlIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy5cblxuTXkgZm9jdXMgcXVpY2tseSBzaGlmdHMgdG8gd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2AuIFRoaXMgaXMgZXhwbGljaXRseSB6ZXJvZWQsIHJpZ2h0IGZyb20gdGhlIHN0YXJ0LiBXZSBjb3B5IGBjYV9vcHMtXHUwMDNlbmFtZWAgaW50byBgY2FfbmFtZWAsIGFuZCB0aGVuIGBjYV9uYW1lYCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gR2l2ZW4gdGhlIHplcm8gaW5pdGlhbGl6YXRpb24gb2YgYGNhX25hbWVgIGFuZCB0aGUgZnVsbHkgaW5pdGlhbGl6ZWQgYGNhX29wcy1cdTAwM2VuYW1lYCwgdGhlcmUncyBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuXG5cblNvLCB0aGUgb3JpZ2luYWwgY29kZSBjb3BpZWQgZGlyZWN0bHkgZnJvbSBgaWNzay1cdTAwM2VpY3NrX2NhX29wcy1cdTAwM2VuYW1lYCB0byB1c2VyIHNwYWNlLiBUaGUgbmV3IGNvZGUgaXMgY29weWluZyB0byBhIGxvY2FsIHplcm8taW5pdGlhbGl6ZWQgYnVmZmVyLCBwcm90ZWN0ZWQgYnkgYW4gUkNVIGxvY2ssIGJlZm9yZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIFRoaXMgY2hhbmdlIGZpeGVzIGEgZGF0YSByYWNlIGJ5IHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIG9sZCBgY2Ffb3BzYCB3YXMgZnJlZWQuXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYG1lbWNweWAgZG9lc24ndCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGNvZGUgY29waWVzIGBzaXplb2YoY2FfbmFtZSlgLCB3aGljaCBpcyBgVENQX0NBX05BTUVfTUFYYC4gTm93LCBgY2Ffb3BzLVx1MDAzZW5hbWVgIGlzIGRlY2xhcmVkIGFzIGBjaGFyIG5hbWVbVENQX0NBX05BTUVfTUFYXTtgIHdpdGhpbiB0aGUgYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLiBTbywgYHNpemVvZihjYV9vcHMtXHUwMDNlbmFtZSlgIGlzICphbHNvKiBleGFjdGx5IGBUQ1BfQ0FfTkFNRV9NQVhgLiBUaGUgYG1lbWNweWAgcmVhZHMgZXhhY3RseSB0aGUgcmlnaHQgYW1vdW50IG9mIG1lbW9yeSBmcm9tIGFuIGFsbG9jYXRlZCBidWZmZXIuXG5cbk9rYXksIGxldCdzIGFkZHJlc3MgdGhlIHBvdGVudGlhbCB0aGF0IGBjYV9vcHMtXHUwMDNlbmFtZWAgY291bGQgY29udGFpbiB1bmluaXRpYWxpemVkIGJ5dGVzLiBCYXNlZCBvbiB3aGF0IEkga25vdyBvZiBidWlsdC1pbiBjb25nZXN0aW9uIGNvbnRyb2xzIHRoZXkgYXJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB0aGVyZWZvcmUgemVyby1pbml0aWFsaXplZC4gQlBGIGNvbmdlc3Rpb24gY29udHJvbHMgdXNlIGBicGZfb2JqX25hbWVfY3B5YCB3aGljaCBkb2VzIGBtZW1zZXQoZHN0LCAwLCBzaXplKWAgYmVmb3JlIGNvcHlpbmcgdGhlIG5hbWUuIFNvLCBgY2Ffb3BzLVx1MDAzZW5hbWVgIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC5cblxuTm93IHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogV2hhdCBhYm91dCBhIGtlcm5lbCBtb2R1bGUgdGhhdCByZWdpc3RlcnMgYSBjb25nZXN0aW9uIGNvbnRyb2wgYW5kICpkb2Vzbid0KiB6ZXJvLWluaXRpYWxpemUgdGhlIGBuYW1lYCBmaWVsZD8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGB0Y3BfY29uZ2VzdGlvbl9vcHNgIGluIG1vZHVsZXMuIFVzdWFsbHksIG1vZHVsZXMgZGVmaW5lIHRoZW0gYXMgYHN0YXRpYyBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIG15X2NhID0geyAuLi4gfTtgLiBTdGF0aWMgdmFyaWFibGVzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRvIGJlIGNlcnRhaW4gaWYgYW55IG1vZHVsZSBkeW5hbWljYWxseSBhbGxvY2F0ZXMgYHRjcF9jb25nZXN0aW9uX29wc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NTYwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA1OjIxLjcxNTgxMjUzNVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzMzgyOTM2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21hbGxvYy4qdGNwX2Nvbmdlc3Rpb25fb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNToyNi44NDk2NTE0NjZaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMjU0OTkzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBremFsbG9jLip0Y3BfY29uZ2VzdGlvbl9vcHNgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBremFsbG9jLip0Y3BfY29uZ2VzdGlvbl9vcHNgLiBUaGF0J3MgYSBwcmV0dHkgc3BlY2lmaWMgc2VhcmNoIHRlcm0sIHNvIEknbSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYWxsb2NhdGlvbiBvZiBjb25nZXN0aW9uIGNvbnRyb2wgb2JqZWN0cywgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX2Nvbmdlc3Rpb25fb3BzYCBzdHJ1Y3R1cmUuIFRoZSBga3phbGxvY2AgZnVuY3Rpb24gaGludHMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggemVyb2VkIG1lbW9yeS4gS25vd2luZyB0aGUga2VybmVsLCB0aGlzIHN1Z2dlc3RzIHdlJ3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3IGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0sIG9yIHBvdGVudGlhbGx5IG1vZGlmaWNhdGlvbnMgdG8gYW4gZXhpc3Rpbmcgb25lLCB3aGVyZSBhIGNsZWFuIGFsbG9jYXRpb24gaXMgY3J1Y2lhbC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGluaXRpYWxpemF0aW9uIGJ1Z3MgbHVya2luZyB3aXRoaW4gdGhvc2UgYWxsb2NhdGlvbiBwYXRocy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYXJvdW5kIHRoZSBhbGxvY2F0aW9ucyBhcmUgZG9pbmcuIFRoaXMgbG9va3MgaW50ZXJlc3RpbmcuLi4gbGV0J3MgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNTozNy4wNzUxNTM5OVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyNzcyOTA4MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvYy4qdGNwX2Nvbmdlc3Rpb25fb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODowNTo0Mi40MDI4OTEzNDJaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2OTI3MDk2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25nZXN0aW9uIENvbnRyb2wgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBiZWNhdXNlIG9mIHRoZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG5hbWUuIE15IGZpcnN0IHRob3VnaHQgd2FzIHRoYXQgdGhlIGNvZGUgbWlnaHQgYmUgaW50cm9kdWNpbmcgYSB2dWxuZXJhYmlsaXR5IGJ5IGNvcHlpbmcgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBuYW1lIChgY2Ffb3BzLVx1MDAzZW5hbWVgKSB0byBhIGxvY2FsIGJ1ZmZlciBhbmQgdGhlbiB0byB1c2VyIHNwYWNlLlxuXG5JIGNvbnNpZGVyZWQgdGhhdCBpZiB0aGUgYGNhX29wcy1cdTAwM2VuYW1lYCBmaWVsZCBpdHNlbGYgd2Fzbid0IGluaXRpYWxpemVkLCB3ZSBjb3VsZCBoYXZlIGEgcHJvYmxlbS4gSG93ZXZlciwgSSBxdWlja2x5IHJlYWxpemVkIHRoYXQgYWxsIGB0Y3BfY29uZ2VzdGlvbl9vcHNgIGFyZSBlaXRoZXIgc3RhdGljYWxseSBpbml0aWFsaXplZCBhdCBjb21waWxlIHRpbWUgKHRodXMgemVyb2VkKSBvciBhbGxvY2F0ZWQgdmlhIEJQRiwgd2hpY2ggaGFzIGJlZW4gdmVyaWZpZWQgdG8gemVyby1pbml0aWFsaXplIHRoZSBuYW1lIGZpZWxkLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGBjYV9vcHMtXHUwMDNlbmFtZWAuXG5cbkV2ZW4gaWYgdGhlIG5hbWUgKndhcyogdW5pbml0aWFsaXplZCwgdGhlIG9yaWdpbmFsIGNvZGUgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgc3BhY2UsIHNvIHRoZSBwYXRjaCBpc24ndCAqaW50cm9kdWNpbmcqIGEgbmV3IGlzc3VlIGJ1dCBpcyBjaGFuZ2luZyB0aGUgbWV0aG9kLiBUaGUgb3JpZ2luYWwgY29kZSBhbHJlYWR5IHVzZWQgYGxlbmAsIHVwIHRvIGBUQ1BfQ0FfTkFNRV9NQVhgLiBOb3csIHdlIGNvcHkgYHNpemVvZihjYV9uYW1lKWAgKHNhbWUgc2l6ZSBhcyBgVENQX0NBX05BTUVfTUFYYCkgZnJvbSBgY2Ffb3BzLVx1MDAzZW5hbWVgIHRvIGEgbG9jYWwgYnVmZmVyIGNhbGxlZCBgY2FfbmFtZWAsIGFuZCB0aGVuIGNvcHkgYSBwb3J0aW9uIG9mIHRoYXQgYnVmZmVyIHVwIHRvIGBsZW5gIGJ5dGVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb2RlIHJlYWRzIGV4YWN0bHkgYFRDUF9DQV9OQU1FX01BWGAgZnJvbSBgY2Ffb3BzLVx1MDAzZW5hbWVgLCBidXQgb25seSB3cml0ZXMgYGxlbmAgYnl0ZXMgdG8gdXNlciBzcGFjZS4gRXZlbiBpZiB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCBieXRlcyBhdCB0aGUgZW5kLCB0aGUgaXNzdWUgaXMgbm90IHRyaWdnZXJlZC5cblxuVGhlbiwgSSB0aG91Z2h0IGFib3V0IEtNU0FOLCBidXQgaWYgdGhlIGBjYV9vcHMtXHUwMDNlbmFtZWAgKmRpZCogY29udGFpbiB1bmluaXRpYWxpemVkIGJ5dGVzLCB0aGUgYG1lbWNweWAgdG8gYGNhX25hbWVgICp3b3VsZCogdHJpZ2dlciBhIEtNU0FOIHdhcm5pbmcuIEJ1dCB3ZSBrbm93IGl0J3MgaW5pdGlhbGl6ZWQsIHNvIHRoZSBLTVNBTiBjb25jZXJuIGlzIHVuZm91bmRlZC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIHF1aWNrbHkgc2VlIHRoZXNlIGNoYW5nZXMgYXJlIGFib3V0IGFkZGluZyBSQ1UgbG9ja2luZyBhbmQgYFJFQURfT05DRWAgb3IgYFdSSVRFX09OQ0VgIHRvIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYC4gVGhpcyBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuKiAgIEluIGBkb190Y3BfZ2V0c29ja29wdGAsIHdlIG5vdyBoYXZlIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgUkVBRF9PTkNFKGljc2stXHUwMDNlaWNza19jYV9vcHMpYCwgd2hpY2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMuIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuXG4qICAgSW4gYHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sYCwgYFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2NhX29wcywgY2EpYCBpcyB1c2VkLlxuKiAgIFNhbWUgdGhpbmcgZm9yIHRoZSBEQ1RDUCBpbml0aWFsaXphdGlvbi4gV2Ugc2VlIGBXUklURV9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2NhX29wcywgXHUwMDI2ZGN0Y3BfcmVubylgLlxuKiAgIFNpbWlsYXIgY2hhbmdlcyBpbiBgdGNwX2NhX29wZW5yZXFfY2hpbGRgIGFuZCBgdGNwX291dHB1dC5jYC4gQWdhaW4sIGp1c3QgYFdSSVRFX09OQ0VgLlxuKiAgIEZpbmFsbHksIHdlIHNlZSBgV1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfY2Ffb3BzLCBOVUxMKWAgaW4gYG1wdGNwX2NhX3Jlc2V0YC5cblxuKipDb25jbHVzaW9uKipcblxuVGhlIHBhdGNoIGZvY3VzZXMgb24gZml4aW5nIGRhdGEgcmFjZXMgYnkgdXNpbmcgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBhcm91bmQgdGhlIGBpY3NrLVx1MDAzZWljc2tfY2Ffb3BzYCBwb2ludGVyLiBJbiBgZG9fdGNwX2dldHNvY2tvcHRgLCBpdCBjb3BpZXMgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBuYW1lIHRvIGEgbG9jYWwgYnVmZmVyIGBjYV9uYW1lYCB1bmRlciBSQ1UgbG9jayBiZWZvcmUgc2VuZGluZyBpdCB0byB1c2VyIHNwYWNlLiBUaGUgbG9jYWwgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2Ugb2YgdGhlIGNvcHksIGBjYV9vcHMtXHUwMDNlbmFtZWAsIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSB3aXRoaW4gYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLCBhbmQgaXMgYWxzbyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCBlaXRoZXIgc3RhdGljYWxseSBvciBieSBCUEYncyB6ZXJvLWluaXRpYWxpemF0aW9uLiBUaGVyZSdzIG5vIHdheSB0aGlzIHBhdGNoIGlzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGxlYWtpbmcgaXQgdG8gdXNlciBzcGFjZS5cblxuVGhlIGlzc3VlIGFkZHJlc3NlZCBoZXJlIGlzIGRhdGEgcmFjZXMsIHdoaWNoIGNhbiBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gS0FTQU4gYW5kIEtDU0FOIGFyZSB3ZWxsIHN1aXRlZCB0byBkZXRlY3RpbmcgdGhvc2UgaXNzdWVzLCB0aGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGlzIHNwZWNpZmljIHBhdGNoLiBXZSBjYW4gdGhlcmVmb3JlIHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoZSBLTVNBTiByZWFzb25pbmcgaXMgdGhhdCBkdWUgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgY2Ffb3BzLVx1MDAzZW5hbWVgIHRoZSBLTVNBTiBmdXp6aW5nIHdvdWxkIG5vdCB0cmlnZ2VyIGFueSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDU3NSwiT3V0cHV0VG9rZW5zIjoyNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjA2OjA1LjA5NTYwNDMwM1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgb24gYGljc2stXFx1MDAzZWljc2tfY2Ffb3BzYCBieSBpbnRyb2R1Y2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGFubm90YXRpb25zLCBhbmQgYnkgY29weWluZyB0aGUgY29uZ2VzdGlvbiBjb250cm9sIG5hbWUgdG8gYSBsb2NhbCBidWZmZXIgdW5kZXIgUkNVIGxvY2sgaW4gYGRvX3RjcF9nZXRzb2Nrb3B0KClgLiBUaGUgbG9jYWwgYnVmZmVyIGBjYV9uYW1lYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGBjaGFyIGNhX25hbWVbVENQX0NBX05BTUVfTUFYXSA9IHt9O2ApLiBUaGUgc291cmNlIGJ1ZmZlciBgY2Ffb3BzLVxcdTAwM2VuYW1lYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgaW4gYHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHNgLCB3aGljaCBpcyBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQgKGVpdGhlciBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIsIG9yIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgemVyby1pbml0aWFsaXplZCBieSB0aGUgQlBGIGluZnJhc3RydWN0dXJlIHZpYSBgYnBmX29ial9uYW1lX2NweWApLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSBkYXRhIHJhY2VzIHRoYXQgY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBvbiBgaWNzay1cXHUwMDNlaWNza19jYV9vcHNgIGJ5IGludHJvZHVjaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgYW5ub3RhdGlvbnMsIGFuZCBieSBjb3B5aW5nIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbmFtZSB0byBhIGxvY2FsIGJ1ZmZlciB1bmRlciBSQ1UgbG9jayBpbiBgZG9fdGNwX2dldHNvY2tvcHQoKWAuIFRoZSBsb2NhbCBidWZmZXIgYGNhX25hbWVgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYGNoYXIgY2FfbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdID0ge307YCkuIFRoZSBzb3VyY2UgYnVmZmVyIGBjYV9vcHMtXFx1MDAzZW5hbWVgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBpbiBgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wc2AsIHdoaWNoIGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZCAoZWl0aGVyIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciwgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgdmlhIGBicGZfb2JqX25hbWVfY3B5YCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgS0NTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowd9q8x[1] Phase: Succeeded StartedAt: 2026-08-26 18:06:27 +0000 UTC FinishedAt: 2026-08-26 18:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 18:06:27 +0000 UTC FinishedAt: 2026-08-26 18:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2] Phase: Succeeded StartedAt: 2026-08-26 18:06:27 +0000 UTC FinishedAt: 2026-08-26 18:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-26 18:06:27 +0000 UTC FinishedAt: 2026-08-26 18:36:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 18:06:27 +0000 UTC FinishedAt: 2026-08-26 18:06:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 18:06:27 +0000 UTC FinishedAt: 2026-08-26 18:06:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd9q8x/series-workflowd9q8x-convert-artifact-4153301515/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 18:06:37 +0000 UTC FinishedAt: 2026-08-26 18:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 18:06:37 +0000 UTC FinishedAt: 2026-08-26 18:22:36 +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:*c7e046ff-c093-441c-8068-da2d135f5c37,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-workflowd9q8x/series-workflowd9q8x-convert-artifact-4153301515/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": "f120abb4-fa90-4df0-bc1f-e4563bb54e69", "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-workflowd9q8x/series-workflowd9q8x-build-action-2362594569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 18:06:37 +0000 UTC FinishedAt: 2026-08-26 18:22:26 +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:*c7e046ff-c093-441c-8068-da2d135f5c37,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-workflowd9q8x/series-workflowd9q8x-convert-artifact-4153301515/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": "f120abb4-fa90-4df0-bc1f-e4563bb54e69", "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-workflowd9q8x/series-workflowd9q8x-build-action-2362594569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 18:22:36 +0000 UTC FinishedAt: 2026-08-26 18:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 18:22:36 +0000 UTC FinishedAt: 2026-08-26 18:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 18:22:36 +0000 UTC FinishedAt: 2026-08-26 18:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 18:22:36 +0000 UTC FinishedAt: 2026-08-26 18:22:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd9q8x/series-workflowd9q8x-convert-artifact-403875682/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 18:22:46 +0000 UTC FinishedAt: 2026-08-26 18:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 18:22:46 +0000 UTC FinishedAt: 2026-08-26 18:24:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f120abb4-fa90-4df0-bc1f-e4563bb54e69,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-workflowd9q8x/series-workflowd9q8x-build-action-2362594569/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-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 18:25:01 +0000 UTC FinishedAt: 2026-08-26 18:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 18:25:01 +0000 UTC FinishedAt: 2026-08-26 18:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 18:25:01 +0000 UTC FinishedAt: 2026-08-26 18:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 18:25:01 +0000 UTC FinishedAt: 2026-08-26 18:36:27 +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:*c7e046ff-c093-441c-8068-da2d135f5c37,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-workflowd9q8x/series-workflowd9q8x-convert-artifact-403875682/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": "d1a76ec6-f991-45ea-95a6-725073b26fb5", "success": false },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-workflowd9q8x/series-workflowd9q8x-build-action-2014647222/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 18:25:01 +0000 UTC FinishedAt: 2026-08-26 18:36:17 +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:*c7e046ff-c093-441c-8068-da2d135f5c37,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-workflowd9q8x/series-workflowd9q8x-convert-artifact-403875682/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": "d1a76ec6-f991-45ea-95a6-725073b26fb5", "success": false },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-workflowd9q8x/series-workflowd9q8x-build-action-2014647222/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-08-26 18:36:27 +0000 UTC FinishedAt: 2026-08-26 18:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd9q8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["do_tcp_getsockopt","tcp_assign_congestion_control","tcp_ca_openreq_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_CONG_DCTCP","MPTCP"],"series_id":"2f1649c0-f2ae-4dba-91fe-85e6de6ced71","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-08-26 18:36:27 +0000 UTC FinishedAt: 2026-08-26 18:36:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}