Name: series-workflowwkssh Phase: Succeeded StartedAt: 2026-08-27 08:58:42 +0000 UTC FinishedAt: 2026-08-27 13:23:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[0] Phase: Succeeded StartedAt: 2026-08-27 08:58:42 +0000 UTC FinishedAt: 2026-08-27 09:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 08:58:42 +0000 UTC FinishedAt: 2026-08-27 09:38:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LLC2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LLC2" ], "series_id": "83773eea-ba88-4f19-aba7-4fa98dfc7112" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "llc_release_incoming_sock", "llc_accept_incoming_sock", "llc_release_incoming_children", "llc_conn_handler" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMTEMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfYWNjZXB0X2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBpbiB0aGUgTExDIHByb3RvY29sIGJ5IGludHJvZHVjaW5nIHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBgaW5jb21pbmdfd29ya2ApIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGlzdGVuZXIgc29ja2V0IHRlYXJkb3duLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIGZ1bmN0aW9uIHRvIHNlbmQgYSBETSByZXNwb25zZSAoYGxsY19jb25uX3NlbmRfZG1fcnNwYCksIHdoaWNoIGFsbG9jYXRlcyBhIG5ldyBza2IgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGl0cyBieXRlcyAoTExDIGhlYWRlciBhbmQgTUFDIGhlYWRlcikgYmVmb3JlIHRyYW5zbWlzc2lvbiwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkIHRvIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgTExDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cyBhbmQgbmV0d29yayB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTAzMjlkNTNhY2M3MDU2YmU2MzQwN2ZkY2UyYjg0ZWZmNDc2MTNjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA5OjEzOjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5pbmRleCBlMWEzMDI2OTY3MjM0Li5lODAwM2RiMTEwYWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICAqIFx0XHQgMjAwMSwgMjAwMiBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gXHUwMDNjYWNtZUBjb25lY3RpdmEuY29tLmJyXHUwMDNlXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfaWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGMuaFx1MDAzZVxuQEAgLTEzLDYgJiM0MzsxNCwxMCBAQFxuICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyXG4gXG4mIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDBcbiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfUEVORElORyAgICAgMVxuJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyXG4mIzQzO1xuICNkZWZpbmUgTExDMl9QX1RJTUUgICAgICAgICAgICAgICAyXG4gI2RlZmluZSBMTEMyX0FDS19USU1FICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgM1xuQEAgLTcyLDYgJiM0Mzs3Nyw5IEBAIHN0cnVjdCBsbGNfc29jayB7XG4gXHRcdFx0XHRcdCAgICAgIHJlY2VpdmVkIGFuZCBjYXVzZWQgc2VuZGluZyBGUk1SLlxuIFx0XHRcdFx0XHQgICAgICBVc2VkIGZvciByZXNlbmRpbmcgRlJNUiAqL1xuIFx0dTMyXHRcdCAgICBjbXNnX2ZsYWdzO1xuJiM0MztcdGF0b21pY190XHQgICAgaW5jb21pbmdfc3RhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2tcdCAgICAqaW5jb21pbmdfbGlzdGVuZXI7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IGluY29taW5nX3dvcms7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7XG4gfTtcbiBcbkBAIC05Myw3ICYjNDM7MTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0XHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xuIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7XG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcbiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4mIzQzO2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4mIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKTtcbiBcbiB2b2lkIGxsY19za19yZXNldChzdHJ1Y3Qgc29jayAqc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jXG5pbmRleCBiMDQ0N2MzM2RiZjA5Li5lODA1NDgwOWNmMGNmIDEwMDY0NFxuLS0tIGEvbmV0L2xsYy9hZl9sbGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2xsYy9hZl9sbGMuY1xuQEAgLTI3LDYgJiM0MzsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19zYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfcGR1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2Nvbm4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2Nfc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2VcbiBcbiAvKiByZW1lbWJlcjogdW5pbml0aWFsaXplZCBnbG9iYWwgZGF0YSBpcyB6ZXJvZWQgYmVjYXVzZSBpdHMgaW4gLmJzcyAqL1xuQEAgLTE5Niw2ICYjNDM7MTk3LDcgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYztcbiYjNDM7XHRib29sIGxpc3RlbmVyO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrID09IE5VTEwpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0yMDYsNiAmIzQzOzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdFx0bGxjLVx1MDAzZWxhZGRyLmxzYXAsIGxsYy1cdTAwM2VkYWRkci5sc2FwKTtcbiBcdGlmICghbGxjX3NlbmRfZGlzYyhzaykpXG4gXHRcdGxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2dGltZW8pKTtcbiYjNDM7XHRsaXN0ZW5lciA9IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU47XG4mIzQzO1x0aWYgKGxpc3RlbmVyKVxuJiM0MztcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbiBcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHtcbiBcdFx0c3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy1cdTAwM2VzYXA7XG4gXG5AQCAtMjE0LDE2ICYjNDM7MjE5LDE4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdFx0ICovXG4gXHRcdGxsY19zYXBfaG9sZChzYXApO1xuIFx0XHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVx1MDAzZXNhcCwgc2spO1xuJiM0MztcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRsbGNfc2FwX3B1dChzYXApO1xuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdH1cbiBcdG5ldGRldl9wdXQobGxjLVx1MDAzZWRldiwgXHUwMDI2bGxjLVx1MDAzZWRldl90cmFja2VyKTtcbiBcdHNvY2tfcHV0KHNrKTtcbiBcdHNvY2tfb3JwaGFuKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0bGxjX3NrX2ZyZWUoc2spO1xuJiM0MztcdGxsY19za19mcmVlKHNrLCB0cnVlKTtcbiBvdXQ6XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzIyLDYgJiM0Mzs3MjksMTcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdGdvdG8gZnJlZXM7XG4gXHRyYyA9IDA7XG4gXHRuZXdzayA9IHNrYi1cdTAwM2VzaztcbiYjNDM7XHRsb2NrX3NvY2tfbmVzdGVkKG5ld3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1x0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSB8fFxuJiM0MztcdCAgICAhbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKSkge1xuJiM0MztcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4mIzQzO1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdFx0cmVsZWFzZV9zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdHNvY2tfcHV0KG5ld3NrKTtcbiYjNDM7XHRcdHJjID0gLUVDT05OQUJPUlRFRDtcbiYjNDM7XHRcdGdvdG8gZnJlZXM7XG4mIzQzO1x0fVxuIFx0LyogYXR0YWNoIGNvbm5lY3Rpb24gdG8gYSBuZXcgc29ja2V0LiAqL1xuIFx0bGxjX3VpX3NrX2luaXQobmV3c29jaywgbmV3c2spO1xuIFx0c29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7XG5AQCAtNzM3LDYgJiM0Mzs3NTUsOCBAQCBzdGF0aWMgaW50IGxsY191aV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdHNrX2FjY2VwdHFfcmVtb3ZlZChzayk7XG4gXHRkcHJpbnRrKFwmIzM0OyVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0bGxjX3NrKHNrKS1cdTAwM2VhZGRyLnNsbGNfc2FwLCBuZXdsbGMtXHUwMDNlZGFkZHIubHNhcCk7XG4mIzQzO1x0cmVsZWFzZV9zb2NrKG5ld3NrKTtcbiYjNDM7XHRzb2NrX3B1dChuZXdzayk7XG4gZnJlZXM6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jXG5pbmRleCAyNjA0NjBkNTBmNTRjLi40YTM0ZjI0MGFkMmNjIDEwMDY0NFxuLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2xsY19jb25uLmNcbkBAIC0zMiw2ICYjNDM7MzIsNyBAQCBzdGF0aWMgaW50IGxsY19leGVjX2Nvbm5fdHJhbnNfYWN0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zICpsbGNfcXVhbGlmeV9jb25uX2V2KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gXG4gLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqL1xuIHN0YXRpYyBpbnQgbGxjX29mZnNldF90YWJsZVtOQlJfQ09OTl9TVEFURVNdW05CUl9DT05OX0VWXTtcbkBAIC04OCw2ICYjNDM7ODksMTMgQEAgaW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQgKiBza2ItXHUwMDNlc2sgcG9pbnRpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgaW5cbiBcdFx0ICogbGxjX2Nvbm5faGFuZGxlci4gLWFjbWVcbiBcdFx0ICovXG4mIzQzO1x0XHRpZiAoc2sgIT0gc2tiLVx1MDAzZXNrIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4mIzQzO1x0XHRcdHNvY2tfaG9sZChza2ItXHUwMDNlc2spO1xuJiM0MztcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlLFxuJiM0MztcdFx0XHRcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpO1xuJiM0MztcdFx0fVxuIFx0XHRza2JfZ2V0KHNrYik7XG4gXHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG5AQCAtMzU0LDcgJiM0MzszNjIsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFx0aW50IHJjID0gMTtcbiBcbi1cdGlmIChsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcbiYjNDM7XHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0gfHxcbiYjNDM7XHQgICAgbGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4gXHRcdGdvdG8gb3V0O1xuIFx0cmMgPSAwO1xuIFx0dHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpO1xuQEAgLTc2NSwyNyAmIzQzOzc3NCwxNjIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0bWVtY3B5KFx1MDAyNm5ld2xsYy1cdTAwM2VsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtXHUwMDNlbGFkZHIpKTtcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlZGFkZHIsIHNhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWRhZGRyKSk7XG4gXHRuZXdsbGMtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdG5ld2xsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lciA9IHNrO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2bmV3bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfUEVORElORyk7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNm5ld2xsYy1cdTAwM2VpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTtcbiYjNDM7XHRzb2NrX2hvbGQoc2spO1xuIFx0ZGV2X2hvbGQoZGV2KTtcbiBcdGxsY19zYXBfYWRkX3NvY2tldChsbGMtXHUwMDNlc2FwLCBuZXdzayk7XG4gb3V0OlxuIFx0cmV0dXJuIG5ld3NrO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBpbmNvbWluZ193b3JrKTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZsbGMtXHUwMDNlc2s7XG4mIzQzO1x0c3RydWN0IHNvY2sgKmxpc3RlbmVyID0gbGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuJiM0MztcbiYjNDM7XHRsb2NrX3NvY2sobGlzdGVuZXIpO1xuJiM0MztcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiYjNDM7XHRsbGNfc2tfZnJlZShzaywgZmFsc2UpO1xuJiM0MztcdHNvY2tfb3JwaGFuKHNrKTtcbiYjNDM7XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuJiM0MztcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4mIzQzO1x0ZGV2X3B1dChsbGMtXHUwMDNlZGV2KTtcbiYjNDM7XHRsbGMtXHUwMDNlZGV2ID0gTlVMTDtcbiYjNDM7XHRzb2NrX3B1dChzayk7XG4mIzQzO1x0c29ja19wdXQobGlzdGVuZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuJiM0MztcbiYjNDM7XHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT1cbiYjNDM7XHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UobGxjLVx1MDAzZXN0YXRlLCBMTENfQ09OTl9PVVRfT0ZfU1ZDKTtcbiYjNDM7XHRzb2NrX2hvbGQoc2spO1xuJiM0MztcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4mIzQzO1x0c2NoZWR1bGVfd29yayhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCxcbiYjNDM7XHRcdFx0XHQgIExMQ19JTkNPTUlOR19OT05FKSAhPSBMTENfSU5DT01JTkdfUVVFVUVEKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzb2NrX3B1dChsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIpO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSkge1xuJiM0MztcdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjYgbmV3c2sgIT0gc2spIHtcbiYjNDM7XHRcdFx0aW50IGluY29taW5nX3N0YXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4mIzQzO1x0XHRcdGluY29taW5nX3N0YXRlID1cbiYjNDM7XHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKTtcbiYjNDM7XHRcdFx0aWYgKGluY29taW5nX3N0YXRlICE9IExMQ19JTkNPTUlOR19OT05FKSB7XG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdFx0aWYgKGluY29taW5nX3N0YXRlID09IExMQ19JTkNPTUlOR19RVUVVRUQpXG4mIzQzO1x0XHRcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlclxuJiM0MzsgKiBhZGRyZXNzIGluIGxsYy1cdTAwM2VkYWRkciB5ZXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpuc2tiO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG4mIzQzO1x0aWYgKCFuc2tiKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbiYjNDM7XHRcdFx0ICAgIHNhZGRyLVx1MDAzZWxzYXAsIExMQ19QRFVfUlNQKTtcbiYjNDM7XHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbiYjNDM7XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbiYjNDM7XHRpZiAodW5saWtlbHkocmMpKVxuJiM0MztcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRldl9xdWV1ZV94bWl0KG5za2IpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrLCAqbmV3c2sgPSBOVUxMO1xuJiM0MztcdGJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuJiM0MztcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXHUwMDI2c2FkZHIubHNhcCk7XG4gXHRsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgXHUwMDI2ZGFkZHIubHNhcCk7XG4gXG4mIzQzO2xvb2t1cDpcbiBcdHNrID0gX19sbGNfbG9va3VwKHNhcCwgXHUwMDI2c2FkZHIsIFx1MDAyNmRhZGRyLCBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpKTtcbiBcdGlmICghc2spXG4gXHRcdGdvdG8gZHJvcDtcbiBcbiYjNDM7XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdG5ld3NrID0gc2s7XG4mIzQzO1x0XHRiaF9sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4mIzQzO1x0XHRcdG5ld3NrID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBsb29rdXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzayA9IGxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XG4mIzQzO1x0XHRzb2NrX2hvbGQoc2spO1xuJiM0MztcdFx0bmV3c2tfbG9va3VwX3JlZiA9IHRydWU7XG4mIzQzO1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGJoX2xvY2tfc29jayhzayk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXG4mIzQzO1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdGlmIChuZXdza19sb29rdXBfcmVmKSB7XG4mIzQzO1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbiYjNDM7XHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4mIzQzO1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbiYjNDM7XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbiYjNDM7XHRcdFx0Z290byByZXRyeV91bmxvY2s7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuJiM0MztcdFx0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHtcbiYjNDM7XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFx0LypcbiBcdCAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtXHUwMDNlYWNjZXB0XG4gXHQgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczpcbkBAIC03OTUsMTAgJiM0Mzs5MzksMjUgQEAgdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHQgKiBpbiB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBwcml2YXRlIGFyZWEuIC1hY21lXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkge1xuLVx0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZzYWRkciwgXHUwMDI2ZGFkZHIpO1xuLVx0XHRpZiAoIW5ld3NrKVxuLVx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHRpZiAoIW5ld3NrKSB7XG4mIzQzO1x0XHRcdGlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuJiM0MztcdFx0XHRcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuJiM0MztcdFx0XHRcdFx0dTggZl9iaXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0bGxjX3BkdV9kZWNvZGVfcGZfYml0KHNrYiwgXHUwMDI2Zl9iaXQpO1xuJiM0MztcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCBmX2JpdCk7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XG4mIzQzO1x0XHRcdFx0XHRsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgXHUwMDI2c2FkZHIsIDEpO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdG5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LCBcdTAwMjZzYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdFx0XHRpZiAoIW5ld3NrKVxuJiM0MztcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0XHRuZXdza19sb2NrZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuIFx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuQEAgLTgxMywxOCAmIzQzOzk3Miw0OSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZXNrID0gc2s7XG4gXHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja19lZnJlZTtcbiBcdH1cbi1cdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbiYjNDM7XHRpZiAodW5saWtlbHkobGxjX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkpIHtcbiYjNDM7XHRcdGlmIChuZXdzaykge1xuJiM0MztcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuJiM0MztcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdFx0fSBlbHNlIGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0XHQgICBMTENfSU5DT01JTkdfUEVORElORykge1xuJiM0MztcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xuIFx0XHRsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4tXHRlbHNlIHtcbiYjNDM7XHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuJiM0MztcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRkcHJpbnRrKFwmIzM0OyVzOiBhZGRpbmcgdG8gYmFja2xvZy4uLlxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpO1xuLVx0XHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKVxuJiM0MztcdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSkge1xuJiM0MztcdFx0XHRpZiAobmV3c2spXG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4gXHRcdFx0Z290byBkcm9wX3VubG9jaztcbiYjNDM7XHRcdH1cbiBcdH1cbiBvdXQ6XG4mIzQzO1x0aWYgKG5ld3NrX2xvY2tlZClcbiYjNDM7XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiBcdGJoX3VubG9ja19zb2NrKHNrKTtcbiBcdHNvY2tfcHV0KHNrKTtcbiYjNDM7XHRpZiAobmV3c2tfbG9va3VwX3JlZilcbiYjNDM7XHRcdHNvY2tfcHV0KG5ld3NrKTtcbiBcdHJldHVybjtcbiYjNDM7cmV0cnlfdW5sb2NrOlxuJiM0MztcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRuZXdza19sb2NrZWQgPSBmYWxzZTtcbiYjNDM7XHRiaF91bmxvY2tfc29jayhzayk7XG4mIzQzO1x0c29ja19wdXQoc2spO1xuJiM0MztcdHNvY2tfcHV0KG5ld3NrKTtcbiYjNDM7XHRuZXdzayA9IE5VTEw7XG4mIzQzO1x0bmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuJiM0MztcdGdvdG8gbG9va3VwO1xuIGRyb3A6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybjtcbkBAIC04NTIsMTIgJiM0MzsxMDQyLDUyIEBAIHN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRpbnQgcmMgPSAwO1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuJiM0MztcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cdTAwM2VzaztcbiBcbiBcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XG4tXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgLyogbm90IGNsb3NlZCAqL1xuJiM0MztcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbiYjNDM7XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuJiM0MztcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHRcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHxcbiYjNDM7XHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcbiYjNDM7XHRcdFx0ICAgIGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkge1xuJiM0MztcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdFx0ZWxzZVxuJiM0MztcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuJiM0MztcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCkge1xuJiM0MztcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0XHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XG4mIzQzO1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpIHtcbiYjNDM7XHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdH1cbiBcdH0gZWxzZSBpZiAobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19FVkVOVCkge1xuIFx0XHQvKiB0aW1lciBleHBpcmF0aW9uIGV2ZW50ICovXG4gXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cbkBAIC04NzAsNiAmIzQzOzExMDAsMjMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIG91dDpcbiBcdHJldHVybiByYztcbiYjNDM7cmV0cnk6XG4mIzQzO1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4mIzQzO1x0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbiYjNDM7XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNlPSBMTENfQ09OTl9TVEFURV9BRE0pXG4mIzQzO1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xuJiM0MztcdFx0ZWxzZSB7XG4mIzQzO1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiBvdXRfa2ZyZWVfc2tiOlxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRnb3RvIG91dDtcbkBAIC05NjAsMTYgJiM0MzsxMjA3LDE3IEBAIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcbiAvKipcbiAgKlx0bGxjX3NrX2ZyZWUgLSBGcmVlcyBhIExMQyBzb2NrZXRcbiAgKlx0QHNrOiAtIHNvY2tldCB0byBmcmVlXG4mIzQzOyAqXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXG4gICpcbiAgKlx0RnJlZXMgYSBMTEMgc29ja2V0XG4gICovXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4ge1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFxuIFx0bGxjLVx1MDAzZXN0YXRlID0gTExDX0NPTk5fT1VUX09GX1NWQztcbiBcdC8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi9cbi1cdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuJiM0MztcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xuICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQ1xuIFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDslczogdW5hY2txPSVkLCB0eHE9JWRcXG5cJiMzNDssIF9fZnVuY19fLFxuIFx0XHRza2JfcXVldWVfbGVuKFx1MDAyNmxsYy1cdTAwM2VwZHVfdW5hY2tfcSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMTEMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfYWNjZXB0X2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgYW5kIHdvcmtxdWV1ZSBmb3IgaGFuZGxpbmcgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHRvIGZpeCByYWNlIGNvbmRpdGlvbnMgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHRoZSBjb3JlIExMQyBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUEZfTExDIHNvY2tldHMgYW5kIG5ldHdvcmsgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwMzI5ZDUzYWNjNzA1NmJlNjM0MDdmZGNlMmI4NGVmZjQ3NjEzY2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwOToxMzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCmluZGV4IGUxYTMwMjY5NjcyMzQuLmU4MDAzZGIxMTBhZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaApAQCAtNiw2ICYjNDM7Niw3IEBACiAgKiAJCSAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyAmbHQ7YWNtZUBjb25lY3RpdmEuY29tLmJyJmd0OwogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2xsY19pZi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGxjLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsMTAgQEAKICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDIKIAomIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDAKJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19QRU5ESU5HICAgICAxCiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfUVVFVUVEICAgICAgMgomIzQzOwogI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDIKICNkZWZpbmUgTExDMl9BQ0tfVElNRSAgICAgICAgICAgICAxCiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgMwpAQCAtNzIsNiAmIzQzOzc3LDkgQEAgc3RydWN0IGxsY19zb2NrIHsKIAkJCQkJICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuCiAJCQkJCSAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovCiAJdTMyCQkgICAgY21zZ19mbGFnczsKJiM0MzsJYXRvbWljX3QJICAgIGluY29taW5nX3N0YXRlOwomIzQzOwlzdHJ1Y3Qgc29jawkgICAgKmluY29taW5nX2xpc3RlbmVyOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5jb21pbmdfd29yazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7CiB9OwogCkBAIC05Myw3ICYjNDM7MTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LAogCQkJICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTsKIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7Ci12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7dm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7CiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7Ym9vbCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzayk7CiAKIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IGIwNDQ3YzMzZGJmMDkuLmU4MDU0ODA5Y2YwY2YgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvbGxjX3NhcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9sbGNfcGR1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2xsY19jb25uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9sbGNfY19zdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3Bfc3RhdGVzLmgmZ3Q7CiAKIC8qIHJlbWVtYmVyOiB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIGlzIHplcm9lZCBiZWNhdXNlIGl0cyBpbiAuYnNzICovCkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLSZndDtzazsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYzsKJiM0MzsJYm9vbCBsaXN0ZW5lcjsKIAogCWlmICh1bmxpa2VseShzayA9PSBOVUxMKSkKIAkJZ290byBvdXQ7CkBAIC0yMDYsNiAmIzQzOzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAkJbGxjLSZndDtsYWRkci5sc2FwLCBsbGMtJmd0O2RhZGRyLmxzYXApOwogCWlmICghbGxjX3NlbmRfZGlzYyhzaykpCiAJCWxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdnRpbWVvKSk7CiYjNDM7CWxpc3RlbmVyID0gc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU47CiYjNDM7CWlmIChsaXN0ZW5lcikKJiM0MzsJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLSZndDtzYXA7CiAKQEAgLTIxNCwxNiAmIzQzOzIxOSwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJCSAqLwogCQlsbGNfc2FwX2hvbGQoc2FwKTsKIAkJbGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy0mZ3Q7c2FwLCBzayk7CiYjNDM7CQlsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCWxsY19zYXBfcHV0KHNhcCk7CiAJfSBlbHNlIHsKJiM0MzsJCWxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAl9CiAJbmV0ZGV2X3B1dChsbGMtJmd0O2RldiwgJmFtcDtsbGMtJmd0O2Rldl90cmFja2VyKTsKIAlzb2NrX3B1dChzayk7CiAJc29ja19vcnBoYW4oc2spOwogCXNvY2stJmd0O3NrID0gTlVMTDsKLQlsbGNfc2tfZnJlZShzayk7CiYjNDM7CWxsY19za19mcmVlKHNrLCB0cnVlKTsKIG91dDoKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMiw2ICYjNDM7NzI5LDE3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCQlnb3RvIGZyZWVzOwogCXJjID0gMDsKIAluZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CWxvY2tfc29ja19uZXN0ZWQobmV3c2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJaWYgKGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICAhbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKSkgewomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX05PTkUpCiYjNDM7CQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQlyZWxlYXNlX3NvY2sobmV3c2spOwomIzQzOwkJc29ja19wdXQobmV3c2spOwomIzQzOwkJcmMgPSAtRUNPTk5BQk9SVEVEOwomIzQzOwkJZ290byBmcmVlczsKJiM0MzsJfQogCS8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi8KIAlsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7CiAJc29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7CkBAIC03MzcsNiAmIzQzOzc1NSw4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCXNrX2FjY2VwdHFfcmVtb3ZlZChzayk7CiAJZHByaW50aygmIzM0OyVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXG4mIzM0OywgX19mdW5jX18sCiAJCWxsY19zayhzayktJmd0O2FkZHIuc2xsY19zYXAsIG5ld2xsYy0mZ3Q7ZGFkZHIubHNhcCk7CiYjNDM7CXJlbGVhc2Vfc29jayhuZXdzayk7CiYjNDM7CXNvY2tfcHV0KG5ld3NrKTsKIGZyZWVzOgogCWtmcmVlX3NrYihza2IpOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jCmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjRhMzRmMjQwYWQyY2MgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2xsY19jb25uLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBAIHN0YXRpYyBpbnQgbGxjX2V4ZWNfY29ubl90cmFuc19hY3Rpb25zKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgKmxsY19xdWFsaWZ5X2Nvbm5fZXYoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqLwogc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdOwpAQCAtODgsNiAmIzQzOzg5LDEzIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJICogc2tiLSZndDtzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpbgogCQkgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZQogCQkgKi8KJiM0MzsJCWlmIChzayAhPSBza2ItJmd0O3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCQlzb2NrX2hvbGQoc2tiLSZndDtzayk7CiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUsCiYjNDM7CQkJCSAgIExMQ19JTkNPTUlOR19RVUVVRUQpOwomIzQzOwkJfQogCQlza2JfZ2V0KHNrYik7CiAJCXNrYl9xdWV1ZV90YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwpAQCAtMzU0LDcgJiM0MzszNjIsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAlpbnQgcmMgPSAxOwogCi0JaWYgKGxsYy0mZ3Q7c3RhdGUgJmd0OyBOQlJfQ09OTl9TVEFURVMpCiYjNDM7CWlmIChsbGMtJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICBsbGMtJmd0O3N0YXRlICZndDsgTkJSX0NPTk5fU1RBVEVTKQogCQlnb3RvIG91dDsKIAlyYyA9IDA7CiAJdHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpOwpAQCAtNzY1LDI3ICYjNDM7Nzc0LDE2MiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtJmd0O2xhZGRyKSk7CiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtJmd0O2RhZGRyKSk7CiAJbmV3bGxjLSZndDtkZXYgPSBkZXY7CiYjNDM7CW5ld2xsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXIgPSBzazsKJiM0MzsJYXRvbWljX3NldCgmYW1wO25ld2xsYy0mZ3Q7aW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bmV3bGxjLSZndDtpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTsKJiM0MzsJc29ja19ob2xkKHNrKTsKIAlkZXZfaG9sZChkZXYpOwogCWxsY19zYXBfYWRkX3NvY2tldChsbGMtJmd0O3NhcCwgbmV3c2spOwogb3V0OgogCXJldHVybiBuZXdzazsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLAomIzQzOwkJCQkJCSAgICBpbmNvbWluZ193b3JrKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtsbGMtJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqbGlzdGVuZXIgPSBsbGMtJmd0O2luY29taW5nX2xpc3RlbmVyOwomIzQzOwomIzQzOwlsb2NrX3NvY2sobGlzdGVuZXIpOwomIzQzOwlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiYjNDM7CWxsY19za19mcmVlKHNrLCBmYWxzZSk7CiYjNDM7CXNvY2tfb3JwaGFuKHNrKTsKJiM0MzsJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7CiYjNDM7CXJlbGVhc2Vfc29jayhsaXN0ZW5lcik7CiYjNDM7CWRldl9wdXQobGxjLSZndDtkZXYpOwomIzQzOwlsbGMtJmd0O2RldiA9IE5VTEw7CiYjNDM7CXNvY2tfcHV0KHNrKTsKJiM0MzsJc29ja19wdXQobGlzdGVuZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwomIzQzOwlpZiAoYXRvbWljX3hjaGcoJmFtcDtsbGMtJmd0O2luY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGxsYy0mZ3Q7c3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpOwomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwlsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLSZndDtzYXAsIHNrKTsKJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2xsYy0mZ3Q7aW5jb21pbmdfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7bGxjLSZndDtpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCwKJiM0MzsJCQkJICBMTENfSU5DT01JTkdfTk9ORSkgIT0gTExDX0lOQ09NSU5HX1FVRVVFRCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc29ja19wdXQobGxjLSZndDtpbmNvbWluZ19saXN0ZW5lcik7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkpIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CiYjNDM7CQlpZiAobmV3c2sgJmFtcDsmYW1wOyBuZXdzayAhPSBzaykgewomIzQzOwkJCWludCBpbmNvbWluZ19zdGF0ZTsKJiM0MzsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpbmNvbWluZ19zdGF0ZSA9CiYjNDM7CQkJCWF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpOwomIzQzOwkJCWlmIChpbmNvbWluZ19zdGF0ZSAhPSBMTENfSU5DT01JTkdfTk9ORSkgewomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQkJaWYgKGluY29taW5nX3N0YXRlID09IExMQ19JTkNPTUlOR19RVUVVRUQpCiYjNDM7CQkJCQlzb2NrX3B1dChuZXdzayk7CiYjNDM7CQkJfQomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCX0KJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwl9CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoaXMgbWlycm9ycyB0aGUgQURNLXN0YXRlIERNIGFjdGlvbnMsIGJ1dCBhIGxpc3RlbmVyIGhhcyBubyBwZWVyCiYjNDM7ICogYWRkcmVzcyBpbiBsbGMtJmd0O2RhZGRyIHlldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgc3RydWN0IGxsY19hZGRyICpzYWRkciwgdTggZl9iaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi0mZ3Q7ZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7CiYjNDM7CWlmICghbnNrYikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLSZndDtsYWRkci5sc2FwLAomIzQzOwkJCSAgICBzYWRkci0mZ3Q7bHNhcCwgTExDX1BEVV9SU1ApOwomIzQzOwlsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTsKJiM0MzsJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi0mZ3Q7ZGV2LSZndDtkZXZfYWRkciwgc2FkZHItJmd0O21hYyk7CiYjNDM7CWlmICh1bmxpa2VseShyYykpCiYjNDM7CQlrZnJlZV9za2IobnNrYik7CiYjNDM7CWVsc2UKJiM0MzsJCWRldl9xdWV1ZV94bWl0KG5za2IpOwomIzQzO30KJiM0MzsKIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7Ci0Jc3RydWN0IHNvY2sgKnNrOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2ssICpuZXdzayA9IE5VTEw7CiYjNDM7CWJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlib29sIG5ld3NrX2xvY2tlZCA9IGZhbHNlOwogCiAJbGxjX3BkdV9kZWNvZGVfc2Eoc2tiLCBzYWRkci5tYWMpOwogCWxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCAmYW1wO3NhZGRyLmxzYXApOwogCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTsKIAlsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgJmFtcDtkYWRkci5sc2FwKTsKIAomIzQzO2xvb2t1cDoKIAlzayA9IF9fbGxjX2xvb2t1cChzYXAsICZhbXA7c2FkZHIsICZhbXA7ZGFkZHIsIGRldl9uZXQoc2tiLSZndDtkZXYpKTsKIAlpZiAoIXNrKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKHNrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJbmV3c2sgPSBzazsKJiM0MzsJCWJoX2xvY2tfc29jayhuZXdzayk7CiYjNDM7CQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgIT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlzb2NrX3B1dChuZXdzayk7CiYjNDM7CQkJbmV3c2sgPSBOVUxMOwomIzQzOwkJCWdvdG8gbG9va3VwOwomIzQzOwkJfQomIzQzOwkJc2sgPSBsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19saXN0ZW5lcjsKJiM0MzsJCXNvY2tfaG9sZChzayk7CiYjNDM7CQluZXdza19sb29rdXBfcmVmID0gdHJ1ZTsKJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJfQomIzQzOwogCWJoX2xvY2tfc29jayhzayk7CiYjNDM7CWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpCiYjNDM7CQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwlpZiAobmV3c2tfbG9va3VwX3JlZikgewomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQluZXdza19sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJZ290byByZXRyeV91bmxvY2s7CiYjNDM7CQlpZiAodW5saWtlbHkoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gfHwKJiM0MzsJCQkgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHsKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJfQomIzQzOwl9CiAJLyoKIAkgKiBUaGlzIGhhcyB0byBiZSBkb25lIGhlcmUgYW5kIG5vdCBhdCB0aGUgdXBwZXIgbGF5ZXIgLSZndDthY2NlcHQKIAkgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczoKQEAgLTc5NSwxMCAmIzQzOzkzOSwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkgKiBpbiB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBwcml2YXRlIGFyZWEuIC1hY21lCiAJICovCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkgewotCQlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi0mZ3Q7ZGV2LAotCQkJCQkJCSAgICAgICZhbXA7c2FkZHIsICZhbXA7ZGFkZHIpOwotCQlpZiAoIW5ld3NrKQotCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCWlmICghbmV3c2spIHsKJiM0MzsJCQlpZiAobGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHsKJiM0MzsJCQkJaWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7CiYjNDM7CQkJCQl1OCBmX2JpdDsKJiM0MzsKJiM0MzsJCQkJCWxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsICZhbXA7Zl9iaXQpOwomIzQzOwkJCQkJbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsICZhbXA7c2FkZHIsIGZfYml0KTsKJiM0MzsJCQkJfSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7CiYjNDM7CQkJCQlsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgJmFtcDtzYWRkciwgMSk7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCQl9CiYjNDM7CQkJbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi0mZ3Q7ZGV2LCAmYW1wO3NhZGRyLAomIzQzOwkJCQkJCQkgJmFtcDtkYWRkcik7CiYjNDM7CQkJaWYgKCFuZXdzaykKJiM0MzsJCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQluZXdza19sb2NrZWQgPSB0cnVlOwomIzQzOwkJfQogCQlza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTgxMywxOCAmIzQzOzk3Miw0OSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJc2tiLSZndDtzayA9IHNrOwogCQlza2ItJmd0O2Rlc3RydWN0b3IgPSBzb2NrX2VmcmVlOwogCX0KLQlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpCiYjNDM7CWlmICh1bmxpa2VseShsbGNfc2soc2tiLSZndDtzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSkgewomIzQzOwkJaWYgKG5ld3NrKSB7CiYjNDM7CQkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2soc2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spOwomIzQzOwkJfQomIzQzOwkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKIAkJbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwotCWVsc2UgewomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwl9IGVsc2UgewogCQlkcHJpbnRrKCYjMzQ7JXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXG4mIzM0OywgX19mdW5jX18pOwogCQlsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpOwotCQlpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSkKJiM0MzsJCWlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKSB7CiYjNDM7CQkJaWYgKG5ld3NrKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQl9CiAJfQogb3V0OgomIzQzOwlpZiAobmV3c2tfbG9ja2VkKQomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlzb2NrX3B1dChzayk7CiYjNDM7CWlmIChuZXdza19sb29rdXBfcmVmKQomIzQzOwkJc29ja19wdXQobmV3c2spOwogCXJldHVybjsKJiM0MztyZXRyeV91bmxvY2s6CiYjNDM7CWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJbmV3c2tfbG9ja2VkID0gZmFsc2U7CiYjNDM7CWJoX3VubG9ja19zb2NrKHNrKTsKJiM0MzsJc29ja19wdXQoc2spOwomIzQzOwlzb2NrX3B1dChuZXdzayk7CiYjNDM7CW5ld3NrID0gTlVMTDsKJiM0MzsJbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlnb3RvIGxvb2t1cDsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuOwpAQCAtODUyLDEyICYjNDM7MTA0Miw1MiBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiYjNDM7CXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiAKIAlpZiAobGlrZWx5KGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfUEFDS0VUKSkgewotCQlpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgLyogbm90IGNsb3NlZCAqLwomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIHJldHJ5OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8CiYjNDM7CQkJICAgIHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8CiYjNDM7CQkJICAgIGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSB7CiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQkJfQogCQkJcmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7Ci0JCWVsc2UKJiM0MzsJCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCX0gZWxzZSBpZiAobmV3c2sgJmFtcDsmYW1wOwomIzQzOwkJCSAgIGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmx0OyBMTENfQ09OTl9TVEFURV9BRE0pIHsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJCX0KJiM0MzsJCQlyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQl9IGVsc2UgaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpIHsKJiM0MzsJCQlyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTsKJiM0MzsJCX0gZWxzZSB7CiAJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQl9CiAJfSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7CiAJCS8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi8KIAkJaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpICAvKiBub3QgY2xvc2VkICovCkBAIC04NzAsNiAmIzQzOzExMDAsMjMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIG91dDoKIAlyZXR1cm4gcmM7CiYjNDM7cmV0cnk6CiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmd0Oz0gTExDX0NPTk5fU1RBVEVfQURNKQomIzQzOwkJCXJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKJiM0MzsJCX0KJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfa2ZyZWVfc2tiOwogb3V0X2tmcmVlX3NrYjoKIAlrZnJlZV9za2Ioc2tiKTsKIAlnb3RvIG91dDsKQEAgLTk2MCwxNiAmIzQzOzEyMDcsMTcgQEAgdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogLyoqCiAgKglsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldAogICoJQHNrOiAtIHNvY2tldCB0byBmcmVlCiYjNDM7ICoJQHN5bmM6IHdoZXRoZXIgdG8gc3luY2hyb25vdXNseSBzdG9wIHRpbWVycwogICoKICAqCUZyZWVzIGEgTExDIHNvY2tldAogICovCi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogewogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAogCWxsYy0mZ3Q7c3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDOwogCS8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi8KLQlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgc3luYyk7CiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0MKIAlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXM6IHVuYWNrcT0lZCwgdHhxPSVkXG4mIzM0OywgX19mdW5jX18sCiAJCXNrYl9xdWV1ZV9sZW4oJmFtcDtsbGMtJmd0O3BkdV91bmFja19xKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9sbGMvYWZfbGxjLmNgLCBgbmV0L2xsYy9sbGNfY29ubi5jYCwgYW5kIGBpbmNsdWRlL25ldC9sbGNfY29ubi5oYCBpbW1lZGlhdGVseSBzaWduYWxzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHRoZSBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBzdGF0ZSBtYWNoaW5lIChgaW5jb21pbmdfc3RhdGVgKSwgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCksIGFuZCBtb2RpZmljYXRpb25zIHRvIGNvbm5lY3Rpb24gaGFuZGxpbmcgZnVuY3Rpb25zIChgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBgbGxjX3VpX2FjY2VwdGAsIGBsbGNfdWlfcmVsZWFzZWApIHN0cm9uZ2x5IHN1Z2dlc3RzIHJhY2UgY29uZGl0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMgYXJlIGJlaW5nIGFkZHJlc3NlZCBpbiB0aGUgaGFuZGxpbmcgb2YgaW5jb21pbmcgY29ubmVjdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldHMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgTExDIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gb3VyIHRhcmdldCBlbnZpcm9ubWVudHMuIFRoYW5rZnVsbHksIHNpbmNlIExMQyBpcyBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgcHJvdG9jb2wgKDgwMi4yKSwgYW5kIGNhbiBiZSB1c2VkIG92ZXIgc3RhbmRhcmQgdmlydHVhbCBFdGhlcm5ldCBpbnRlcmZhY2VzIGxpa2UgYHZldGhgLCBgZHVtbXlgLCBhbmQgYGxvb3BiYWNrYCwgSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIGluY2x1ZGUgaXQgaW4gb3VyIGZ1enppbmcgc2NvcGUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBuZXQvbGxjL0tjb25maWdgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGJldHRpbmcgd2UmIzM5O2xsIGZpbmQgYENPTkZJR19MTENgIG9yIHBvc3NpYmx5IGBDT05GSUdfTExDMmAgaW4gdGhlcmUuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGNvbmZpcm0gdGhvc2UgYW5kIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgc28gd2UgY2FuIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBlbmFibGVkIGZvciBvdXIgZnV6emluZyBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTExDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2xsYy9LY29uZmlnOjI6Y29uZmlnIExMQ1xubmV0L2xsYy9LY29uZmlnLTMtXHR0cmlzdGF0ZVxubmV0L2xsYy9LY29uZmlnLTQtXG5uZXQvbGxjL0tjb25maWc6NTpjb25maWcgTExDMlxubmV0L2xsYy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgc3RhY2sgY29uZmlndXJhdGlvbjoKCioqTExDMiBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBDT05GSUdfTExDMmAgaGVyZS4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBzd2l0Y2gsIHRoZSBiaWcgb25lLCB0aGUgb25lIHRoYXQgKmVuYWJsZXMqIExMQyB0eXBlIDIgc3VwcG9ydC4gQW5kLCBhcyBJIHJlY2FsbCwgdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIGluIGBhZl9sbGMuY2AsIHNwZWNpZmljYWxseSB0aGUgc29ja2V0LXJlbGF0ZWQgY29kZS4gR2l2ZW4gdGhhdCwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9sbGMvTWFrZWZpbGVgLiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgYnVpbHQgYXMgZXhwZWN0ZWQuIE1ha2luZyBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJpZ2h0LCBhbmQgdGhhdCB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlcyBnZXQgbGlua2VkIGNvcnJlY3RseS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCBpcyBhbGwgZ29pbmcgYXMgcGxhbm5lZCwgYW5kIHRoYXQgdGhlIGJ1aWxkIGlzIHNldCB1cCBhcHByb3ByaWF0ZWx5LiBJdCYjMzk7cyBhIGtleSBwaWVjZSB0byBtYWtlIHN1cmUgTExDdjIgc29ja2V0cyBhcmUgY29ycmVjdGx5IGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfbGxjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbGxjL01ha2VmaWxlPTE1PWxsYzIteSA6PSBsbGNfaWYubyBsbGNfY19ldi5vIGxsY19jX2FjLm8gbGxjX2Nvbm4ubyBsbGNfY19zdC5vIGxsY19wZHUubyBcXFxubmV0L2xsYy9NYWtlZmlsZToxNjpcdCAgbGxjX3NhcC5vIGxsY19zX2FjLm8gbGxjX3NfZXYubyBsbGNfc19zdC5vIGFmX2xsYy5vIGxsY19zdGF0aW9uLm9cbm5ldC9sbGMvTWFrZWZpbGUtMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExMQzIgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGBsbGMyLXlgIGRlZmluaXRlbHkgaW1wbGllcyB0aGF0IGBhZl9sbGMub2AgaXMgaW52b2x2ZWQsIHdoaWNoIGNvbmZpcm1zIHRoYXQgYENPTkZJR19MTEMyYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QsIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suIE5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmdXp6LgoKRnJvbSB0aGUgcGF0Y2ggYW5hbHlzaXMsIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZDogYGxsY191aV9yZWxlYXNlYCwgYGxsY191aV9hY2NlcHRgLCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AsIGBsbGNfY29ubl9zZXJ2aWNlYCwgYGxsY19jcmVhdGVfaW5jb21pbmdfc29ja2AsIGBsbGNfaW5jb21pbmdfc29ja193b3JrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYGxsY19jb25uX3NlbmRfZG1fcnNwYCwgYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX2JhY2tsb2dfcmN2YCwgYW5kIGBsbGNfc2tfZnJlZWAuCgpCYXNlZCBvbiB0aG9zZSBtb2RpZmljYXRpb25zLCBteSBpbml0aWFsIGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gYGxsY191aV9hY2NlcHRgLCBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBhbmQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgZGF0YSBoYW5kbGluZy4KCkkgc3VzcGVjdCB0aGF0IGBsbGNfY29ubl9oYW5kbGVyYCBpcyBsaWtlbHkgY2FsbGVkIGZyb20gYGxsY19yY3ZgLCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdCBpbiBgbmV0L2xsYy9sbGNfaW5wdXQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvYWZfbGxjLmM9MTI2OD1zdGF0aWMgaW50IF9faW5pdCBsbGMyX2luaXQodm9pZClcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTEyOTMtXHRsbGNfYWRkX3BhY2soTExDX0RFU1RfU0FQLCBsbGNfc2FwX2hhbmRsZXIpO1xubmV0L2xsYy9hZl9sbGMuYzoxMjk0Olx0bGxjX2FkZF9wYWNrKExMQ19ERVNUX0NPTk4sIGxsY19jb25uX2hhbmRsZXIpO1xubmV0L2xsYy9hZl9sbGMuYy0xMjk1LW91dDpcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9NTc9aW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04OS1cdFx0ICogc2tiLVx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXG5uZXQvbGxjL2xsY19jb25uLmM6OTA6XHRcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXG5uZXQvbGxjL2xsY19jb25uLmMtOTEtXHRcdCAqL1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz04NjM9c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtODgyLVxubmV0L2xsYy9sbGNfY29ubi5jOjg4Mzp2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9sbGMvbGxjX2Nvbm4uYy04ODQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQ3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTExDIENvbm5lY3Rpb24gSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBMTEMgY29ubmVjdGlvbiBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBlbnRyeSBwb2ludHMuIGBsbGNfY29ubl9oYW5kbGVyYCBpcyB3aGVyZSBldmVyeXRoaW5nIHN0YXJ0cywgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIGNvbm5lY3Rpb24gcGFja2V0cyDigJMgdGhhdCYjMzk7cyBjZW50cmFsLiBUaGVuIHdlIGhhdmUgYGxsY191aV9hY2NlcHRgLCB0aGUgYWNjZXB0IHN5c2NhbGwgaGFuZGxlcjsgaXQgbWFuYWdlcyBjb25uZWN0aW9ucyB0aGF0IGFyZSBiZWluZyBlc3RhYmxpc2hlZCBsb2NhbGx5LiAgYGxsY191aV9yZWxlYXNlYCBoYW5kbGVzIHRoZSBjbG9zdXJlIG9mIHRoZXNlIGNvbm5lY3Rpb25zLCB3aGljaCBpcyBhbm90aGVyIGNyaXRpY2FsIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQuIEFuZCBmaW5hbGx5LCBgbGxjX2JhY2tsb2dfcmN2YCwgdGhlIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIHRoZSBjb25uZWN0aW9uIGJhY2tsb2csIGlzIHRoZSBsYXN0IHBvaW50IEkgd2FudCB0byBmdWxseSB1bmRlcnN0YW5kLgoKTXkgaW5pdGlhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmb3VyIGZ1bmN0aW9uczogYGxsY191aV9hY2NlcHRgLCBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGFuZCBgbGxjX2JhY2tsb2dfcmN2YC4gVGhleSByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgb2YgdGhlIExMQyBjb25uZWN0aW9uIG1hbmFnZW1lbnQuCgpBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYGxsY19jb25uX2hhbmRsZXJgIGlzbiYjMzk7dCBzdGF0aWMsIHNvIGl04oCZcyBsaWtlbHkgZXhwb3NlZCBpbiB0aGUgc3ltYm9sIHRhYmxlOyBidXQgYmVmb3JlIEkgZGVsdmUgaW50byBpdCBmdWxseSBJIHdhbnQgdG8gc2VlIGlmIGBsbGNfYmFja2xvZ19yY3ZgIGlzIHN0YXRpYy4gRnJvbSB3aGF0IEkgcmVtZW1iZXIgaXQgaXMgc3RhdGljIGluIGBuZXQvbGxjL2xsY19jb25uLmNgLCBzbyBJJiMzOTtsbCBnbyBjaGVjayB0aGF0IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY19iYWNrbG9nX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2Nvbm4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbGxjL2xsY19jb25uLmM9MTAyOD1zdGF0aWMgYXRvbWljX3QgbGxjX3NvY2tfbnI7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTEwMzEtLyoqXG5uZXQvbGxjL2xsY19jb25uLmM6MTAzMjogKlx0bGxjX2JhY2tsb2dfcmN2IC0gUHJvY2Vzc2VzIHJ4IGZyYW1lcyBhbmQgZXhwaXJlZCB0aW1lcnMuXG5uZXQvbGxjL2xsY19jb25uLmMtMTAzMy0gKlx0QHNrOiBMTEMgc29jayAocDgwMjIgY29ubmVjdGlvbilcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtMTA0MC0gKi9cbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMDQxOnN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDQyLXtcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9MTEzMT1zdGF0aWMgdm9pZCBsbGNfc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTExNTUtXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmxsYy1cdTAwM2VwZHVfdW5hY2tfcSk7XG5uZXQvbGxjL2xsY19jb25uLmM6MTE1NjpcdHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2ID0gbGxjX2JhY2tsb2dfcmN2O1xubmV0L2xsYy9sbGNfY29ubi5jLTExNTctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBMTEMgQmFja2xvZyBhbmQgQ29ubmVjdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBgbGxjX2JhY2tsb2dfcmN2YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGFsc28gYXNzaWduZWQgdG8gYHNrLSZndDtza19iYWNrbG9nX3JjdmAuIEhtbSwgSSYjMzk7bSB0aGlua2luZyBpdCBtaWdodCBiZSBjbGVhbmVyIHRvIGxldmVyYWdlIHRoZSBleGlzdGluZyBoYW5kbGVycywgYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX3VpX2FjY2VwdGAsIGFuZCBgbGxjX3VpX3JlbGVhc2VgIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIHN0YXRpYyBmdW5jdGlvbi4gSXQgZmVlbHMgbGlrZSB0aGVyZSYjMzk7cyBwcm9iYWJseSBhIG1vcmUgZWxlZ2FudCB3YXkgdG8gYWNjb21wbGlzaCB0aGUgc2FtZSB0aGluZywgbGV2ZXJhZ2luZyBleGlzdGluZyBjb25uZWN0aW9uIG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gTm93LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBMZXQgbWUgc2VlLi4uIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCBpcyAqbm90KiBzdGF0aWMsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1vZGlmaWVkLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIG1ha2Ugc3VyZSBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYWNjdXJhdGUgYmVmb3JlIEkgbWFrZSBhbnkgZGVjaXNpb25zIGFib3V0IHJlZmFjdG9yaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IG9uZSBpcyBiZWluZyB1c2Vk4oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY19jb25uX3N0YXRlX3Byb2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbGxjL2xsY19jb25uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2xsYy9sbGNfY29ubi5jPTQzPWludCBzeXNjdGxfbGxjMl9idXN5X3RpbWVvdXQgPSBMTEMyX0JVU1lfVElNRSAqIEhaO1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy00NS0vKipcbm5ldC9sbGMvbGxjX2Nvbm4uYzo0NjogKlx0bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyAtIHNlbmRzIGV2ZW50IHRvIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZVxubmV0L2xsYy9sbGNfY29ubi5jLTQ3LSAqXHRAc2s6IGNvbm5lY3Rpb25cbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtNTYtICovXG5uZXQvbGxjL2xsY19jb25uLmM6NTc6aW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2xsYy9sbGNfY29ubi5jLTU4LXtcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9MTgwPXZvaWQgbGxjX2Nvbm5fc2VuZF9wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTMtICpcdFByZXBhcmVzIHNlcnZpY2UgcGFyYW1ldGVycyAocHJpbSBhbmQgcHJpbV9kYXRhKS4gY2FsbGluZyBpbmRpY2F0aW9uXG5uZXQvbGxjL2xsY19jb25uLmM6MTk0OiAqXHRmdW5jdGlvbiB3aWxsIGJlIGRvbmUgaW4gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcy5cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTUtICovXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTc1Mz1zdGF0aWMgaW50IGxsY19jb25uX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTc1OC1cdGV2LVx1MDAzZXJlYXNvbiA9IDA7XG5uZXQvbGxjL2xsY19jb25uLmM6NzU5Olx0cmV0dXJuIGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jb25uLmMtNzYwLX1cbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05NjQtXHRcdCAqIENhbiYjMzk7dCBiZSBza2Jfc2V0X293bmVyX3IsIHRoaXMgd2lsbCBiZSBkb25lIGF0IHRoZVxubmV0L2xsYy9sbGNfY29ubi5jOjk2NTpcdFx0ICogbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyBmdW5jdGlvbiwgbGF0ZXIgb24sIHdoZW4gd2Ugd2lsbCB1c2Vcbm5ldC9sbGMvbGxjX2Nvbm4uYy05NjYtXHRcdCAqIHNrYl9xdWV1ZV9yY3Zfc2tiIHRvIHNlbmQgaXQgdG8gdXBwZXIgbGF5ZXJzLCB0aGlzIGlzXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTEwNDE9c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDkzLVx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXG5uZXQvbGxjL2xsY19jb25uLmM6MTA5NDpcdFx0XHRyYyA9IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jb25uLmMtMTA5NS1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBMTEMgQ29ubmVjdGlvbiBTdGF0ZSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlLCBteSBpbml0aWFsIGluc3RpbmN0IHNheXMgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgIGlzIGEgc3Ryb25nIGNvbnRlbmRlciBmb3IgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIHN0YXRlIHRyYW5zaXRpb25zLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0LiBOb3csIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29ubmVjdGlvbiYjMzk7cyBzdGF0ZSB0cmFuc2l0aW9ucywgSSB0aGluayBpdCYjMzk7cyBjcnVjaWFsIHRvIGNoZWNrIHRoZSB1c2VyIGludGVyZmFjZSBzaWRlIGFzIHdlbGwuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBpbiBgbmV0L2xsYy9hZl9sbGMuY2AuIFRoZXNlIHNob3VsZCBpbGx1bWluYXRlIGhvdyB0aGUgdXBwZXIgbGF5ZXJzIGFyZSBpbnRlcmFjdGluZyB3aXRoIGFuZCBtYW5pcHVsYXRpbmcgY29ubmVjdGlvbiBzdGF0ZXMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGxpa2VseSBjbGFyaWZ5IGEgbG90IGFib3V0IHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gZmxvdyBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHN0YXRlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY191aV9hY2NlcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbGxjL2FmX2xsYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvYWZfbGxjLmM9Njc3PXN0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9hZl9sbGMuYy02OTItLyoqXG5uZXQvbGxjL2FmX2xsYy5jOjY5MzogKlx0bGxjX3VpX2FjY2VwdCAtIGFjY2VwdCBhIG5ldyBpbmNvbWluZyBjb25uZWN0aW9uLlxubmV0L2xsYy9hZl9sbGMuYy02OTQtICpcdEBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLlxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtNzAwLSAqL1xubmV0L2xsYy9hZl9sbGMuYzo3MDE6c3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG5uZXQvbGxjL2FmX2xsYy5jLTcwMi1cdFx0XHQgc3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcbi0tXG5uZXQvbGxjL2FmX2xsYy5jPTEyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTEyNDctXHQuc29ja2V0cGFpciAgPSBzb2NrX25vX3NvY2tldHBhaXIsXG5uZXQvbGxjL2FmX2xsYy5jOjEyNDg6XHQuYWNjZXB0ICAgICAgPSBsbGNfdWlfYWNjZXB0LFxubmV0L2xsYy9hZl9sbGMuYy0xMjQ5LVx0LmdldG5hbWUgICAgID0gbGxjX3VpX2dldG5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGZyYW1lZCBhcyB5b3VyIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqU3RhdGljIEZ1bmN0aW9uIENoZWNrIGFuZCBGb2xsb3ctVXAqKgoKT2theSwgc28gYGxsY191aV9hY2NlcHRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQsIHdoaWNoIGNhbiBpbXBhY3QgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgcmV1c2UgYWNyb3NzIGRpZmZlcmVudCBtb2R1bGVzLiBHaXZlbiB0aGlzLCBJIHNob3VsZCBpbW1lZGlhdGVseSBjaGVjayB3aGF0IHRoYXQgaW1wbGllcy4gTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBsbGNfdWlfcmVsZWFzZWAuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHByb2JhYmx5IGltcG9ydGFudCwgaWYgb25lIGlzIHN0YXRpYyB0aGVuIHdoeSwgYW5kIGlmIHRoZXkgYXJlIHJlbGF0ZWQsIGhvdy4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHJlbGVhc2luZyBzb21ldGhpbmcgdGhhdCB3YXMgYWNjZXB0ZWQsIG9yIGhhbmRsZWQgZGlmZmVyZW50bHkgaW4gYSBzdGF0aWMgY29udGV4dCwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBwb3RlbnRpYWwgZGVzaWduIGltcGxpY2F0aW9ucyBvciBjb25zdHJhaW50cy4gSSB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGNhbGxzIGl0IG1ha2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY191aV9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy9hZl9sbGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbGxjL2FmX2xsYy5jPTE2Nz1zdGF0aWMgaW50IGxsY191aV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4tLVxubmV0L2xsYy9hZl9sbGMuYy0xOTAtLyoqXG5uZXQvbGxjL2FmX2xsYy5jOjE5MTogKlx0bGxjX3VpX3JlbGVhc2UgLSBzaHV0ZG93biBzb2NrZXRcbm5ldC9sbGMvYWZfbGxjLmMtMTkyLSAqXHRAc29jazogU29ja2V0IHRvIHJlbGVhc2UuXG4tLVxubmV0L2xsYy9hZl9sbGMuYy0xOTUtICovXG5uZXQvbGxjL2FmX2xsYy5jOjE5NjpzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5uZXQvbGxjL2FmX2xsYy5jLTE5Ny17XG4tLVxubmV0L2xsYy9hZl9sbGMuYz0xMjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGxsY191aV9vcHMgPSB7XG4tLVxubmV0L2xsYy9hZl9sbGMuYy0xMjQzLVx0Lm93bmVyICAgICAgID0gVEhJU19NT0RVTEUsXG5uZXQvbGxjL2FmX2xsYy5jOjEyNDQ6XHQucmVsZWFzZSAgICAgPSBsbGNfdWlfcmVsZWFzZSxcbm5ldC9sbGMvYWZfbGxjLmMtMTI0NS1cdC5iaW5kXHQgICAgID0gbGxjX3VpX2JpbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTU4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIEFQSSBFbnRyeXBvaW50cyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhpcyBmdXp6aW5nIHNldHVwLiBUaGUgcHJvbXB0IGlzIHByZXR0eSBjbGVhcjogaXQgd2FudHMgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2U7IGlubGluaW5nIHdvdWxkIG9ic2N1cmUgdGhlIGZ1bmN0aW9uJiMzOTtzIGRpc3RpbmN0IGFkZHJlc3MsIG1ha2luZyBpdCBoYXJkZXIgZm9yIHRoZSBmdXp6ZXIgdG8gdGFyZ2V0IHRoZW0gZWZmZWN0aXZlbHkuCgpSaWdodCBvZmYgdGhlIGJhdCwgYGxsY191aV9yZWxlYXNlYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgbWVhbnMgaXQgd29uJiMzOTt0IGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MgaW4gdGhlIGZ1enplciB1bmxlc3MgaXQgc29tZWhvdyAqaXNuJiMzOTt0KiBpbmxpbmVkLiBHcmFudGVkLCB0aGVzZSBgcHJvdG9fb3BzYCBmdW5jdGlvbnMgKnNob3VsZG4mIzM5O3QqIGJlIGlubGluZWQgYmVjYXVzZSB0aGVpciBhZGRyZXNzZXMgYXJlIHVzdWFsbHkgdGFrZW4sIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYSByaXNrLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGV4cGxvcmUgd2hldGhlciBvciBub3QgaXQmIzM5O3MgYWN0dWFsbHkgaW5saW5lZC4KCkhvd2V2ZXIsIHNpbmNlIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBhcmUgaG9va2VkIGludG8gYHByb3RvX29wc2AsIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCBhdCBhbGwuIEkgd2lsbCB0YWtlIHRoaXMgaW50byBhY2NvdW50LgoKVG8gYmUgZXh0cmEgc2FmZSwgSSBzaG91bGQgY29uc2lkZXIgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlc2Ugb3BlcmF0aW9ucy4gSSBjYW4gYWxzbyBpbmNsdWRlIGBsbGNfY29ubl9oYW5kbGVyYCBhbmQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AgYW5kIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgIGFyZSAqbm9uLXN0YXRpYyogYW5kICpuZXcqIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2guIEJpbmdvISBUaG9zZSBhcmUgZGVmaW5pdGVseSBwcmltZSBjYW5kaWRhdGVzIHRvIGluY2x1ZGUuIEkgd2lsbCBuZWVkIHRvIHByaW9yaXRpemUgdGhvc2UgdHdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy9sbGNfY29ubi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2Nvbm4uYz03ODc9c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTgwNi1cbm5ldC9sbGMvbGxjX2Nvbm4uYzo4MDc6dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9sbGMvbGxjX2Nvbm4uYy04MDgte1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz04MzM9dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTg0Ny1cdFx0XHRpZiAoaW5jb21pbmdfc3RhdGUgIT0gTExDX0lOQ09NSU5HX05PTkUpIHtcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4NDg6XHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NDktXHRcdFx0XHRpZiAoaW5jb21pbmdfc3RhdGUgPT0gTExDX0lOQ09NSU5HX1FVRVVFRClcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05MjgtXHRcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XG5uZXQvbGxjL2xsY19jb25uLmM6OTI5Olx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xubmV0L2xsYy9sbGNfY29ubi5jLTkzMC1cdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05NzgtXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxubmV0L2xsYy9sbGNfY29ubi5jOjk3OTpcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xubmV0L2xsYy9sbGNfY29ubi5jLTk4MC1cdFx0fSBlbHNlIGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxubmV0L2xsYy9sbGNfY29ubi5jLTk4MS1cdFx0XHQgICBMTENfSU5DT01JTkdfUEVORElORykge1xubmV0L2xsYy9sbGNfY29ubi5jOjk4MjpcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTtcbm5ldC9sbGMvbGxjX2Nvbm4uYy05ODMtXHRcdH1cbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtOTkwLVx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG5uZXQvbGxjL2xsY19jb25uLmM6OTkxOlx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xubmV0L2xsYy9sbGNfY29ubi5jLTk5Mi1cdH0gZWxzZSB7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTk5Ni1cdFx0XHRpZiAobmV3c2spXG5uZXQvbGxjL2xsY19jb25uLmM6OTk3Olx0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG5uZXQvbGxjL2xsY19jb25uLmMtOTk4LVx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTEwNDE9c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDYxLVx0XHRcdCAgICBsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pIHtcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMDYyOlx0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG5uZXQvbGxjL2xsY19jb25uLmMtMTA2My1cdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtMTA2OS1cdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG5uZXQvbGxjL2xsY19jb25uLmM6MTA3MDpcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xubmV0L2xsYy9sbGNfY29ubi5jLTEwNzEtXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA2NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBhbmQgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCBhcmUgaW5kZWVkIHRoZSBuZXcsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50cm9kdWNlcy4gQW5kLCBJIHNlZSBgbGxjX2Nvbm5faGFuZGxlcmAgaXMgYWxzbyBub24tc3RhdGljOyB0aGVzZSBhcmUgYWxsIHByaW1lIGZvY3VzIHBvaW50cy4gVGhleSYjMzk7cmUgY2xlYXJseSBpbnRlbmRlZCB0byBiZSBhY2Nlc3NpYmxlIG91dHNpZGUgb2YgdGhlaXIgb3JpZ2luYWwgc2NvcGUsIHdoaWNoIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4KCk5vdywgSSBuZWVkIHRvIHJldmlzaXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gVGhlIGNvcmUgY29uZmlnIG9wdGlvbiBpcyBgQ09ORklHX0xMQzJgLCB0aGF0JiMzOTtzIGNsZWFyLiBCdXQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbXBhY3RlZD8gSSYjMzk7bGwgcmUtZXhhbWluZSBgbmV0L2xsYy9LY29uZmlnYCB0aG9yb3VnaGx5IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYENPTkZJR19MTEMyYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYENPTkZJR19MTEMyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIG1vZHVsZXMsIG9yIGNvbmZpZ3VyYXRpb25zIHJlbHkgb24gdGhpcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byBncmFzcCB0aGUgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMgb3IgY29uc2lkZXJpbmcgaXRzIHJlbW92YWwuIFRoaXMgaW52b2x2ZXMgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBjcm9zcy1yZWZlcmVuY2luZyB3aXRoIG90aGVyIHJlbGV2YW50IEtjb25maWdzLCBhbmQgcG9zc2libHkgZXZlbiBnbGFuY2luZyBhdCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgZmlsZXMgdGhhdCBtaWdodCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHVzZSB0aGlzIG9wdGlvbi4gSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGFueSBkZWZhdWx0IHZhbHVlcyBpdCBpbmZsdWVuY2VzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEEgaG9saXN0aWMgdmlldyBpcyBrZXkg4oCTIEkgbmVlZCB0byBlbnN1cmUgbm90aGluZyBicmVha3MgaWYgSSBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBhYm91dCBgQ09ORklHX0xMQzJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTExDMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbGxjL0tjb25maWc9Mj1jb25maWcgTExDXG4tLVxubmV0L2xsYy9LY29uZmlnLTQtXG5uZXQvbGxjL0tjb25maWc6NTpjb25maWcgTExDMlxubmV0L2xsYy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqRGl2aW5nIGludG8gdGhlIEtjb25maWcgb2YgbmV0L2xsYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuICYjMzQ7bmV0L2xsYy9LY29uZmlnJiMzNDsuLi4gKnRoYXQqIHN1Z2dlc3RzIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTG9naWNhbCBMaW5rIENvbnRyb2wgKExMQykgc3VibGF5ZXIgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBtYXAgb3V0IHRoZSBwb3RlbnRpYWwgYXJlYXMgd2UmIzM5O2xsIGJlIGRlYWxpbmcgd2l0aC4gV2UmIzM5O3JlIGxpa2VseSB0byBzZWUgc2V0dGluZ3MgcmVsYXRlZCB0bzoKCiogICAqKkxMQyBwcm90b2NvbCBzdXBwb3J0OioqIEFyZSB3ZSBjb25maWd1cmluZyBzcGVjaWZpYyBMTEMgcHJvdG9jb2xzIChlLmcuLCBJRUVFIDgwMi4yIFR5cGUgMSwgVHlwZSAyLCBvciBtYXliZSBldmVuIHByb3ByaWV0YXJ5IG9uZXMpPyBBcmUgdGhlcmUgb3B0aW9ucyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGRpZmZlcmVudCBMTEMgaW1wbGVtZW50YXRpb25zPwoqICAgKipFbmNhcHN1bGF0aW9uL0ZyYW1pbmc6KiogVGhlcmUmIzM5O3MgYSBoaWdoIHByb2JhYmlsaXR5IHdlJiMzOTtsbCBzZWUgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBob3cgTExDIGZyYW1lcyBhcmUgZW5jYXBzdWxhdGVkIHdpdGhpbiBvdGhlciBuZXR3b3JrIHByb3RvY29scy4gVGhpbmsgYWJvdXQgU05BUCAoU3ViLU5ldHdvcmsgQWNjZXNzIFByb3RvY29sKSwgTExDL1NOQVAgYnJpZGdpbmcsIG1heWJlIGV2ZW4gc29tZSBvYnNjdXJlIHR1bm5lbGluZyBtZXRob2RzLgoqICAgKipIYXJkd2FyZSBEZXBlbmRlbmNpZXM6KiogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB3ZSBtaWdodCBmaW5kIG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gY2VydGFpbiBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVycyAoTklDcykgb3IgaGFyZHdhcmUuCiogICAqKlBlcmZvcm1hbmNlIFR1bmluZzoqKiBMTEMgaXMgYSBsYXllciB3aXRoIHRoZSBwb3RlbnRpYWwgdG8gYmUgYSBib3R0bGVuZWNrLCBzbyBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0aGVyZSYjMzk7bGwgYmUgc2V0dGluZ3MgZm9yIG9wdGltaXppbmcgYnVmZmVyaW5nLCB3aW5kb3dpbmcsIGFuZCBtYXliZSBldmVuIGludGVycnVwdCBoYW5kbGluZyByZWxhdGVkIHRvIExMQyB0cmFmZmljLgoqICAgKipEZWJ1Z2dpbmcvVHJhY2luZzoqKiBBIGNydWNpYWwgcGFydCBvZiBhbnkgd2VsbC1kZXNpZ25lZCBLY29uZmlnIGZpbGUgaXMgdGhlIGluY2x1c2lvbiBvZiBvcHRpb25zIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgYW5kIHRyYWNpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBgREVCVUdfTExDYCBvciBgVFJBQ0VfTExDYCBmbGFncyB0byBoZWxwIHRyb3VibGVzaG9vdCBhbnkgTExDLXJlbGF0ZWQgaXNzdWVzIHRoYXQgbWlnaHQgY29tZSB1cC4KCk15IGdvYWwgaW4gcmVhZGluZyB0aGlzIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBzZWUgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgYm9vbGAsIGB0cmlzdGF0ZWAsIGBpbnRgLCBhbmQgYHN0cmluZ2Agb3B0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBuYXR1cmUgb2YgZWFjaCBzZXR0aW5nLiBJJiMzOTtsbCBhbHNvIGNoZWNrIG91dCBhbnkgaGVscCB0ZXh0LCB0aGlzIGdpdmVzIG1lIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgYXMgdG8gd2hhdCBpcyBhdmFpbGFibGUgYW5kIHdoeS4gVGhpcyBjb3VsZCBpbmZsdWVuY2Ugb3VyIG92ZXJhbGwgbmV0d29yayBjb25maWd1cmF0aW9ucyBhbmQgcGVyZm9ybWFuY2UuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2xsYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIExMQ1xuICAgMzpcdFx0dHJpc3RhdGVcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTExDMlxuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QU5TSS9JRUVFIDgwMi4yIExMQyB0eXBlIDIgU3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0c2VsZWN0IExMQ1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBUaGlzIGlzIGEgTG9naWNhbCBMaW5rIExheWVyIHR5cGUgMiwgY29ubmVjdGlvbiBvcmllbnRlZCBzdXBwb3J0LlxuICAxMDpcdFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIFBGX0xMQyBzb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM3OQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTExDMiBDb25maWd1cmF0aW9uIFN1bW1hcnkqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgTExDMmAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMuIExldCBtZSBzb2xpZGlmeSBteSByZWFzb25pbmcgaGVyZSwgYXMgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhpcyB1cCBmb3IgZnV6emluZy4KCkZpcnN0LCB0aGUgY29yZSBpZGVhOiB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IGludHJvZHVjaW5nIGEgbmV3IHN0YXRlIG1hY2hpbmUgYW5kIHdvcmtxdWV1ZS4gVGhpcyBpcyByaWdodCBpbiB0aGUgY29yZSBvZiB0aGUgTExDIG5ldHdvcmtpbmcgY29kZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhvc2UgUEZfTExDIHNvY2tldHMgYW5kIG9idmlvdXNseSBuZXR3b3JrIHRyYWZmaWMuIFNvLCB3b3J0aCBmdXp6aW5nLCB0aGF0JiMzOTtzIGNsZWFyLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYW5kIGBsbGNfY29ubl9oYW5kbGVyYCBhcyB0aGUgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBjb25maXJtIGBsbGNfY29ubl9oYW5kbGVyYCBtYWtlcyBzZW5zZTogSXQmIzM5O3MgdGhlIHByaW1hcnkgaGFuZGxlciBmb3IgKmluY29taW5nKiBwYWNrZXRzIG9uIExMQyBjb25uZWN0aW9ucywgc28gc3BvdCBvbi4gSSBhbHNvIGNvbnNpZGVyZWQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLCBhcyBpdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzIG5vbi1zdGF0aWMuCgpBY3R1YWxseSwgbGV0JiMzOTtzIHJldmlzaXQgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLiBJdCYjMzk7cyBub3QgKmV4cG9ydGVkKiBhcyBJIGluaXRpYWxseSB0aG91Z2h0LCBidXQgaXQmIzM5O3Mgbm90IHN0YXRpYyBlaXRoZXIsIGFuZCB0aGF0IG1ha2VzIGl0IHBlcmZlY3RseSB2YWxpZCBhcyBhIGZvY3VzIHN5bWJvbC4KCk5vdywgYWJvdXQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLiBJdCYjMzk7cyBiZWVuIHRvdWNoZWQsIGJ1dCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbWluaW1hbC4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBhcHBlYXJzIHRvIHJlc2lkZSBpbiBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGFuZCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLgoKU3BlY2lmaWNhbGx5LCBgbGxjX2Nvbm5faGFuZGxlcmAgaGFzIGEgc3Vic3RhbnRpYWwgbnVtYmVyIG9mIGNoYW5nZXMsIGFuZCB0aGVzZSBzeW1ib2xzLCBjb21iaW5lZCwgc2VlbSB0byByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoLgoKSSBhbHNvIGNvbnNpZGVyZWQgYWRkaW5nIHRoZSBzeXNjYWxsIGhhbmRsZXJzIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYC4gQWx0aG91Z2ggdGhleSBhcmUgc3RhdGljLCB0aGV5IGFyZSB0aGUgbWFpbiBzeXNjYWxsIGhhbmRsZXJzIG1vZGlmaWVkLCBhbmQgSSBjb3VsZCBhZGQgdGhlbSBqdXN0IGluIGNhc2UuIEJ1dCB0byBiZSBzYWZlLCBJJiMzOTtsbCBzdGljayB0byBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBhbmQgYGxsY19jb25uX2hhbmRsZXJgLgoKRmluYWxseSwgYW55IG90aGVyIGNvbmZpZ3M/IGBDT05GSUdfTkVUYCBpcyBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUsIGJ1dCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE9rYXksIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TExDMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xsY19yZWxlYXNlX2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrJiMzNDssCiAgICAmIzM0O2xsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuJiMzNDssCiAgICAmIzM0O2xsY19jb25uX2hhbmRsZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lIGFuZCB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGluY29taW5nIExMQyBjb25uZWN0aW9ucyB0byBmaXggcmFjZSBjb25kaXRpb25zIGFuZCBsaWZlY3ljbGUgaXNzdWVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiB0aGUgY29yZSBMTEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHRyYWZmaWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xMQzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrJiMzNDssCiAgICAmIzM0O2xsY19hY2NlcHRfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtsbGNfY29ubl9oYW5kbGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgTExDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cyBhbmQgbmV0d29yayB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBpbiB0aGUgTExDIHByb3RvY29sIGJ5IGludHJvZHVjaW5nIHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBgaW5jb21pbmdfd29ya2ApIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGlzdGVuZXIgc29ja2V0IHRlYXJkb3duLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIGZ1bmN0aW9uIHRvIHNlbmQgYSBETSByZXNwb25zZSAoYGxsY19jb25uX3NlbmRfZG1fcnNwYCksIHdoaWNoIGFsbG9jYXRlcyBhIG5ldyBza2IgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGl0cyBieXRlcyAoTExDIGhlYWRlciBhbmQgTUFDIGhlYWRlcikgYmVmb3JlIHRyYW5zbWlzc2lvbiwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkIHRvIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwMzI5ZDUzYWNjNzA1NmJlNjM0MDdmZGNlMmI4NGVmZjQ3NjEzY2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwOToxMzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCmluZGV4IGUxYTMwMjY5NjcyMzQuLmU4MDAzZGIxMTBhZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaApAQCAtNiw2ICYjNDM7Niw3IEBACiAgKiAJCSAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyAmbHQ7YWNtZUBjb25lY3RpdmEuY29tLmJyJmd0OwogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2xsY19pZi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGxjLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsMTAgQEAKICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDIKIAomIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDAKJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19QRU5ESU5HICAgICAxCiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfUVVFVUVEICAgICAgMgomIzQzOwogI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDIKICNkZWZpbmUgTExDMl9BQ0tfVElNRSAgICAgICAgICAgICAxCiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgMwpAQCAtNzIsNiAmIzQzOzc3LDkgQEAgc3RydWN0IGxsY19zb2NrIHsKIAkJCQkJICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuCiAJCQkJCSAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovCiAJdTMyCQkgICAgY21zZ19mbGFnczsKJiM0MzsJYXRvbWljX3QJICAgIGluY29taW5nX3N0YXRlOwomIzQzOwlzdHJ1Y3Qgc29jawkgICAgKmluY29taW5nX2xpc3RlbmVyOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5jb21pbmdfd29yazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7CiB9OwogCkBAIC05Myw3ICYjNDM7MTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LAogCQkJICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTsKIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7Ci12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7dm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7CiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7Ym9vbCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzayk7CiAKIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IGIwNDQ3YzMzZGJmMDkuLmU4MDU0ODA5Y2YwY2YgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvbGxjX3NhcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9sbGNfcGR1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2xsY19jb25uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9sbGNfY19zdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3Bfc3RhdGVzLmgmZ3Q7CiAKIC8qIHJlbWVtYmVyOiB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIGlzIHplcm9lZCBiZWNhdXNlIGl0cyBpbiAuYnNzICovCkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLSZndDtzazsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYzsKJiM0MzsJYm9vbCBsaXN0ZW5lcjsKIAogCWlmICh1bmxpa2VseShzayA9PSBOVUxMKSkKIAkJZ290byBvdXQ7CkBAIC0yMDYsNiAmIzQzOzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAkJbGxjLSZndDtsYWRkci5sc2FwLCBsbGMtJmd0O2RhZGRyLmxzYXApOwogCWlmICghbGxjX3NlbmRfZGlzYyhzaykpCiAJCWxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdnRpbWVvKSk7CiYjNDM7CWxpc3RlbmVyID0gc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU47CiYjNDM7CWlmIChsaXN0ZW5lcikKJiM0MzsJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLSZndDtzYXA7CiAKQEAgLTIxNCwxNiAmIzQzOzIxOSwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJCSAqLwogCQlsbGNfc2FwX2hvbGQoc2FwKTsKIAkJbGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy0mZ3Q7c2FwLCBzayk7CiYjNDM7CQlsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCWxsY19zYXBfcHV0KHNhcCk7CiAJfSBlbHNlIHsKJiM0MzsJCWxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAl9CiAJbmV0ZGV2X3B1dChsbGMtJmd0O2RldiwgJmFtcDtsbGMtJmd0O2Rldl90cmFja2VyKTsKIAlzb2NrX3B1dChzayk7CiAJc29ja19vcnBoYW4oc2spOwogCXNvY2stJmd0O3NrID0gTlVMTDsKLQlsbGNfc2tfZnJlZShzayk7CiYjNDM7CWxsY19za19mcmVlKHNrLCB0cnVlKTsKIG91dDoKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMiw2ICYjNDM7NzI5LDE3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCQlnb3RvIGZyZWVzOwogCXJjID0gMDsKIAluZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CWxvY2tfc29ja19uZXN0ZWQobmV3c2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJaWYgKGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICAhbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKSkgewomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX05PTkUpCiYjNDM7CQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQlyZWxlYXNlX3NvY2sobmV3c2spOwomIzQzOwkJc29ja19wdXQobmV3c2spOwomIzQzOwkJcmMgPSAtRUNPTk5BQk9SVEVEOwomIzQzOwkJZ290byBmcmVlczsKJiM0MzsJfQogCS8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi8KIAlsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7CiAJc29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7CkBAIC03MzcsNiAmIzQzOzc1NSw4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCXNrX2FjY2VwdHFfcmVtb3ZlZChzayk7CiAJZHByaW50aygmIzM0OyVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXG4mIzM0OywgX19mdW5jX18sCiAJCWxsY19zayhzayktJmd0O2FkZHIuc2xsY19zYXAsIG5ld2xsYy0mZ3Q7ZGFkZHIubHNhcCk7CiYjNDM7CXJlbGVhc2Vfc29jayhuZXdzayk7CiYjNDM7CXNvY2tfcHV0KG5ld3NrKTsKIGZyZWVzOgogCWtmcmVlX3NrYihza2IpOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jCmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjRhMzRmMjQwYWQyY2MgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2xsY19jb25uLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBAIHN0YXRpYyBpbnQgbGxjX2V4ZWNfY29ubl90cmFuc19hY3Rpb25zKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgKmxsY19xdWFsaWZ5X2Nvbm5fZXYoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqLwogc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdOwpAQCAtODgsNiAmIzQzOzg5LDEzIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJICogc2tiLSZndDtzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpbgogCQkgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZQogCQkgKi8KJiM0MzsJCWlmIChzayAhPSBza2ItJmd0O3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCQlzb2NrX2hvbGQoc2tiLSZndDtzayk7CiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUsCiYjNDM7CQkJCSAgIExMQ19JTkNPTUlOR19RVUVVRUQpOwomIzQzOwkJfQogCQlza2JfZ2V0KHNrYik7CiAJCXNrYl9xdWV1ZV90YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwpAQCAtMzU0LDcgJiM0MzszNjIsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAlpbnQgcmMgPSAxOwogCi0JaWYgKGxsYy0mZ3Q7c3RhdGUgJmd0OyBOQlJfQ09OTl9TVEFURVMpCiYjNDM7CWlmIChsbGMtJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICBsbGMtJmd0O3N0YXRlICZndDsgTkJSX0NPTk5fU1RBVEVTKQogCQlnb3RvIG91dDsKIAlyYyA9IDA7CiAJdHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpOwpAQCAtNzY1LDI3ICYjNDM7Nzc0LDE2MiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtJmd0O2xhZGRyKSk7CiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtJmd0O2RhZGRyKSk7CiAJbmV3bGxjLSZndDtkZXYgPSBkZXY7CiYjNDM7CW5ld2xsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXIgPSBzazsKJiM0MzsJYXRvbWljX3NldCgmYW1wO25ld2xsYy0mZ3Q7aW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bmV3bGxjLSZndDtpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTsKJiM0MzsJc29ja19ob2xkKHNrKTsKIAlkZXZfaG9sZChkZXYpOwogCWxsY19zYXBfYWRkX3NvY2tldChsbGMtJmd0O3NhcCwgbmV3c2spOwogb3V0OgogCXJldHVybiBuZXdzazsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLAomIzQzOwkJCQkJCSAgICBpbmNvbWluZ193b3JrKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtsbGMtJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqbGlzdGVuZXIgPSBsbGMtJmd0O2luY29taW5nX2xpc3RlbmVyOwomIzQzOwomIzQzOwlsb2NrX3NvY2sobGlzdGVuZXIpOwomIzQzOwlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiYjNDM7CWxsY19za19mcmVlKHNrLCBmYWxzZSk7CiYjNDM7CXNvY2tfb3JwaGFuKHNrKTsKJiM0MzsJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7CiYjNDM7CXJlbGVhc2Vfc29jayhsaXN0ZW5lcik7CiYjNDM7CWRldl9wdXQobGxjLSZndDtkZXYpOwomIzQzOwlsbGMtJmd0O2RldiA9IE5VTEw7CiYjNDM7CXNvY2tfcHV0KHNrKTsKJiM0MzsJc29ja19wdXQobGlzdGVuZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwomIzQzOwlpZiAoYXRvbWljX3hjaGcoJmFtcDtsbGMtJmd0O2luY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGxsYy0mZ3Q7c3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpOwomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwlsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLSZndDtzYXAsIHNrKTsKJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2xsYy0mZ3Q7aW5jb21pbmdfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7bGxjLSZndDtpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCwKJiM0MzsJCQkJICBMTENfSU5DT01JTkdfTk9ORSkgIT0gTExDX0lOQ09NSU5HX1FVRVVFRCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc29ja19wdXQobGxjLSZndDtpbmNvbWluZ19saXN0ZW5lcik7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkpIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CiYjNDM7CQlpZiAobmV3c2sgJmFtcDsmYW1wOyBuZXdzayAhPSBzaykgewomIzQzOwkJCWludCBpbmNvbWluZ19zdGF0ZTsKJiM0MzsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpbmNvbWluZ19zdGF0ZSA9CiYjNDM7CQkJCWF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpOwomIzQzOwkJCWlmIChpbmNvbWluZ19zdGF0ZSAhPSBMTENfSU5DT01JTkdfTk9ORSkgewomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQkJaWYgKGluY29taW5nX3N0YXRlID09IExMQ19JTkNPTUlOR19RVUVVRUQpCiYjNDM7CQkJCQlzb2NrX3B1dChuZXdzayk7CiYjNDM7CQkJfQomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCX0KJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwl9CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoaXMgbWlycm9ycyB0aGUgQURNLXN0YXRlIERNIGFjdGlvbnMsIGJ1dCBhIGxpc3RlbmVyIGhhcyBubyBwZWVyCiYjNDM7ICogYWRkcmVzcyBpbiBsbGMtJmd0O2RhZGRyIHlldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgc3RydWN0IGxsY19hZGRyICpzYWRkciwgdTggZl9iaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi0mZ3Q7ZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7CiYjNDM7CWlmICghbnNrYikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLSZndDtsYWRkci5sc2FwLAomIzQzOwkJCSAgICBzYWRkci0mZ3Q7bHNhcCwgTExDX1BEVV9SU1ApOwomIzQzOwlsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTsKJiM0MzsJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi0mZ3Q7ZGV2LSZndDtkZXZfYWRkciwgc2FkZHItJmd0O21hYyk7CiYjNDM7CWlmICh1bmxpa2VseShyYykpCiYjNDM7CQlrZnJlZV9za2IobnNrYik7CiYjNDM7CWVsc2UKJiM0MzsJCWRldl9xdWV1ZV94bWl0KG5za2IpOwomIzQzO30KJiM0MzsKIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7Ci0Jc3RydWN0IHNvY2sgKnNrOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2ssICpuZXdzayA9IE5VTEw7CiYjNDM7CWJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlib29sIG5ld3NrX2xvY2tlZCA9IGZhbHNlOwogCiAJbGxjX3BkdV9kZWNvZGVfc2Eoc2tiLCBzYWRkci5tYWMpOwogCWxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCAmYW1wO3NhZGRyLmxzYXApOwogCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTsKIAlsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgJmFtcDtkYWRkci5sc2FwKTsKIAomIzQzO2xvb2t1cDoKIAlzayA9IF9fbGxjX2xvb2t1cChzYXAsICZhbXA7c2FkZHIsICZhbXA7ZGFkZHIsIGRldl9uZXQoc2tiLSZndDtkZXYpKTsKIAlpZiAoIXNrKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKHNrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJbmV3c2sgPSBzazsKJiM0MzsJCWJoX2xvY2tfc29jayhuZXdzayk7CiYjNDM7CQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgIT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlzb2NrX3B1dChuZXdzayk7CiYjNDM7CQkJbmV3c2sgPSBOVUxMOwomIzQzOwkJCWdvdG8gbG9va3VwOwomIzQzOwkJfQomIzQzOwkJc2sgPSBsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19saXN0ZW5lcjsKJiM0MzsJCXNvY2tfaG9sZChzayk7CiYjNDM7CQluZXdza19sb29rdXBfcmVmID0gdHJ1ZTsKJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJfQomIzQzOwogCWJoX2xvY2tfc29jayhzayk7CiYjNDM7CWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpCiYjNDM7CQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwlpZiAobmV3c2tfbG9va3VwX3JlZikgewomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQluZXdza19sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJZ290byByZXRyeV91bmxvY2s7CiYjNDM7CQlpZiAodW5saWtlbHkoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gfHwKJiM0MzsJCQkgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHsKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJfQomIzQzOwl9CiAJLyoKIAkgKiBUaGlzIGhhcyB0byBiZSBkb25lIGhlcmUgYW5kIG5vdCBhdCB0aGUgdXBwZXIgbGF5ZXIgLSZndDthY2NlcHQKIAkgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczoKQEAgLTc5NSwxMCAmIzQzOzkzOSwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkgKiBpbiB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBwcml2YXRlIGFyZWEuIC1hY21lCiAJICovCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkgewotCQlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi0mZ3Q7ZGV2LAotCQkJCQkJCSAgICAgICZhbXA7c2FkZHIsICZhbXA7ZGFkZHIpOwotCQlpZiAoIW5ld3NrKQotCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCWlmICghbmV3c2spIHsKJiM0MzsJCQlpZiAobGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHsKJiM0MzsJCQkJaWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7CiYjNDM7CQkJCQl1OCBmX2JpdDsKJiM0MzsKJiM0MzsJCQkJCWxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsICZhbXA7Zl9iaXQpOwomIzQzOwkJCQkJbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsICZhbXA7c2FkZHIsIGZfYml0KTsKJiM0MzsJCQkJfSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7CiYjNDM7CQkJCQlsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgJmFtcDtzYWRkciwgMSk7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCQl9CiYjNDM7CQkJbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi0mZ3Q7ZGV2LCAmYW1wO3NhZGRyLAomIzQzOwkJCQkJCQkgJmFtcDtkYWRkcik7CiYjNDM7CQkJaWYgKCFuZXdzaykKJiM0MzsJCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQluZXdza19sb2NrZWQgPSB0cnVlOwomIzQzOwkJfQogCQlza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTgxMywxOCAmIzQzOzk3Miw0OSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJc2tiLSZndDtzayA9IHNrOwogCQlza2ItJmd0O2Rlc3RydWN0b3IgPSBzb2NrX2VmcmVlOwogCX0KLQlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpCiYjNDM7CWlmICh1bmxpa2VseShsbGNfc2soc2tiLSZndDtzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSkgewomIzQzOwkJaWYgKG5ld3NrKSB7CiYjNDM7CQkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2soc2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spOwomIzQzOwkJfQomIzQzOwkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKIAkJbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwotCWVsc2UgewomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwl9IGVsc2UgewogCQlkcHJpbnRrKCYjMzQ7JXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXG4mIzM0OywgX19mdW5jX18pOwogCQlsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpOwotCQlpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSkKJiM0MzsJCWlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKSB7CiYjNDM7CQkJaWYgKG5ld3NrKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQl9CiAJfQogb3V0OgomIzQzOwlpZiAobmV3c2tfbG9ja2VkKQomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlzb2NrX3B1dChzayk7CiYjNDM7CWlmIChuZXdza19sb29rdXBfcmVmKQomIzQzOwkJc29ja19wdXQobmV3c2spOwogCXJldHVybjsKJiM0MztyZXRyeV91bmxvY2s6CiYjNDM7CWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJbmV3c2tfbG9ja2VkID0gZmFsc2U7CiYjNDM7CWJoX3VubG9ja19zb2NrKHNrKTsKJiM0MzsJc29ja19wdXQoc2spOwomIzQzOwlzb2NrX3B1dChuZXdzayk7CiYjNDM7CW5ld3NrID0gTlVMTDsKJiM0MzsJbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlnb3RvIGxvb2t1cDsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuOwpAQCAtODUyLDEyICYjNDM7MTA0Miw1MiBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiYjNDM7CXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiAKIAlpZiAobGlrZWx5KGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfUEFDS0VUKSkgewotCQlpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgLyogbm90IGNsb3NlZCAqLwomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIHJldHJ5OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8CiYjNDM7CQkJICAgIHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8CiYjNDM7CQkJICAgIGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSB7CiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQkJfQogCQkJcmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7Ci0JCWVsc2UKJiM0MzsJCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCX0gZWxzZSBpZiAobmV3c2sgJmFtcDsmYW1wOwomIzQzOwkJCSAgIGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmx0OyBMTENfQ09OTl9TVEFURV9BRE0pIHsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJCX0KJiM0MzsJCQlyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQl9IGVsc2UgaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpIHsKJiM0MzsJCQlyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTsKJiM0MzsJCX0gZWxzZSB7CiAJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQl9CiAJfSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7CiAJCS8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi8KIAkJaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpICAvKiBub3QgY2xvc2VkICovCkBAIC04NzAsNiAmIzQzOzExMDAsMjMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIG91dDoKIAlyZXR1cm4gcmM7CiYjNDM7cmV0cnk6CiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmd0Oz0gTExDX0NPTk5fU1RBVEVfQURNKQomIzQzOwkJCXJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKJiM0MzsJCX0KJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfa2ZyZWVfc2tiOwogb3V0X2tmcmVlX3NrYjoKIAlrZnJlZV9za2Ioc2tiKTsKIAlnb3RvIG91dDsKQEAgLTk2MCwxNiAmIzQzOzEyMDcsMTcgQEAgdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogLyoqCiAgKglsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldAogICoJQHNrOiAtIHNvY2tldCB0byBmcmVlCiYjNDM7ICoJQHN5bmM6IHdoZXRoZXIgdG8gc3luY2hyb25vdXNseSBzdG9wIHRpbWVycwogICoKICAqCUZyZWVzIGEgTExDIHNvY2tldAogICovCi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogewogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAogCWxsYy0mZ3Q7c3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDOwogCS8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi8KLQlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgc3luYyk7CiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0MKIAlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXM6IHVuYWNrcT0lZCwgdHhxPSVkXG4mIzM0OywgX19mdW5jX18sCiAJCXNrYl9xdWV1ZV9sZW4oJmFtcDtsbGMtJmd0O3BkdV91bmFja19xKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQgZm9yIExMQyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggc2VyaWVzIHRvdWNoaW5nIGBuZXQvbGxjL2FmX2xsYy5jYCwgYG5ldC9sbGMvbGxjX2Nvbm4uY2AsIGFuZCBgaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaGAsIGFuZCB0aGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUgYW5kIGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBMTEMgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBwb2ludGluZyB0b3dhcmRzIHBvdGVudGlhbCBVQUYgb3IgcmFjZSBjb25kaXRpb24gZml4ZXMg4oCTIGEgZGVmaW5pdGUgcG9pbnQgb2YgaW50ZXJlc3QuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSB0cmFja2luZyBmb3IgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHZpYSBgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBhbmQgYGluY29taW5nX3dvcmtgLiAgT2theSwgc28gd2UgaGF2ZSB0aGVzZSBuZXcgc3RhdGUgdmFyaWFibGVzIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9uczogYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYW5kIHRoZSB3b3JrIGZ1bmN0aW9uIGBsbGNfaW5jb21pbmdfc29ja193b3JrYC4gQWxzbyBhZmZlY3RlZCBhcmUgYGxsY191aV9yZWxlYXNlYCwgYGxsY191aV9hY2NlcHRgLCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AsIGBsbGNfY29ubl9zZXJ2aWNlYCwgYGxsY19jb25uX2hhbmRsZXJgLCBhbmQgYGxsY19iYWNrbG9nX3JjdmAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBzZXQgb2YgY2hhbmdlcywgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgbmVjZXNzYXJ5LgoKRmlyc3QsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIG1vZGlmaWVkIG9yIGludHJvZHVjZWQgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlPyBObywgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBjb25jZW50cmF0ZWQgaW50ZXJuYWxseSwgZm9jdXNlZCBvbiBzb2NrZXQgc3RhdGUgdHJhY2tpbmcgYW5kIGxvY2tpbmcsIHdoaWNoIGlzIGdvb2QuIFRoYXQgcmVkdWNlcyBzb21lIGluaXRpYWwgcmlzay4KCk5leHQsIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyAgVGhlIG5ldyB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGluIGBsbGNfY3JlYXRlX2luY29taW5nX3NvY2tgOiBgaW5jb21pbmdfbGlzdGVuZXJgIGlzIGFzc2lnbmVkLCBgaW5jb21pbmdfc3RhdGVgIGlzIHNldCB0byBgTExDX0lOQ09NSU5HX1BFTkRJTkdgLCBhbmQgYGluY29taW5nX3dvcmtgIGlzIGluaXRpYWxpemVkLiBMb29rcyBzb2xpZCBvbiB0aGF0IGZyb250LgoKVGhlbiwgZG8gd2UgaGF2ZSBhbnkgbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0ICpjb3VsZCogZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzPyAgVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBzb2NrZXQgbGlmZWN5Y2xlLCBsb2NraW5nLCBhbmQgcHJldmVudGluZyBVQUYvZG91YmxlLWZyZWUgaXNzdWVzLiBJdCBzZWVtcyB0byBiZSBzYWZlIGZyb20gdGhpcyBwZXJzcGVjdGl2ZS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBsbGNfY29ubl9zZW5kX2RtX3JzcGAgYXMgYSBzYW5pdHkgY2hlY2ssIGp1c3QgdG8gbWFrZSBzdXJlIHdlIGRpZG4mIzM5O3QgbWlzcyBhbnl0aGluZyBzdWJ0bGUuIEl0IGFsbG9jYXRlcyBhIG5ldyBgc2tiYCwgcG9wdWxhdGVzIGl0IHdpdGggaGVhZGVycywgYW5kIHRyYW5zbWl0cyBpdC4gYGxsY19hbGxvY19mcmFtZWAsIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLCBhbmQgYGxsY19tYWNfaGRyX2luaXRgIGFsbCBoYW5kbGUgd3JpdGluZyB0byB0aGUgYHNrYmAuIFdoaWxlIHRoZSBjb2RlIHBhdGggKmxvb2tzKiBjbGVhbiwgaXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gcGVyZm9ybSBhIGRlZXBlciBkaXZlIGludG8gYGxsY19hbGxvY19mcmFtZWAgYW5kIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgdXNpbmcgdG9vbHMgdG8gZW5zdXJlIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGluIHRoZXJlLiBMZXQmIzM5O3MgZG8gdGhhdCBiZWZvcmUgZGVjaWRpbmcgdG8gc2tpcCBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX2FsbG9jX2ZyYW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19zYXAuaD0xNz12b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9sbGNfc2FwLmgtMTgtXHRcdFx0dW5zaWduZWQgY2hhciBwcmltKTtcbmluY2x1ZGUvbmV0L2xsY19zYXAuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0yMC1cdFx0XHRcdHU4IHR5cGUsIHUzMiBkYXRhX3NpemUpO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTE5NS1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzoxOTY6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTE5Ny1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjIwLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjIyMTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMjIyLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yNDYtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjQ3Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNDgtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTI2Nz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9mcm1yX3JzcF9mX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjc5LVx0XHRmX2JpdCA9IDA7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjgwOlx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19jX2FjLmMtMjgxLVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY19mcm1yX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MzAxPWludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTMwNC1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzozMDU6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19jX2FjLmMtMzA2LVx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfZnJtcl9pbmZvKSk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTMyOD1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zMzUtXHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcdTAwMjZmX2JpdCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MzM2Olx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19jX2FjLmMtMzM3LVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY19mcm1yX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NDIxPWludCBsbGNfY29ubl9hY19yZXNlbmRfaV94eHhfeF9zZXRfMF9vcl9zZW5kX3JyKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDI3LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjQyODpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNDI5LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDYyLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjQ2MzpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNDY0LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00ODM9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDg2LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjQ4NzpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNDg4LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01MDc9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTEwLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjUxMTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTEyLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTM0LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjUzNTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTM2LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01NTU9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTU4LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjU1OTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTYwLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01Nzk9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTgyLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjU4MzpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTg0LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTYxOC1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo2MTk6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTYyMC1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NjM5PWludCBsbGNfY29ubl9hY19zZW5kX3JyX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNjQyLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjY0MzpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNjQ0LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02NjM9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02NjYtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NjY3Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy02NjgtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTY4OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02OTEtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NjkyOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy02OTMtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTcxMj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTcxNS1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo3MTY6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTcxNy1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzM2PWludCBsbGNfY29ubl9hY19zZW5kX2Fja194eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTczOS1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo3NDA6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTc0MS1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzcwPWludCBsbGNfY29ubl9hY19zZW5kX3NhYm1lX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzczLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjc3NDpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzc1LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03OTg9aW50IGxsY19jb25uX2FjX3NlbmRfdWFfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy04MDItXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6ODAzOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy04MDQtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTk1OT1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfcnJfcnNwX2Zfc2V0X2Fja3BmKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtOTYzLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjk2NDpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtOTY1LVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz04NjM9c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtODY4LVxubmV0L2xsYy9sbGNfY29ubi5jOjg2OTpcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xubmV0L2xsYy9sbGNfY29ubi5jLTg3MC1cdGlmICghbnNrYilcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmM9MTA1PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3hpZF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTExMy1cdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcdTAwMjZkc2FwKTtcbm5ldC9sbGMvbGxjX3NfYWMuYzoxMTQ6XHRuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxubmV0L2xsYy9sbGNfc19hYy5jLTExNS1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmM9MTQ4PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3Rlc3RfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYy0xNjMtXHRkYXRhX3NpemUgPSBudG9ocyhldGhfaGRyKHNrYiktXHUwMDNlaF9wcm90bykgLSAzO1xubmV0L2xsYy9sbGNfc19hYy5jOjE2NDpcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XG5uZXQvbGxjL2xsY19zX2FjLmMtMTY1LVx0aWYgKCFuc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3NhcC5jPTIyPXN0YXRpYyBpbnQgbGxjX21hY19oZWFkZXJfbGVuKHVuc2lnbmVkIHNob3J0IGRldnR5cGUpXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtMzItLyoqXG5uZXQvbGxjL2xsY19zYXAuYzozMzogKlx0bGxjX2FsbG9jX2ZyYW1lIC0gYWxsb2NhdGVzIHNrX2J1ZmYgZm9yIGZyYW1lXG5uZXQvbGxjL2xsY19zYXAuYy0zNC0gKlx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXG5uZXQvbGxjL2xsY19zYXAuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9sbGMvbGxjX3NhcC5jLTQzLVx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM9NDI9c3RhdGljIGludCBsbGNfc3RhdGlvbl9hY19zZW5kX3hpZF9yKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTQ1LVx0aW50IHJjID0gMTtcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo0NjpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTQ3LVx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM9NjY9c3RhdGljIGludCBsbGNfc3RhdGlvbl9hY19zZW5kX3Rlc3RfcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYy03Ny1cdGRhdGFfc2l6ZSA9IG50b2hzKGV0aF9oZHIoc2tiKS1cdTAwM2VoX3Byb3RvKSAtIDM7XG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6Nzg6XHRuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCBkYXRhX3NpemUpO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTc5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIExMQyBGcmFtZSBBbGxvY2F0aW9uKioKCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtpbmcgaW50byB0aGUgbmV0d29yayB2aWEgdGhlIExMQyBwcm90b2NvbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgbGxjX2FsbG9jX2ZyYW1lYCBpbiBgbmV0L2xsYy9sbGNfc2FwLmNgIGlzIGhhbmRsaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGNvcnJlY3RseSwgc3BlY2lmaWNhbGx5IHRoZSAqaW5pdGlhbGl6YXRpb24qIG9mIHRoZSBTb2NrZXQgQnVmZmVyIChza2IpLiBJJiMzOTt2ZSBnb3QgdG8gY29uZmlybSBpZiBpdCYjMzk7cyB6ZXJvaW5nIG91dCB0aGUgYWxsb2NhdGVkIGBza2JgIGJlZm9yZSB1c2UuIElmIGl0ICpkb2VzbiYjMzk7dCosIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY2xhc3NpYyBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHZ1bG5lcmFiaWxpdHksIGFsYmVpdCB3aXRoaW4gYSBmYWlybHkgbmljaGUgcHJvdG9jb2wgc3RhY2suIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJiMzOTt0IG1ha2luZyBpdHMgd2F5IG9udG8gdGhlIHdpcmUuIExldCYjMzk7cyBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY19hbGxvY19mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX3NhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX3NhcC5jPTIyPXN0YXRpYyBpbnQgbGxjX21hY19oZWFkZXJfbGVuKHVuc2lnbmVkIHNob3J0IGRldnR5cGUpXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtMzItLyoqXG5uZXQvbGxjL2xsY19zYXAuYzozMzogKlx0bGxjX2FsbG9jX2ZyYW1lIC0gYWxsb2NhdGVzIHNrX2J1ZmYgZm9yIGZyYW1lXG5uZXQvbGxjL2xsY19zYXAuYy0zNC0gKlx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXG5uZXQvbGxjL2xsY19zYXAuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9sbGMvbGxjX3NhcC5jLTQzLVx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBsbGNfc2FwLmNgIC0gTGluZSA0MioqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBuZXQvbGxjL2xsY19zYXAuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgNDIuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBwYXJ0aWN1bGFyIHBvaW50IGluIHRoZSBmaWxlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCB0aGUgU2VydmljZSBBY2Nlc3MgUG9pbnQgKFNBUCkgY29uZmlndXJhdGlvbiBvciBoYW5kbGluZy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBtYXliZSByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIExMQyBTQVAgdGFibGUgb3IgcmVnaXN0ZXJpbmcgYSBuZXcgU0FQLiBJdCBjb3VsZCBhbHNvIGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBvciBmdW5jdGlvbiBjYWxsIHJlbGV2YW50IHRvIFNBUCBtYW5hZ2VtZW50LiBMaW5lIDQyLi4uIGhtbSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLiBNeSBmYW1pbGlhcml0eSB3aXRoIHRoZSBMTEMgcHJvdG9jb2wgYW5kIExpbnV4IG5ldHdvcmtpbmcgc3RhY2sgc2hvdWxkIGhlbHAgbWUgY29udGV4dHVhbGl6ZSBpdCByYXBpZGx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUmIzM5O3MgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX3NhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMzpcdCAqXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcbiAgMzQ6XHQgKlx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXG4gIDM1Olx0ICpcdEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRoaXMgc2tiIHdpbGwgYmUgc2VudCBvdmVyXG4gIDM2Olx0ICpcdEB0eXBlOiBwZHUgdHlwZSB0byBhbGxvY2F0ZVxuICAzNzpcdCAqXHRAZGF0YV9zaXplOiBkYXRhIHNpemUgdG8gYWxsb2NhdGVcbiAgMzg6XHQgKlxuICAzOTpcdCAqXHRBbGxvY2F0ZXMgYW4gc2tfYnVmZiBmb3IgZnJhbWUgYW5kIGluaXRpYWxpemVzIHNrX2J1ZmYgZmllbGRzLlxuICA0MDpcdCAqXHRSZXR1cm5zIGFsbG9jYXRlZCBza2Igb3IgJU5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LlxuICA0MTpcdCAqL1xuICA0MjpcdHN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICA0MzpcdFx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbiAgNDQ6XHR7XG4gIDQ1Olx0XHRpbnQgaGxlbiA9IHR5cGUgPT0gTExDX1BEVV9UWVBFX1UgPyAzIDogNDtcbiAgNDY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDQ3Olx0XG4gIDQ4Olx0XHRobGVuICYjNDM7PSBsbGNfbWFjX2hlYWRlcl9sZW4oZGV2LVx1MDAzZXR5cGUpO1xuICA0OTpcdFx0c2tiID0gYWxsb2Nfc2tiKGhsZW4gJiM0MzsgZGF0YV9zaXplLCBHRlBfQVRPTUlDKTtcbiAgNTA6XHRcbiAgNTE6XHRcdGlmIChza2IpIHtcbiAgNTI6XHRcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiAgNTM6XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBobGVuKTtcbiAgNTQ6XHRcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gIDU1Olx0XHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gIDU2Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTtcbiAgNTc6XHRcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gZGV2O1xuICA1ODpcdFx0XHRpZiAoc2sgIT0gTlVMTClcbiAgNTk6XHRcdFx0XHRza2Jfc2V0X293bmVyX3coc2tiLCBzayk7XG4gIDYwOlx0XHR9XG4gIDYxOlx0XHRyZXR1cm4gc2tiO1xuICA2MjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MDcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTExDIEZyYW1lIEFsbG9jYXRpb24qKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoaXMgYGxsY19hbGxvY19mcmFtZWAgZnVuY3Rpb24sIGFzIGZhciBhcyBJIGNhbiBzZWUuIEl0IHVzZXMgYGFsbG9jX3NrYmAsIHdoaWNoIEkga25vdywgZG9lc24mIzM5O3QgemVybyBvdXQgdGhlIGRhdGEgYnVmZmVyLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCByaWdodCBvZmYgdGhlIGJhdCwgYXMgd2UmIzM5O3JlIHByb2JhYmx5IGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZXRoaW5nIGFib3V0IHRoYXQsIGRlcGVuZGluZyBvbiB0aGUgdXNhZ2UuCgpOb3csIHNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGBsbGNfY29ubl9zZW5kX2RtX3JzcGAgYW5kIGl0IGNhbGxzIGBsbGNfYWxsb2NfZnJhbWVgIHdpdGggYGRhdGFfc2l6ZWAgYXMgMCwgd2hpY2ggc3VnZ2VzdHMgaXQgZXhwZWN0cyBhbiBlbXB0eSBkYXRhIGJ1ZmZlciBpbiB0aGUgU0tCLiBUaGUgaGVhZGVyIHNpemUgaXMgY29tcHV0ZWQgdG8gYmUgMyBieXRlcyAoSSBhc3N1bWUgZm9yIHRoZSBMTEMgaGVhZGVyIGl0c2VsZikgcGx1cyBgbWFjX2hlYWRlcl9sZW5gLiBNYWtlcyBzZW5zZSwgY29uc2lkZXJpbmcgdGhlIExMQyBhbmQgTUFDIGxheWVycy4KCk5leHQsIHdlIGFyZSBjYWxsaW5nIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLCBhbmQgYGxsY19tYWNfaGRyX2luaXRgLiBTaW5jZSBgZGF0YV9zaXplYCBpcyB6ZXJvLCB0aGVzZSBmdW5jdGlvbnMgbmVlZCB0byBiZSBleGFtaW5lZCBjYXJlZnVsbHkuIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGUgaGVhZGVycyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHRoYXQgbm90aGluZyBpcyBiZWluZyBpbmFkdmVydGVudGx5IHdyaXR0ZW4gKmludG8qIHRoZSBkYXRhIGJ1ZmZlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYGxsY19wZHVfaGVhZGVyX2luaXRgIGFuZCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAuIFRoZXkmIzM5O3JlIHRoZSBjcml0aWNhbCBwb2ludHMgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhleSBkbywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgZW1wdHkgZGF0YSBidWZmZXIuIEFyZSB0aGV5IGluaXRpYWxpemluZyBoZWFkZXJzICpiZWZvcmUqIHRoZSBkYXRhIGJ1ZmZlcj8gQXJlIHRoZXkgd3JpdGluZyB0byB0aGUgcmlnaHQgb2Zmc2V0IGluIHRoZSBTS0I/IE9yIGFyZSB3ZSBnb2luZyB0byBzZWUgc29tZSBnYXJiYWdlIGRhdGE/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlIGRlZXBseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX3BkdV9oZWFkZXJfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGNfcGR1Lmg9MjEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIxNy0vKipcbmluY2x1ZGUvbmV0L2xsY19wZHUuaDoyMTg6ICpcdGxsY19wZHVfaGVhZGVyX2luaXQgLSBpbml0aWFsaXplcyBwZHUgaGVhZGVyXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjE5LSAqXHRAc2tiOiBpbnB1dCBza2IgdGhhdCBoZWFkZXIgbXVzdCBiZSBzZXQgaW50byBpdC5cbi0tXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjI2LSAqL1xuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjIyNzpzdGF0aWMgaW5saW5lIHZvaWQgbGxjX3BkdV9oZWFkZXJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIyOC1cdFx0XHRcdCAgICAgICB1OCBzc2FwLCB1OCBkc2FwLCB1OCBjcilcbi0tXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg9MzcwPXN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2luaXRfYXNfeGlkX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0zODMtXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg6Mzg0Olx0Lyogbm8gbmVlZCB0byBwdXNoL3B1dCBzaW5jZSBsbGNfcGR1X2hlYWRlcl9pbml0KCkgaGFzIGFscmVhZHlcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0zODUtXHQgKiBwdXNoZWQgMyAmIzQzOyAzIGJ5dGVzXG4tLVxubmV0LzgwMi9nYXJwLmM9MjUwPXN0YXRpYyB2b2lkIGdhcnBfcGR1X3F1ZXVlKHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwKVxuLS1cbm5ldC84MDIvZ2FycC5jLTI1Ny1cbm5ldC84MDIvZ2FycC5jOjI1ODpcdGxsY19wZHVfaGVhZGVyX2luaXQoYXBwLVx1MDAzZXBkdSwgTExDX1BEVV9UWVBFX1UsIExMQ19TQVBfQlNQQU4sXG5uZXQvODAyL2dhcnAuYy0yNTktXHRcdFx0ICAgIExMQ19TQVBfQlNQQU4sIExMQ19QRFVfQ01EKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmM9MzU9c3RhdGljIHZvaWQgYnJfc2VuZF9icGR1KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jLTUwLVxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jOjUxOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VLCBMTENfU0FQX0JTUEFOLFxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jLTUyLVx0XHRcdCAgICBMTENfU0FQX0JTUEFOLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTE5Mj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kaXNjX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjAwLVxubmV0L2xsYy9sbGNfY19hYy5jOjIwMTpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtMjAyLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTIxNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTIyNy1cdFx0bGxjX3BkdV9kZWNvZGVfcGZfYml0KHNrYiwgXHUwMDI2Zl9iaXQpO1xubmV0L2xsYy9sbGNfY19hYy5jOjIyODpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtMjI5LVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTI0Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTI1MS1cbm5ldC9sbGMvbGxjX2NfYWMuYzoyNTI6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTI1My1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yNjc9aW50IGxsY19jb25uX2FjX3NlbmRfZnJtcl9yc3BfZl9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTI4NC1cbm5ldC9sbGMvbGxjX2NfYWMuYzoyODU6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTI4Ni1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0zMDE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9mcm1yX3JzcF9mX3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMzExLVxubmV0L2xsYy9sbGNfY19hYy5jOjMxMjpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtMzEzLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTMyOD1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zNDEtXG5uZXQvbGxjL2xsY19jX2FjLmM6MzQyOlx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNDMtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MzU4PWludCBsbGNfY29ubl9hY19zZW5kX2lfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zNjMtXG5uZXQvbGxjL2xsY19jX2FjLmM6MzY0Olx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9JLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNjUtXHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTM3Nj1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfaV9jbWRfcF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTM4MS1cbm5ldC9sbGMvbGxjX2NfYWMuYzozODI6XHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX0ksIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTM4My1cdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9Mzk0PWludCBsbGNfY29ubl9hY19zZW5kX2lfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zOTktXG5uZXQvbGxjL2xsY19jX2FjLmM6NDAwOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9JLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy00MDEtXHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQyMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2lfeHh4X3hfc2V0XzBfb3Jfc2VuZF9ycihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTQzMi1cbm5ldC9sbGMvbGxjX2NfYWMuYzo0MzM6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTQzNC1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDY3LVxubmV0L2xsYy9sbGNfY19hYy5jOjQ2ODpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNDY5LVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQ4Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00OTEtXG5uZXQvbGxjL2xsY19jX2FjLmM6NDkyOlx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy00OTMtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NTA3PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTUxNS1cbm5ldC9sbGMvbGxjX2NfYWMuYzo1MTY6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTUxNy1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTM5LVxubmV0L2xsYy9sbGNfY19hYy5jOjU0MDpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNTQxLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTU1NT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01NjMtXG5uZXQvbGxjL2xsY19jX2FjLmM6NTY0Olx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjUtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NTc5PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTU4Ny1cbm5ldC9sbGMvbGxjX2NfYWMuYzo1ODg6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTU4OS1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTYyMy1cbm5ldC9sbGMvbGxjX2NfYWMuYzo2MjQ6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTYyNS1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02Mzk9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02NDctXG5uZXQvbGxjL2xsY19jX2FjLmM6NjQ4Olx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDktXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NjYzPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNjcyLVxubmV0L2xsYy9sbGNfY19hYy5jOjY3MzpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNjc0LVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTY4OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02OTYtXG5uZXQvbGxjL2xsY19jX2FjLmM6Njk3Olx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy02OTgtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzEyPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIwLVxubmV0L2xsYy9sbGNfY19hYy5jOjcyMTpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIyLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTczNj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy03NDQtXG5uZXQvbGxjL2xsY19jX2FjLmM6NzQ1Olx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy03NDYtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzcwPWludCBsbGNfY29ubl9hY19zZW5kX3NhYm1lX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzgxLVx0XHRcdGRtYWMgPSBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyO1xubmV0L2xsYy9sbGNfY19hYy5jOjc4MjpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNzgzLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTc5OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF91YV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTgwOS1cdFx0bnNrYi1cdTAwM2VkZXYgPSBsbGMtXHUwMDNlZGV2O1xubmV0L2xsYy9sbGNfY19hYy5jOjgxMDpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtODExLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTkwND1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfaV9yc3BfZl9zZXRfYWNrcGYoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy05MTAtXG5uZXQvbGxjL2xsY19jX2FjLmM6OTExOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9JLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy05MTItXHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTk1OT1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfcnJfcnNwX2Zfc2V0X2Fja3BmKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtOTY4LVxubmV0L2xsYy9sbGNfY19hYy5jOjk2OTpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtOTcwLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzItXG5uZXQvbGxjL2xsY19jb25uLmM6ODczOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jb25uLmMtODc0LVx0XHRcdCAgICBzYWRkci1cdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfb3V0cHV0LmM9NTg9aW50IGxsY19idWlsZF9hbmRfc2VuZF91aV9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02MS1cdGludCByYztcbm5ldC9sbGMvbGxjX291dHB1dC5jOjYyOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX291dHB1dC5jLTYzLVx0XHRcdCAgICBkc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfc19hYy5jPTY2PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3VpKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTY5LVxubmV0L2xsYy9sbGNfc19hYy5jOjcwOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VLCBldi1cdTAwM2VzYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfc19hYy5jLTcxLVx0XHRcdCAgICBldi1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfc19hYy5jPTg2PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3hpZF9jKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTg5LVxubmV0L2xsYy9sbGNfc19hYy5jOjkwOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VX1hJRCwgZXYtXHUwMDNlc2FkZHIubHNhcCxcbm5ldC9sbGMvbGxjX3NfYWMuYy05MS1cdFx0XHQgICAgZXYtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xMDU9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfeGlkX3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmMtMTE3LVx0XHRnb3RvIG91dDtcbm5ldC9sbGMvbGxjX3NfYWMuYzoxMTg6XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCwgZHNhcCxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xMTktXHRcdFx0ICAgIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmM9MTM3PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3Rlc3RfYyhzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYy0xNDAtXG5uZXQvbGxjL2xsY19zX2FjLmM6MTQxOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VLCBldi1cdTAwM2VzYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfc19hYy5jLTE0Mi1cdFx0XHQgICAgZXYtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTE2Ni1cdFx0Z290byBvdXQ7XG5uZXQvbGxjL2xsY19zX2FjLmM6MTY3Olx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsIGRzYXAsXG5uZXQvbGxjL2xsY19zX2FjLmMtMTY4LVx0XHRcdCAgICBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTQyPXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF94aWRfcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYy01Mi1cdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcdTAwMjZkc2FwKTtcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo1MzpcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIDAsIGRzYXAsIExMQ19QRFVfUlNQKTtcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy01NC1cdGxsY19wZHVfaW5pdF9hc194aWRfcnNwKG5za2IsIExMQ19YSURfTlVMTF9DTEFTU18yLCAxMjcpO1xuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYz02Nj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfdGVzdF9yKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTgzLVx0bGxjX3BkdV9kZWNvZGVfc3NhcChza2IsIFx1MDAyNmRzYXApO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jOjg0Olx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgMCwgZHNhcCwgTExDX1BEVV9SU1ApO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTg1LVx0bGxjX3BkdV9pbml0X2FzX3Rlc3RfcnNwKG5za2IsIHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDY4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBMTEMgUERVIEhlYWRlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBpbnRvIHRoZSB3ZWVkcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBsbGNfcGR1X2hlYWRlcl9pbml0YCBmcm9tIGBpbmNsdWRlL25ldC9sbGNfcGR1LmhgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaGVhZGVyIGlzIGluaXRpYWxpemVkOyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIEkmIzM5O2xsIG5lZWQgdG8gcmV2aXNpdCB0aGlzIGNvZGUgcGF0aCBmb3IgW21lbnRpb24gYSBzcGVjaWZpYyB1c2UgY2FzZSByZWxhdGVkIHRvIHRoZSB1c2VyJiMzOTtzIGZpZWxkLCBlLmcuLCAmIzM0O215IHVwY29taW5nIHdvcmsgb24gY29uZ2VzdGlvbiBjb250cm9sIGluIExMQyBmcmFtZXMsJiMzNDsgb3IgJiMzNDtkZWJ1Z2dpbmcgYSByZWNlbnQgaXNzdWUgd2l0aCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb24gdGhpcyBwYXJ0aWN1bGFyIHBsYXRmb3JtJiMzNDtdLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZCwgYXMgaXMgdHlwaWNhbCBmb3IgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc3VidGxldGllcyBpbiB0aGUgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBlc3BlY2lhbGx5IGFueSBiaXRmaWVsZCBtYW5pcHVsYXRpb25zIG9yIHBvaW50ZXIgYXNzaWdubWVudHMgdGhhdCBtaWdodCBiZSBjcml0aWNhbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yLCBldmVuIHdvcnNlLCBidWdzIHRoYXQgY291bGQgYmUgbHVya2luZy4gSSYjMzk7bGwgYWxzbyBiZSBtZW50YWxseSBtYXBwaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdG8gaG93IHRoZSBMTEMgUERVIGlzIHN1YnNlcXVlbnRseSB1c2VkLCBzbyBJIGNhbiBlbnN1cmUgdGhlIGludmFyaWFudHMgSSYjMzk7bSBleHBlY3RpbmcgYXJlIGJlaW5nIHNldCB1cCBjb3JyZWN0bHkgYW5kIG1haW50YWluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbGxjX3BkdS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTg6XHQgKlx0bGxjX3BkdV9oZWFkZXJfaW5pdCAtIGluaXRpYWxpemVzIHBkdSBoZWFkZXJcbiAyMTk6XHQgKlx0QHNrYjogaW5wdXQgc2tiIHRoYXQgaGVhZGVyIG11c3QgYmUgc2V0IGludG8gaXQuXG4gMjIwOlx0ICpcdEB0eXBlOiB0eXBlIG9mIFBEVSAoVSwgSSBvciBTKS5cbiAyMjE6XHQgKlx0QHNzYXA6IHNvdXJjZSBzYXAuXG4gMjIyOlx0ICpcdEBkc2FwOiBkZXN0aW5hdGlvbiBzYXAuXG4gMjIzOlx0ICpcdEBjcjogY29tbWFuZC9yZXNwb25zZSBiaXQgKDAgb3IgMSkuXG4gMjI0Olx0ICpcbiAyMjU6XHQgKlx0VGhpcyBmdW5jdGlvbiBzZXRzIERTQVAsIFNTQVAgYW5kIGNvbW1hbmQvUmVzcG9uc2UgYml0IGluIExMQyBoZWFkZXIuXG4gMjI2Olx0ICovXG4gMjI3Olx0c3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfaGVhZGVyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcbiAyMjg6XHRcdFx0XHRcdCAgICAgICB1OCBzc2FwLCB1OCBkc2FwLCB1OCBjcilcbiAyMjk6XHR7XG4gMjMwOlx0XHRpbnQgaGxlbiA9IDQ7IC8qIGRlZmF1bHQgdmFsdWUgZm9yIEkgYW5kIFMgdHlwZXMgKi9cbiAyMzE6XHRcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHU7XG4gMjMyOlx0XG4gMjMzOlx0XHRzd2l0Y2ggKHR5cGUpIHtcbiAyMzQ6XHRcdGNhc2UgTExDX1BEVV9UWVBFX1U6XG4gMjM1Olx0XHRcdGhsZW4gPSAzO1xuIDIzNjpcdFx0XHRicmVhaztcbiAyMzc6XHRcdGNhc2UgTExDX1BEVV9UWVBFX1VfWElEOlxuIDIzODpcdFx0XHRobGVuID0gNjtcbiAyMzk6XHRcdFx0YnJlYWs7XG4gMjQwOlx0XHR9XG4gMjQxOlx0XG4gMjQyOlx0XHRza2JfcHVzaChza2IsIGhsZW4pO1xuIDI0MzpcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gMjQ0Olx0XHRwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xuIDI0NTpcdFx0cGR1LVx1MDAzZWRzYXAgPSBkc2FwO1xuIDI0NjpcdFx0cGR1LVx1MDAzZXNzYXAgPSBzc2FwO1xuIDI0NzpcdFx0cGR1LVx1MDAzZXNzYXAgfD0gY3I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjg3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqQW5hbHl6aW5nIHRoZSBMTEMgUERVIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gb2YgY29kZS4gRmlyc3QsIGl0JiMzOTtzIHNldHRpbmcgdGhlIGBwZHUtJmd0O2RzYXBgIGFuZCBgcGR1LSZndDtzc2FwYCB2YWx1ZXMuIE1ha2VzIHNlbnNlOyB0aGVzZSBhcmUgdGhlIERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50IGFuZCBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQsIGNydWNpYWwgZm9yIGFkZHJlc3NpbmcgaW4gdGhlIExvZ2ljYWwgTGluayBDb250cm9sIGxheWVyLiBOb3csIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBQRFUgc3RydWN0dXJlIHNwZWNpZmljYWxseSBhcyBhICYjMzQ7RE0gUmVzcG9uc2UsJiMzNDsgbGlrZWx5IGEgJiMzNDtEaXNjb25uZWN0IE1vZGUmIzM0OyByZXNwb25zZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAgZnVuY3Rpb24gY2FsbCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBzaGFwaW5nIHRoZSBQRFUgZm9yIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiByZXNwb25zZS4gSXMgaXQgc2V0dGluZyBmbGFncz8gRmlsbGluZyBpbiBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIHRoZSBQRFU/IEkgbmVlZCB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX3BkdV9pbml0X2FzX2RtX3JzcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGNfcGR1Lmg9NDMwPXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdCk7XG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg6NDMxOnZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmX2JpdCk7XG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtNDMyLXZvaWQgbGxjX3BkdV9pbml0X2FzX2ZybXJfcnNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsbGNfcGR1X3NuICpwcmV2X3BkdSxcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjI5LVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjMwOlx0XHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMzEtXHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MjQzPWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjUzLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjU0Olx0XHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIDEpO1xubmV0L2xsYy9sbGNfY19hYy5jLTI1NS1cdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz04NjM9c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtODc0LVx0XHRcdCAgICBzYWRkci1cdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XG5uZXQvbGxjL2xsY19jb25uLmM6ODc1Olx0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XG5uZXQvbGxjL2xsY19jb25uLmMtODc2LVx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHNhZGRyLVx1MDAzZW1hYyk7XG4tLVxubmV0L2xsYy9sbGNfcGR1LmM9MTc4PXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdClcbi0tXG5uZXQvbGxjL2xsY19wZHUuYy0xODctLyoqXG5uZXQvbGxjL2xsY19wZHUuYzoxODg6ICpcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AgLSBidWlsZHMgRE0gcmVzcG9uc2UgcGR1XG5uZXQvbGxjL2xsY19wZHUuYy0xODktICpcdEBza2I6IEFkZHJlc3Mgb2YgdGhlIHNrYiB0byBidWlsZFxuLS1cbm5ldC9sbGMvbGxjX3BkdS5jLTE5My0gKi9cbm5ldC9sbGMvbGxjX3BkdS5jOjE5NDp2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpXG5uZXQvbGxjL2xsY19wZHUuYy0xOTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ3MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9sbGMvbGxjX3BkdS5jYCBhbmQgc3BlY2lmaWNhbGx5IGRpc3NlY3QgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLiBUaGlzIGZ1bmN0aW9uJiMzOTtzIG5hbWUgc2NyZWFtcyAmIzM0O2luaXRpYWxpemluZyBhIFByb3RvY29sIERhdGEgVW5pdCAoUERVKSBhcyBhIERpc2Nvbm5lY3QgTW9kZSAoRE0pIHJlc3BvbnNlLiYjMzQ7IFNvLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHNldHVwIGZvciBhIFBEVSB0aGF0JiMzOTtzIGFja25vd2xlZGdpbmcgYSBkaXNjb25uZWN0aW9uIHJlcXVlc3QuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQgZmllbGRzIGl0IHBvcHVsYXRlcywgaG93IGl0IGhhbmRsZXMgdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24gKHNvdXJjZSBhbmQgZGVzdGluYXRpb24gTUFDcyBwcm9iYWJseSksIGFuZCB3aGF0IGZsYWdzIG9yIGNvbnRyb2wgYml0cyBpdCBzZXRzIHRvIHNpZ25hbCB0aGUgRE0gc3RhdHVzLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IHJldXNlcyBhbnkgZXhpc3RpbmcgUERVIGluaXRpYWxpemF0aW9uIG1lY2hhbmlzbXMgb3IgaWYgaXQmIzM5O3MgYSBkZWRpY2F0ZWQgZnVuY3Rpb24gZm9yIHRoaXMgc3BlY2lmaWMgcmVzcG9uc2UgdHlwZS4gSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX3BkdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTQ6XHR2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpXG4gMTk1Olx0e1xuIDE5NjpcdFx0c3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7XG4gMTk3Olx0XG4gMTk4Olx0XHRwZHUtXHUwMDNlY3RybF8xICA9IExMQ19QRFVfVFlQRV9VO1xuIDE5OTpcdFx0cGR1LVx1MDAzZWN0cmxfMSB8PSBMTENfMl9QRFVfUlNQX0RNO1xuIDIwMDpcdFx0cGR1LVx1MDAzZWN0cmxfMSB8PSAoKGZfYml0IFx1MDAyNiAxKSBcdTAwM2NcdTAwM2MgNCkgXHUwMDI2IExMQ19VX1BGX0JJVF9NQVNLO1xuIDIwMTpcdH1cbiAyMDI6XHRcbiAyMDM6XHQvKipcbiAyMDQ6XHQgKlx0bGxjX3BkdV9pbml0X2FzX2ZybXJfcnNwIC0gYnVpbGRzIEZSTVIgcmVzcG9uc2UgUERVXG4gMjA1Olx0ICpcdEBza2I6IEFkZHJlc3Mgb2YgdGhlIGZyYW1lIHRvIGJ1aWxkXG4gMjA2Olx0ICpcdEBwcmV2X3BkdTogVGhlIHJlamVjdGVkIFBEVSBmcmFtZVxuIDIwNzpcdCAqXHRAZl9iaXQ6IFRoZSBGIGJpdCB0byBzZXQgaW4gdGhlIFBEVVxuIDIwODpcdCAqXHRAdnM6IHR4IHN0YXRlIHZhcmkgdmFsdWUgZm9yIHRoZSBkYXRhIGxpbmsgY29ubiBhdCB0aGUgcmVqZWN0aW5nIExMQ1xuIDIwOTpcdCAqXHRAdnI6IHJ4IHN0YXRlIHZhciB2YWx1ZSBmb3IgdGhlIGRhdGEgbGluayBjb25uIGF0IHRoZSByZWplY3RpbmcgTExDXG4gMjEwOlx0ICpcdEB2enl4dzogY29tcGxldGVseSBkZXNjcmliZWQgaW4gdGhlIElFRUUgU3RkIDgwMi4yIGRvY3VtZW50IChQZyA1NSlcbiAyMTE6XHQgKlxuIDIxMjpcdCAqXHRCdWlsZHMgYSBwZHUgZnJhbWUgYXMgYSBGUk1SIHJlc3BvbnNlLlxuIDIxMzpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE4NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSBwcm9jZXNzaW5nIHRoaXMgbG9naWM6CgoqKkxMQyBQRFUgSW5pdGlhbGl6YXRpb24gLSBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgIGZ1bmN0aW9uIHdvcmtzLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGFjdGlvbiBpcyBzZXR0aW5nIHRoZSBgcGR1LSZndDtjdHJsXzFgIGZpZWxkLCB3aGljaCBJIGtub3cgaXMgYSBjcnVjaWFsIGNvbnRyb2wgYnl0ZSBpbiB0aGUgTExDIGZyYW1lLiBUaGlzIG1lYW5zLCBhZnRlciB0aGlzIGZ1bmN0aW9uIGV4ZWN1dGVzLCBJIGNhbiBleHBlY3QgdGhhdCBgcGR1LSZndDtkc2FwYCwgYHBkdS0mZ3Q7c3NhcGAsICphbmQqIGBwZHUtJmd0O2N0cmxfMWAgd2lsbCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIE5pY2UgYW5kIGVmZmljaWVudC4KClNwZWNpZmljYWxseSwgZm9yIHRoZSBgTExDX1BEVV9UWVBFX1VgIHR5cGUgZnJhbWVzLCB0aGlzIGFsc28gc2V0cyB0aGUgaGVhZGVyIGxlbmd0aCwgYGhsZW5gIHRvIDMuIFNvLCBmb3IgdGhpcyB0eXBlIG9mIGZyYW1lLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIHRocmVlIGJ5dGVzIGFyZSBzZXQgdXAgY29ycmVjdGx5OiBgcGR1LSZndDtkc2FwYCwgYHBkdS0mZ3Q7c3NhcGAsIGFuZCBgcGR1LSZndDtjdHJsXzFgLiBUaGVuLCB0aGUgY29kZSBjYWxscyBgbGxjX21hY19oZHJfaW5pdGAgd2hpY2ggSSYjMzk7bGwgbmVlZCB0byBjaGVjaywgYnV0IGxvb2tzIGxpa2UgaXQgaGFuZGxlcyB0aGUgTUFDIGhlYWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX21hY19oZHJfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGMuaD05ND1pbnQgbGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LFxuLS1cbmluY2x1ZGUvbmV0L2xsYy5oLTk2LVxuaW5jbHVkZS9uZXQvbGxjLmg6OTc6aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2EsXG5pbmNsdWRlL25ldC9sbGMuaC05OC1cdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSk7XG4tLVxubmV0LzgwMi9nYXJwLmM9MjUwPXN0YXRpYyB2b2lkIGdhcnBfcGR1X3F1ZXVlKHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwKVxuLS1cbm5ldC84MDIvZ2FycC5jLTI2MC1cdGxsY19wZHVfaW5pdF9hc191aV9jbWQoYXBwLVx1MDAzZXBkdSk7XG5uZXQvODAyL2dhcnAuYzoyNjE6XHRsbGNfbWFjX2hkcl9pbml0KGFwcC1cdTAwM2VwZHUsIGFwcC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG5uZXQvODAyL2dhcnAuYy0yNjItXHRcdFx0IGFwcC1cdTAwM2VhcHAtXHUwMDNlcHJvdG8uZ3JvdXBfYWRkcmVzcyk7XG4tLVxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jPTM1PXN0YXRpYyB2b2lkIGJyX3NlbmRfYnBkdShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYy01NC1cbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYzo1NTpcdGxsY19tYWNfaGRyX2luaXQoc2tiLCBwLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgcC1cdTAwM2Vici1cdTAwM2Vncm91cF9hZGRyKTtcbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYy01Ni1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MTkyPWludCBsbGNfY29ubl9hY19zZW5kX2Rpc2NfY21kX3Bfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yMDMtXHRcdGxsY19wZHVfaW5pdF9hc19kaXNjX2NtZChuc2tiLCAxKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzoyMDQ6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMDUtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTIxNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTIzMC1cdFx0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjMxOlx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMjMyLVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yNTQtXHRcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgMSk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjU1Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMjU2LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yNjc9aW50IGxsY19jb25uX2FjX3NlbmRfZnJtcl9yc3BfZl9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTI4OC1cdFx0XHRcdFx0IGxsYy1cdTAwM2V2UiwgSU5DT1JSRUNUKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzoyODk6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yOTAtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTMwMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zMTUtXHRcdFx0XHRcdCBsbGMtXHUwMDNldlIsIElOQ09SUkVDVCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MzE2Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMzE3LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0zMjg9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9mcm1yX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMzQ1LVx0XHRcdFx0XHQgbGxjLVx1MDAzZXZSLCBJTkNPUlJFQ1QpO1xubmV0L2xsYy9sbGNfY19hYy5jOjM0NjpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTM0Ny1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MzU4PWludCBsbGNfY29ubl9hY19zZW5kX2lfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zNjYtXHRsbGNfcGR1X2luaXRfYXNfaV9jbWQoc2tiLCAxLCBsbGMtXHUwMDNldlMsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6MzY3Olx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMzY4LVx0aWYgKGxpa2VseSghcmMpKSB7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTM3Nj1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfaV9jbWRfcF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTM4NC1cdGxsY19wZHVfaW5pdF9hc19pX2NtZChza2IsIDAsIGxsYy1cdTAwM2V2UywgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzozODU6XHRyYyA9IGxsY19tYWNfaGRyX2luaXQoc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0zODYtXHRpZiAobGlrZWx5KCFyYykpIHtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9Mzk0PWludCBsbGNfY29ubl9hY19zZW5kX2lfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00MDItXHRsbGNfcGR1X2luaXRfYXNfaV9jbWQoc2tiLCAwLCBsbGMtXHUwMDNldlMsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NDAzOlx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNDA0LVx0aWYgKGxpa2VseSghcmMpKSB7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQyMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2lfeHh4X3hfc2V0XzBfb3Jfc2VuZF9ycihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTQzNS1cdFx0bGxjX3BkdV9pbml0X2FzX3JyX3JzcChuc2tiLCAwLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjQzNjpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTQzNy1cdFx0aWYgKGxpa2VseSghcmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDcwLVx0XHRsbGNfcGR1X2luaXRfYXNfcmVqX2NtZChuc2tiLCAxLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjQ3MTpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTQ3Mi1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NDgzPWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTQ5NC1cdFx0bGxjX3BkdV9pbml0X2FzX3Jlal9yc3AobnNrYiwgMSwgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo0OTU6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy00OTYtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTUwNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01MTgtXHRcdGxsY19wZHVfaW5pdF9hc19yZWpfcnNwKG5za2IsIDAsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTE5Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTIwLVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTQyLVx0XHRsbGNfcGR1X2luaXRfYXNfcm5yX2NtZChuc2tiLCAxLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjU0MzpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTU0NC1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NTU1PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTU2Ni1cdFx0bGxjX3BkdV9pbml0X2FzX3Jucl9yc3AobnNrYiwgMSwgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo1Njc6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjgtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTU3OT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01OTAtXHRcdGxsY19wZHVfaW5pdF9hc19ybnJfcnNwKG5za2IsIDAsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTkxOlx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTkyLVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTYyNi1cdFx0bGxjX3BkdV9pbml0X2FzX3Jucl9yc3AobnNrYiwgMCwgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Mjc6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy02MjgtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTYzOT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTY1MC1cdFx0bGxjX3BkdV9pbml0X2FzX3JyX2NtZChuc2tiLCAxLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjY1MTpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTY1Mi1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NjYzPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNjc1LVx0XHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIGZfYml0LCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjY3NjpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTY3Ny1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9Njg4PWludCBsbGNfY29ubl9hY19zZW5kX2Fja19yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTY5OS1cdFx0bGxjX3BkdV9pbml0X2FzX3JyX3JzcChuc2tiLCAxLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjcwMDpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTcwMS1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzEyPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIzLVx0XHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIDAsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NzI0Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzI1LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03MzY9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzQ3LVx0XHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIDAsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NzQ4Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzQ5LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03NzA9aW50IGxsY19jb25uX2FjX3NlbmRfc2FibWVfY21kX3Bfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy03ODQtXHRcdGxsY19wZHVfaW5pdF9hc19zYWJtZV9jbWQobnNrYiwgMSk7XG5uZXQvbGxjL2xsY19jX2FjLmM6Nzg1Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgZG1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzg2LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03OTg9aW50IGxsY19jb25uX2FjX3NlbmRfdWFfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy04MTItXHRcdGxsY19wZHVfaW5pdF9hc191YV9yc3AobnNrYiwgZl9iaXQpO1xubmV0L2xsYy9sbGNfY19hYy5jOjgxMzpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTgxNC1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9OTA0PXN0YXRpYyBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9pX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTkxMy1cdGxsY19wZHVfaW5pdF9hc19pX2NtZChza2IsIGxsYy1cdTAwM2VhY2tfcGYsIGxsYy1cdTAwM2V2UywgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo5MTQ6XHRyYyA9IGxsY19tYWNfaGRyX2luaXQoc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy05MTUtXHRpZiAobGlrZWx5KCFyYykpIHtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9OTU5PXN0YXRpYyBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9yc3BfZl9zZXRfYWNrcGYoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy05NzEtXHRcdGxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgbGxjLVx1MDAzZWFja19wZiwgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo5NzI6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy05NzMtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzUtXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4NzY6XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzctXHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX291dHB1dC5jLTE2LS8qKlxubmV0L2xsYy9sbGNfb3V0cHV0LmM6MTc6ICpcdGxsY19tYWNfaGRyX2luaXQgLSBmaWxscyBNQUMgaGVhZGVyIGZpZWxkc1xubmV0L2xsYy9sbGNfb3V0cHV0LmMtMTgtICpcdEBza2I6IEFkZHJlc3Mgb2YgdGhlIGZyYW1lIHRvIGluaXRpYWxpemUgaXRzIE1BQyBoZWFkZXJcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNC0gKi9cbm5ldC9sbGMvbGxjX291dHB1dC5jOjI1OmludCBsbGNfbWFjX2hkcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNi1cdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXG4tLVxubmV0L2xsYy9sbGNfb3V0cHV0LmM9NTg9aW50IGxsY19idWlsZF9hbmRfc2VuZF91aV9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02NC1cdGxsY19wZHVfaW5pdF9hc191aV9jbWQoc2tiKTtcbm5ldC9sbGMvbGxjX291dHB1dC5jOjY1Olx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgZG1hYyk7XG5uZXQvbGxjL2xsY19vdXRwdXQuYy02Ni1cdGlmIChsaWtlbHkoIXJjKSlcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy03Mi1cbm5ldC9sbGMvbGxjX291dHB1dC5jOjczOkVYUE9SVF9TWU1CT0wobGxjX21hY19oZHJfaW5pdCk7XG5uZXQvbGxjL2xsY19vdXRwdXQuYy03NC1FWFBPUlRfU1lNQk9MKGxsY19idWlsZF9hbmRfc2VuZF91aV9wa3QpO1xuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0zNz1zdGF0aWMgaW50IGxsY19wcmVwYXJlX2FuZF94bWl0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTQyLVxubmV0L2xsYy9sbGNfc19hYy5jOjQzOlx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgZXYtXHUwMDNlc2FkZHIubWFjLCBldi1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfc19hYy5jLTQ0LVx0aWYgKHJjKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xMDU9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfeGlkX3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmMtMTIwLVx0bGxjX3BkdV9pbml0X2FzX3hpZF9yc3AobnNrYiwgTExDX1hJRF9OVUxMX0NMQVNTXzIsIDApO1xubmV0L2xsYy9sbGNfc19hYy5jOjEyMTpcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBtYWNfc2EsIG1hY19kYSk7XG5uZXQvbGxjL2xsY19zX2FjLmMtMTIyLVx0aWYgKGxpa2VseSghcmMpKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTE2OS1cdGxsY19wZHVfaW5pdF9hc190ZXN0X3JzcChuc2tiLCBza2IpO1xubmV0L2xsYy9sbGNfc19hYy5jOjE3MDpcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBtYWNfc2EsIG1hY19kYSk7XG5uZXQvbGxjL2xsY19zX2FjLmMtMTcxLVx0aWYgKGxpa2VseSghcmMpKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYz00Mj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfeGlkX3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNTQtXHRsbGNfcGR1X2luaXRfYXNfeGlkX3JzcChuc2tiLCBMTENfWElEX05VTExfQ0xBU1NfMiwgMTI3KTtcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo1NTpcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBtYWNfZGEpO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTU2LVx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM9NjY9c3RhdGljIGludCBsbGNfc3RhdGlvbl9hY19zZW5kX3Rlc3RfcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYy04NS1cdGxsY19wZHVfaW5pdF9hc190ZXN0X3JzcChuc2tiLCBza2IpO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jOjg2Olx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIG1hY19kYSk7XG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtODctXHRpZiAodW5saWtlbHkocmMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc0NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBsbGNfbWFjX2hkcl9pbml0YCBmdW5jdGlvbiBpbiBgbmV0L2xsYy9sbGNfb3V0cHV0LmNgLCB0aGlua2luZyBvdXQgbG91ZC4uLgoKKipEaXZpbmcgaW50byBMTEMgT3V0cHV0IEhlYWRlciBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbGxjX21hY19oZHJfaW5pdGAgaW5zaWRlIGBuZXQvbGxjL2xsY19vdXRwdXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIGF0IGxlYXN0LCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIE1BQyBoZWFkZXIgZm9yIExvZ2ljYWwgTGluayBDb250cm9sIChMTEMpIGZyYW1lcy4gSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyB0byBjcmFmdCB0aGF0IGVzc2VudGlhbCBoZWFkZXIuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IG9mIHRoZSB2YXJpb3VzIHBhcmFtZXRlcnMgaXQmIzM5O3MgcHJvYmFibHkgdXNpbmcsIGxpa2UgdGhlIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzLCBzb3VyY2UgTUFDIGFkZHJlc3MsIEV0aGVyVHlwZSwgYW5kIGFueSBwb3RlbnRpYWwgTExDLXNwZWNpZmljIGZpZWxkcy4gTXkgcGFzdCBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBwcm9iYWJseSBhIGNydWNpYWwgc3RlcCBpbiBlbnN1cmluZyBvdXIgTExDIGZyYW1lcyBhcmUgcHJvcGVybHkgZm9ybWF0dGVkIGJlZm9yZSB0aGV5IGhpdCB0aGUgd2lyZSBhbmQgdGhhdCB0aGV5JiMzOTtyZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXQgdGhlIHJlY2VpdmluZyBlbmQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhhbmRsaW5nIG9mIHNwZWNpZmljIGFkZHJlc3MgZmllbGRzLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmU7IGhvdyBpdCBoYW5kbGVzIGFueSBwb3RlbnRpYWxseSBmcmFnbWVudGVkIGZyYW1lcywgYW5kIGFueSBidWZmZXItbWFuYWdlbWVudCBkZXRhaWxzLiBJJiMzOTttIGdvaW5nIHRvIHBhcnNlIHRoZSBjb2RlIGFuZCBsb29rIGZvciBkZXRhaWxzIHJlZ2FyZGluZyBvcHRpbWl6YXRpb25zLCBlc3BlY2lhbGx5IGFueSBpbmxpbmUgbWVtb3J5IG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBpbml0IGZ1bmN0aW9uIHdpbGwgb2ZmZXIgaW5zaWdodCBvbiBob3cgTExDIGZyYW1lcyBhcmUgZ2VuZXJhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNzpcdCAqXHRsbGNfbWFjX2hkcl9pbml0IC0gZmlsbHMgTUFDIGhlYWRlciBmaWVsZHNcbiAgMTg6XHQgKlx0QHNrYjogQWRkcmVzcyBvZiB0aGUgZnJhbWUgdG8gaW5pdGlhbGl6ZSBpdHMgTUFDIGhlYWRlclxuICAxOTpcdCAqXHRAc2E6IFRoZSBNQUMgc291cmNlIGFkZHJlc3NcbiAgMjA6XHQgKlx0QGRhOiBUaGUgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgMjE6XHQgKlxuICAyMjpcdCAqXHRGaWxscyBNQUMgaGVhZGVyIGZpZWxkcywgZGVwZW5kaW5nIG9uIE1BQyB0eXBlLiBSZXR1cm5zIDAsIElmIE1BQyB0eXBlXG4gIDIzOlx0ICpcdGlzIGEgdmFsaWQgdHlwZSBhbmQgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzIGNvcnJlY3RseSAxLCBvdGhlcndpc2UuXG4gIDI0Olx0ICovXG4gIDI1Olx0aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgMjY6XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXG4gIDI3Olx0e1xuICAyODpcdFx0aW50IHJjID0gLUVJTlZBTDtcbiAgMjk6XHRcbiAgMzA6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlKSB7XG4gIDMxOlx0XHRjYXNlIEFSUEhSRF9FVEhFUjpcbiAgMzI6XHRcdGNhc2UgQVJQSFJEX0xPT1BCQUNLOlxuICAzMzpcdFx0XHRyYyA9IGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYsIEVUSF9QXzgwMl8yLCBkYSwgc2EsXG4gIDM0Olx0XHRcdFx0XHQgICAgIHNrYi1cdTAwM2VsZW4pO1xuICAzNTpcdFx0XHRpZiAocmMgXHUwMDNlIDApXG4gIDM2Olx0XHRcdFx0cmMgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDczOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTExDIENvbm5lY3Rpb24gSGFuZGxpbmcqKgoKT2theSwgc28gYGRldl9oYXJkX2hlYWRlcmAgZ2V0cyB0aGUgTUFDIGhlYWRlciBzb3J0ZWQgYW5kIGZ1bGx5IHBvcHVsYXRlcyB0aGUgYHNrYmAuIEdvb2QsIHRoYXQgbWVhbnMgdGhlIGBza2JgIGlzIGluaXRpYWxpemVkLCB3aGljaCBwcmV2ZW50cyB1cyBmcm9tIHNlbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZXNlIGNoYW5nZXMgaW4gYGxsY19jb25uX2hhbmRsZXJgLgoKQWxyaWdodCwgSSBzZWUgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIGBUQ1BfTElTVEVOYCBzdGF0ZS4gQmVmb3JlLCBhIG5ldyBzb2NrZXQgd2FzIGltbWVkaWF0ZWx5IGNyZWF0ZWQgdXNpbmcgYGxsY19jcmVhdGVfaW5jb21pbmdfc29ja2AuIE5vdywgaXQgc2VlbXMgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0IGlzIGNoZWNraW5nIGZvciBzcGVjaWZpYyBMTEMgY29tbWFuZHMgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IHNvY2tldC4KClRoZSBjb2RlIG5vdyBjaGVja3MgZm9yIGBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeGAuIElmIGl0ICpyZXR1cm5zIHRydWUqICh3aGljaCBtZWFucyBub3QgYSBTQUJNRSBjb21tYW5kKSwgYSBETSByZXNwb25zZSBpcyBzZW50LiBIb3dldmVyLCBob2xkIG9uLi4uIHRoZSBsb2dpYyBpcyBpbnZlcnRlZC4gTGV0IG1lIGRvdWJsZS1jaGVjay4KClRoZSBsb2dpYyBpcyBlc3NlbnRpYWxseTogSWYgaXQmIzM5O3MgKm5vdCogYSBTQUJNRSBjb21tYW5kLCB0aGVuIGNoZWNrIGZvciBESVNDIGNvbW1hbmQsIGlmIGl0JiMzOTtzIG5vdCBhIERJU0MgY29tbWFuZCwgZGVjb2RlIHRoZSBQL0YgYml0IGZyb20gdGhlIFBEVSBhbmQgc2VuZCBhIERNIHJlc3BvbnNlLiBJZiBpdCYjMzk7cyBub3QgYSBTQUJNRSBjb21tYW5kIGFuZCBpdCYjMzk7cyBhIERJU0MgY29tbWFuZCB0aGVuIGNoZWNrIGZvciBgeHh4YCBhbmQgaWYgaXQgaXMgbm90IHRoYXQgc2VuZCBhIERNIHJlc3BvbnNlLgoKVGhlIGNvZGUgKnNob3VsZCogc2VuZCBhIERNIHJlc3BvbnNlLiBXYWl0LCB0aGlzIGlzIGludmVydGVkLCBJIG5lZWQgdG8gY2hlY2sgYGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94YCBiZWNhdXNlIEkgdGhpbmsgaXQgcmV0dXJucyAwIGZvciBhIFNBQk1FIGNvbW1hbmQuIFJpZ2h0LCBJIG5lZWQgdG8gZ28gb3ZlciB0aGF0IGZ1bmN0aW9uIGluIG1vcmUgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGNfY19ldi5oPTE0Mj1pbnQgbGxjX2Nvbm5fZXZfcnhfcmVqX3JzcF9mYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9sbGNfY19ldi5oOjE0MzppbnQgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L2xsY19jX2V2LmgtMTQ0LWludCBsbGNfY29ubl9ldl9yeF91YV9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC9sbGMvbGxjX2NfZXYuYz00MTU9aW50IGxsY19jb25uX2V2X3J4X3JyX3JzcF9mYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2V2LmMtNDI0LVxubmV0L2xsYy9sbGNfY19ldi5jOjQyNTppbnQgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2xsYy9sbGNfY19ldi5jLTQyNi17XG4tLVxubmV0L2xsYy9sbGNfY19zdC5jPTc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgbGxjX2NvbW1vbl9zdGF0ZV90cmFuc18zID0ge1xubmV0L2xsYy9sbGNfY19zdC5jOjc3Olx0LmV2XHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcbm5ldC9sbGMvbGxjX2Nfc3QuYy03OC1cdC5uZXh0X3N0YXRlICAgID0gTExDX0NPTk5fU1RBVEVfTk9STUFMLFxuLS1cbm5ldC9sbGMvbGxjX2Nfc3QuYz0zNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfYWRtX3N0YXRlX3RyYW5zXzIgPSB7XG5uZXQvbGxjL2xsY19jX3N0LmM6Mzc2Olx0LmV2XHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcbm5ldC9sbGMvbGxjX2Nfc3QuYy0zNzctXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX05PUk1BTCxcbi0tXG5uZXQvbGxjL2xsY19jX3N0LmM9NDUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgbGxjX3NldHVwX3N0YXRlX3RyYW5zXzEgPSB7XG5uZXQvbGxjL2xsY19jX3N0LmM6NDUxOlx0LmV2XHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcbm5ldC9sbGMvbGxjX2Nfc3QuYy00NTItXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX1NFVFVQLFxuLS1cbm5ldC9sbGMvbGxjX2Nfc3QuYz00MTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgbGxjX2RfY29ubl9zdGF0ZV90cmFuc18xID0ge1xubmV0L2xsYy9sbGNfY19zdC5jOjQxNjk6XHQuZXZcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxubmV0L2xsYy9sbGNfY19zdC5jLTQxNzAtXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX0FETSxcbi0tXG5uZXQvbGxjL2xsY19jX3N0LmM9NDE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19kX2Nvbm5fc3RhdGVfdHJhbnNfMV8xID0ge1xubmV0L2xsYy9sbGNfY19zdC5jOjQxOTI6XHQuZXZcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxubmV0L2xsYy9sbGNfY19zdC5jLTQxOTMtXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX0FETSxcbi0tXG5uZXQvbGxjL2xsY19jX3N0LmM9NDQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19yc3Rfc3RhdGVfdHJhbnNfMSA9IHtcbm5ldC9sbGMvbGxjX2Nfc3QuYzo0NDE3Olx0LmV2XHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcbm5ldC9sbGMvbGxjX2Nfc3QuYy00NDE4LVx0Lm5leHRfc3RhdGUgICAgPSBMTENfQ09OTl9TVEFURV9SRVNFVCxcbi0tXG5uZXQvbGxjL2xsY19jX3N0LmM9NDcwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19lcnJvcl9zdGF0ZV90cmFuc18xID0ge1xubmV0L2xsYy9sbGNfY19zdC5jOjQ3MDg6XHQuZXZcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxubmV0L2xsYy9sbGNfY19zdC5jLTQ3MDktXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX05PUk1BTCxcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05NDItXHRcdGlmICghbmV3c2spIHtcbm5ldC9sbGMvbGxjX2Nvbm4uYzo5NDM6XHRcdFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG5uZXQvbGxjL2xsY19jb25uLmMtOTQ0LVx0XHRcdFx0aWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODg1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIExMQyBTQUJNRSBDb21tYW5kIEhhbmRsaW5nKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvbGxjL2xsY19jX2V2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExMQyBsYXllciBoYW5kbGVzIHRoZSBTQUJNRSBjb21tYW5kLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgd2hlcmUgdGhlIFAtYml0IGlzIHNldCB2aWEgYGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94YC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBzZXF1ZW5jZSwgbGlrZWx5IGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIGluaXRpYXRpb24gb3IgcmUtZXN0YWJsaXNobWVudC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGlzIGlzIGhhbmRsaW5nIGFuIGV4cGxpY2l0IFNBQk1FIHJlY2VwdGlvbiBvciBpZiBpdCYjMzk7cyB0aWVkIHRvIG90aGVyIHN0YXRlIHRyYW5zaXRpb25zIHdpdGhpbiB0aGUgRlNNLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgaG93IHRoZXkgYXJlIG1hbmFnaW5nIHRoZSBQLWJpdCB3aXRoaW4gdGhlIFNBQk1FIGNvbW1hbmQuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgYWNrbm93bGVkZ21lbnQgcHJvY2VkdXJlcyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGluZy4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLWNvbW1lbnRlZCwgc28gSSBjYW4gZ3Jhc3AgdGhlIG51YW5jZXMgb2YgdGhlIFAtYml0IHNpZ25hbGluZyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2NfZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0aW50IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0MjY6XHR7XG4gNDI3Olx0XHRjb25zdCBzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTtcbiA0Mjg6XHRcbiA0Mjk6XHRcdHJldHVybiBMTENfUERVX0lTX0NNRChwZHUpIFx1MDAyNlx1MDAyNiBMTENfUERVX1RZUEVfSVNfVShwZHUpIFx1MDAyNlx1MDAyNlxuIDQzMDpcdFx0ICAgICAgIExMQ19VX1BEVV9DTUQocGR1KSA9PSBMTENfMl9QRFVfQ01EX1NBQk1FID8gMCA6IDE7XG4gNDMxOlx0fVxuIDQzMjpcdFxuIDQzMzpcdGludCBsbGNfY29ubl9ldl9yeF91YV9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gNDM0Olx0e1xuIDQzNTpcdFx0c3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7XG4gNDM2Olx0XG4gNDM3Olx0XHRyZXR1cm4gTExDX1BEVV9JU19SU1AocGR1KSBcdTAwMjZcdTAwMjYgTExDX1BEVV9UWVBFX0lTX1UocGR1KSBcdTAwMjZcdTAwMjZcbiA0Mzg6XHRcdCAgICAgICBMTENfVV9QRFVfUlNQKHBkdSkgPT0gTExDXzJfUERVX1JTUF9VQSA/IDAgOiAxO1xuIDQzOTpcdH1cbiA0NDA6XHRcbiA0NDE6XHRpbnQgbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NDI6XHR7XG4gNDQzOlx0XHR1MTYgcmMgPSAxO1xuIDQ0NDpcdFx0Y29uc3Qgc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjQyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTExDIFBEVSBIYW5kbGluZyBhbmQgU29ja2V0IENyZWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGJyZWFraW5nIGRvd24gdGhlIExMQyBQRFUgaGFuZGxpbmcuICBGaXJzdCwgdGhlIGluaXRpYWwgY2hlY2sgYGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpYCBhY3R1YWxseSAqbmVnYXRlcyogdGhlIG1lYW5pbmc6IGEgcmV0dXJuIG9mIGAwYCBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFja2V0IGlzICpub3QqIGEgU0FCTUUgY29tbWFuZC4gIEdvdCBpdC4gIElmIGl0IGlzbiYjMzk7dCBTQUJNRSwgdGhlbiB3ZSBjaGVjayBmb3IgRElTQyBjb21tYW5kcy4gSWYgaXQgKmlzKiBhIERJU0MsIHdlIHNlbmQgYSBETSAoRGlzY29ubmVjdCBNb2RlKSByZXNwb25zZSB3aXRoIHRoZSBGIGJpdC4gT3RoZXJ3aXNlLCBpZiB0aGUgUCBiaXQgaXMgc2V0LCB3ZSBhbHNvIHNlbmQgYSBETSB3aXRoIHRoZSBGIGJpdCBzZXQsIHRoZW4gZHJvcCB0aGUgcGFja2V0LiAgQWxsIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgbXkgZm9jdXMgaXMgb24gaG93IHRob3NlIERNIHJlc3BvbnNlcyBhcmUgY29uc3RydWN0ZWQgYW5kIHNlbnQuIFNwZWNpZmljYWxseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdoZW4gYGxsY19jb25uX3NlbmRfZG1fcnNwYCBpcyBjYWxsZWQuIEl0IHVzZXMgYGxsY19hbGxvY19mcmFtZWAgdG8gY3JlYXRlIGEgbmV3IGBza2JgLiAgVGhlIHNpemUgY2FsY3VsYXRpb24gb2YgYGhsZW4gJiM0MzsgZGF0YV9zaXplYCBpcyBnb29kOyBpbiB0aGlzIGNhc2UgdGhhdCB3b3JrcyBvdXQgdG8gYDMgJiM0MzsgbWFjX2hlYWRlcl9sZW4gJiM0MzsgMGAgd2l0aCB0aGUgcmVzdWx0IGJlaW5nIHBhc3NlZCB0byBgbGxjX3BkdV9oZWFkZXJfaW5pdGAuICAKCmBsbGNfcGR1X2hlYWRlcl9pbml0YCBwdXNoZXMgMyBieXRlcyBvbnRvIHRoZSBTS0IgYW5kIHNldHMgYGRzYXBgLCBgc3NhcGAsIGFuZCBgY3RybF8xYCBmaWVsZHMuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIGlzIGBsbGNfcGR1X2hlYWRlcl9pbml0YCB3aGljaCBJIHNlZSBkb2VzIHRoZSBgc2tiX3B1c2hgLCBzZXRzIHRoZSBuZXR3b3JrIGhlYWRlciwgdGhlbiBzZXRzIHRoZSBMTEMgVS1mb3JtYXQgaGVhZGVyIGZpZWxkczogYGRzYXBgLCBgc3NhcGAgYW5kIHRoZSBgY3RybF8xYCBieXRlLiBUaGUgYGNyYCBiaXQgaXMgc2V0IGluIHRoZSBgc3NhcGAgYnl0ZS4KCk5leHQsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCBzZXRzIHRoZSBgY3RybF8xYCBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlIERNIHJlc3BvbnNlIGZvcm1hdCwgaW5jbHVkaW5nIHRoZSBGIGJpdC4gVGhhdCBoYW5kbGVzIHRoZSBjb250cm9sIGJ5dGUuIFNvLCB0aG9zZSB0aHJlZSBieXRlcyBhcmUgdGhlIExMQyBoZWFkZXIsIGNsZWFybHkgZGVmaW5lZC4gIFRoZW4gYGxsY19tYWNfaGRyX2luaXRgIGFkZHMgYW5kIHBvcHVsYXRlcyB0aGUgTUFDIGhlYWRlci4gU28gZmFyLCBzbyBnb29kLgoKTm93LCB0byB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgU0tCPyBMZXQmIzM5O3MgdHJhY2UgaXQgY2FyZWZ1bGx5LiBgYWxsb2Nfc2tiYCBhbGxvY2F0ZXMgdGhlIGJ1ZmZlci4gVGhlbiwgYHNrYl9yZXNlcnZlYCBzZXRzIGFzaWRlIHNwYWNlIGZvciBib3RoIHRoZSBNQUMgYW5kIExMQyBoZWFkZXIuIGBza2JfcHVzaGAgcHV0cyBpbiB0aGUgTExDIGhlYWRlciAoMyBieXRlcykuIFRoZW4sIGBkZXZfaGFyZF9oZWFkZXJgIGNvbnN0cnVjdHMgYW5kIGFkZHMgdGhlIE1BQyBoZWFkZXIgKGxldCYjMzk7cyBzYXkgMTQgYnl0ZXMgZm9yIEV0aGVybmV0KSwgYW5kIGZpbGxzIGl0LiBUaGVyZWZvcmUsIHRoZSBvdmVyYWxsIFNLQiBsZW5ndGggaXMgMTQgJiM0MzsgMyA9IDE3IGJ5dGVzLCBhbmQgYWxsIG9mIHRoZXNlIGJ5dGVzIGFyZSB3cml0dGVuIGV4cGxpY2l0bHkuIE5vIG9idmlvdXMgbWVtb3J5IGxlYWsuIEV4Y2VsbGVudC4KCk5vdywgc2hpZnRpbmcgZ2VhcnMuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgYGxsY19jcmVhdGVfaW5jb21pbmdfc29ja2AuIEl0IGxvb2tzIGxpa2UgaXQgY3JlYXRlcyBhIG5ldyBzb2NrZXQgdG8gaGFuZGxlIGluY29taW5nIGNvbm5lY3Rpb25zLCBjb3B5aW5nIGFkZHJlc3NlcyBhbmQgZGV2aWNlIGluZm9ybWF0aW9uLiBUaGlzIHNlZW1zIGZpbmUsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlIGFsbG9jYXRpb24gaXMgc2FmZS4gIExldCYjMzk7cyBkaWcgaW50byBgbGxjX3NrX2FsbG9jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX3NrX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19jb25uLmg9OTY9c3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaC0xMDAtXG5pbmNsdWRlL25ldC9sbGNfY29ubi5oOjEwMTpzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXG5pbmNsdWRlL25ldC9sbGNfY29ubi5oLTEwMi1cdFx0XHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xuLS1cbm5ldC9sbGMvYWZfbGxjLmM9MTY3PXN0YXRpYyBpbnQgbGxjX3VpX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTE4MC1cdFx0cmMgPSAtRU5PTUVNO1xubmV0L2xsYy9hZl9sbGMuYzoxODE6XHRcdHNrID0gbGxjX3NrX2FsbG9jKG5ldCwgUEZfTExDLCBHRlBfS0VSTkVMLCBcdTAwMjZsbGNfcHJvdG8sIGtlcm4pO1xubmV0L2xsYy9hZl9sbGMuYy0xODItXHRcdGlmIChzaykge1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz03NjI9c3RhdGljIHN0cnVjdCBzb2NrICpsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy03NjYte1xubmV0L2xsYy9sbGNfY29ubi5jOjc2NzpcdHN0cnVjdCBzb2NrICpuZXdzayA9IGxsY19za19hbGxvYyhzb2NrX25ldChzayksIHNrLVx1MDAzZXNrX2ZhbWlseSwgR0ZQX0FUT01JQyxcbm5ldC9sbGMvbGxjX2Nvbm4uYy03NjgtXHRcdFx0XHRcdCAgc2stXHUwMDNlc2tfcHJvdCwgMCk7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTExMzE9c3RhdGljIHZvaWQgbGxjX3NrX2luaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMTU5LS8qKlxubmV0L2xsYy9sbGNfY29ubi5jOjExNjA6ICpcdGxsY19za19hbGxvYyAtIEFsbG9jYXRlcyBMTEMgc29ja1xubmV0L2xsYy9sbGNfY29ubi5jLTExNjEtICpcdEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTExNjktICovXG5uZXQvbGxjL2xsY19jb25uLmM6MTE3MDpzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXG5uZXQvbGxjL2xsY19jb25uLmMtMTE3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBMTEMgU29ja2V0IEFsbG9jYXRpb24qKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBsbGNfc2tfYWxsb2NgIHdpdGhpbiBgbmV0L2xsYy9sbGNfY29ubi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlci1sYXllciBjb25uZWN0aW9uLW9yaWVudGVkIExpbmsgTGF5ZXIgQ29udHJvbCAoTExDKSBzb2NrZXRzIGFyZSBhY3R1YWxseSBicm91Z2h0IGludG8gZXhpc3RlbmNlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGF0IHByb2Nlc3MuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgaXRzZWxmLCBidXQgSSYjMzk7bSBhbHNvIGJldHRpbmcgaXQgZGVhbHMgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYXQgbGVhc3Qgc29tZSBvZiB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgdGllIHRoZSBMTEMgc29ja2V0IGludG8gdGhlIGxhcmdlciBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgYXNzb2NpYXRlZCBjb250cm9sIGJsb2NrcywgbWF5YmUgc29tZSBuZXRsaW5rLXJlbGF0ZWQgc2V0dXAgaWYgdGhpcyBpcyBob3cgTExDIGNvbmZpZ3VyYXRpb24gaGFwcGVucywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbml0aWFsIHN0YXRlIHRyYW5zaXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJcyB0aGlzIHVzaW5nIHRoZSByZWd1bGFyIGtlcm5lbCBhbGxvY2F0b3IsIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgTExDIGxheWVyPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgdG8gb3B0aW1pemUgZm9yIHRoZSBleHBlY3RlZCB0cmFmZmljIHBhdHRlcm5zPyBUaGlzIGNvdWxkIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2Nvbm4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3MDpcdHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSwgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2VybilcbjExNzE6XHR7XG4xMTcyOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBza19hbGxvYyhuZXQsIGZhbWlseSwgcHJpb3JpdHksIHByb3QsIGtlcm4pO1xuMTE3MzpcdFxuMTE3NDpcdFx0aWYgKCFzaylcbjExNzU6XHRcdFx0Z290byBvdXQ7XG4xMTc2Olx0XHRsbGNfc2tfaW5pdChzayk7XG4xMTc3Olx0XHRzb2NrX2luaXRfZGF0YShOVUxMLCBzayk7XG4xMTc4Olx0I2lmZGVmIExMQ19SRUZDTlRfREVCVUdcbjExNzk6XHRcdGF0b21pY19pbmMoXHUwMDI2bGxjX3NvY2tfbnIpO1xuMTE4MDpcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7TExDIHNvY2tldCAlcCBjcmVhdGVkIGluICVzLCBub3cgd2UgaGF2ZSAlZCBhbGl2ZVxcblwmIzM0Oywgc2ssXG4xMTgxOlx0XHRcdF9fZnVuY19fLCBhdG9taWNfcmVhZChcdTAwMjZsbGNfc29ja19ucikpO1xuMTE4MjpcdCNlbmRpZlxuMTE4MzpcdG91dDpcbjExODQ6XHRcdHJldHVybiBzaztcbjExODU6XHR9XG4xMTg2Olx0XG4xMTg3Olx0dm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxuMTE4ODpcdHtcbjExODk6XHRcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3OTkKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMTI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBMTEMgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgYnVnIHdpdGhpbiB0aGUgTExDIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBsaWtlbHkgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBpbmNvbWluZ19zdGF0ZWAsIGBpbmNvbWluZ19saXN0ZW5lcmAsIGFuZCBgaW5jb21pbmdfd29ya2Agc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBtYW5hZ2luZyB0aGUgc3RhdGVzIG9mIGluY29taW5nIGNvbm5lY3Rpb25zIGFuZCB0aGVpciBwcm9wZXIgY2xlYW51cC4KCk15IGZpcnN0IGNoZWNrIHdhcyB0byBlbnN1cmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy4gYHNrX2FsbG9jYCBkb2VzIGl0cyBqb2Igb2YgYWxsb2NhdGluZyBhbmQgemVyb2luZyB0aGUgc29ja2V0LCB3aGljaCBpcyBnb29kLiBUaGUga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQgaXMgYGxsY19jb25uX3NlbmRfZG1fcnNwYC4gV2hpbGUgaXQgYWxsb2NhdGVzIGFuIGBza2JgLCBpdCBleHBsaWNpdGx5IHBvcHVsYXRlcyBhbGwgdGhlIGJ5dGVzIHdpdGhpbiBpdCwgc28gbm8gY29uY2VybiB0aGVyZS4KCkkgdGhlbiBkaWQgYSBkZWVwZXIgZGl2ZSwgY3Jvc3MtY2hlY2tpbmcgYGxsY19jb25uX3NlbmRfZG1fcnNwYCwgc3BlY2lmaWNhbGx5IHRoZSBzb3VyY2Ugb2YgYHNhZGRyLSZndDttYWNgLiBJIHRyYWNlZCBgc2FkZHJgIGJhY2sgdG8gYGxsY19jb25uX2hhbmRsZXJgLCB3aGljaCBwdWxscyB0aGUgZGF0YSBmcm9tIHRoZSBpbmNvbWluZyBgc2tiYCB1c2luZyBmdW5jdGlvbnMgbGlrZSBgbGxjX3BkdV9kZWNvZGVfc2FgIGFuZCBgbGxjX3BkdV9kZWNvZGVfc3NhcGAuIFRoZSBkYXRhIGlzLCB0aGVyZWZvcmUsIGluaXRpYWxpemVkIGZyb20gdGhlIG5ldHdvcmsgcGFja2V0LCBzbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCk5leHQsIEkgbG9va2VkIGF0IGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAgYW5kIGBsbGNfdWlfYWNjZXB0YCwgYXMgdGhlc2UgYXJlIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBjbGVhbnVwIGFuZCBhY2NlcHRhbmNlIHByb2Nlc3MuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcy4gVGhleSYjMzk7cmUgcHJpbWFyaWx5IGludm9sdmVkIGluIHJlbGVhc2luZyBhbmQgbWFuYWdpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIGluY29taW5nIHNvY2tldHMsIGFuZCBhbGwgZGF0YSBhY2Nlc3MgYXBwZWFycyB0byBiZSBwcm9wZXJseSBzeW5jaHJvbml6ZWQgYW5kIGluaXRpYWxpemVkLgoKSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIHN0YW5kYXJkIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgYnVnIGZpeC4gV2hpbGUgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIHJpZ29yb3VzLCBpdCBkb2VzICpub3QqIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mb3JtYXRpb24gbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gS0FTQU4gYW5kIExPQ0tERVAgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGlzIHBhdGNoIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggKFVBRiwgZG91YmxlIGZyZWVzLCBhbmQgbG9ja2luZyBpc3N1ZXMpLiBUaGVyZWZvcmUsIHRoaXMgZG9lcyAqbm90KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAgYW5kIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBpbiB0aGUgTExDIHByb3RvY29sIGJ5IGludHJvZHVjaW5nIHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBgaW5jb21pbmdfd29ya2ApIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGlzdGVuZXIgc29ja2V0IHRlYXJkb3duLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIGZ1bmN0aW9uIHRvIHNlbmQgYSBETSByZXNwb25zZSAoYGxsY19jb25uX3NlbmRfZG1fcnNwYCksIHdoaWNoIGFsbG9jYXRlcyBhIG5ldyBza2IgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGl0cyBieXRlcyAoTExDIGhlYWRlciBhbmQgTUFDIGhlYWRlcikgYmVmb3JlIHRyYW5zbWlzc2lvbiwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkIHRvIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBidWcgaW4gdGhlIExMQyBwcm90b2NvbCBieSBpbnRyb2R1Y2luZyBzdGF0ZSB0cmFja2luZyAoYGluY29taW5nX3N0YXRlYCwgYGluY29taW5nX2xpc3RlbmVyYCwgYGluY29taW5nX3dvcmtgKSBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpc3RlbmVyIHNvY2tldCB0ZWFyZG93bi4gQWxsIG5ld2x5IGludHJvZHVjZWQgc3RydWN0IGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBmdW5jdGlvbiB0byBzZW5kIGEgRE0gcmVzcG9uc2UgKGBsbGNfY29ubl9zZW5kX2RtX3JzcGApLCB3aGljaCBhbGxvY2F0ZXMgYSBuZXcgc2tiIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBpdHMgYnl0ZXMgKExMQyBoZWFkZXIgYW5kIE1BQyBoZWFkZXIpIGJlZm9yZSB0cmFuc21pc3Npb24sIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZCB0byB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToxMzoyOS4yMDMxMzYwNzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyMjE2MTU4MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBidWcgaW4gdGhlIExMQyBwcm90b2NvbCBieSBpbnRyb2R1Y2luZyBzdGF0ZSB0cmFja2luZyAoYGluY29taW5nX3N0YXRlYCwgYGluY29taW5nX2xpc3RlbmVyYCwgYGluY29taW5nX3dvcmtgKSBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpc3RlbmVyIHNvY2tldCB0ZWFyZG93bi4gQWxsIG5ld2x5IGludHJvZHVjZWQgc3RydWN0IGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBmdW5jdGlvbiB0byBzZW5kIGEgRE0gcmVzcG9uc2UgKGBsbGNfY29ubl9zZW5kX2RtX3JzcGApLCB3aGljaCBhbGxvY2F0ZXMgYSBuZXcgc2tiIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBpdHMgYnl0ZXMgKExMQyBoZWFkZXIgYW5kIE1BQyBoZWFkZXIpIGJlZm9yZSB0cmFuc21pc3Npb24sIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZCB0byB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgTExDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cyBhbmQgbmV0d29yayB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToxMzoyOS4yMDMxNDEwMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTI0ODc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUwMzI5ZDUzYWNjNzA1NmJlNjM0MDdmZGNlMmI4NGVmZjQ3NjEzY2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMDk6MTM6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaCBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcXG5pbmRleCBlMWEzMDI2OTY3MjM0Li5lODAwM2RiMTEwYWQ2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcXG4rKysgYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXFxuQEAgLTYsNiArNiw3IEBAXFxuICAqIFxcdFxcdCAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyBcXHUwMDNjYWNtZUBjb25lY3RpdmEuY29tLmJyXFx1MDAzZVxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9sbGNfaWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGMuaFxcdTAwM2VcXG5AQCAtMTMsNiArMTQsMTAgQEBcXG4gI2RlZmluZSBMTENfRVZFTlQgICAgICAgICAgICAgICAgMVxcbiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyXFxuIFxcbisjZGVmaW5lIExMQ19JTkNPTUlOR19OT05FICAgICAgICAwXFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX1BFTkRJTkcgICAgIDFcXG4rI2RlZmluZSBMTENfSU5DT01JTkdfUVVFVUVEICAgICAgMlxcbitcXG4gI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDJcXG4gI2RlZmluZSBMTEMyX0FDS19USU1FICAgICAgICAgICAgIDFcXG4gI2RlZmluZSBMTEMyX1JFSl9USU1FICAgICAgICAgICAgIDNcXG5AQCAtNzIsNiArNzcsOSBAQCBzdHJ1Y3QgbGxjX3NvY2sge1xcbiBcXHRcXHRcXHRcXHRcXHQgICAgICByZWNlaXZlZCBhbmQgY2F1c2VkIHNlbmRpbmcgRlJNUi5cXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgVXNlZCBmb3IgcmVzZW5kaW5nIEZSTVIgKi9cXG4gXFx0dTMyXFx0XFx0ICAgIGNtc2dfZmxhZ3M7XFxuK1xcdGF0b21pY190XFx0ICAgIGluY29taW5nX3N0YXRlO1xcbitcXHRzdHJ1Y3Qgc29ja1xcdCAgICAqaW5jb21pbmdfbGlzdGVuZXI7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCBpbmNvbWluZ193b3JrO1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7XFxuIH07XFxuIFxcbkBAIC05Myw3ICsxMDEsMTAgQEAgc3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXFxuIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTtcXG4gdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcXG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XFxuK2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XFxuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKTtcXG4gXFxuIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuY1xcbmluZGV4IGIwNDQ3YzMzZGJmMDkuLmU4MDU0ODA5Y2YwY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2xsYy9hZl9sbGMuY1xcbisrKyBiL25ldC9sbGMvYWZfbGxjLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2xsY19zYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9sbGNfcGR1LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbGxjX2Nvbm4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9sbGNfY19zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFxcdTAwM2VcXG4gXFxuIC8qIHJlbWVtYmVyOiB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIGlzIHplcm9lZCBiZWNhdXNlIGl0cyBpbiAuYnNzICovXFxuQEAgLTE5Niw2ICsxOTcsNyBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIHtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjO1xcbitcXHRib29sIGxpc3RlbmVyO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrID09IE5VTEwpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMjA2LDYgKzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFx0XFx0bGxjLVxcdTAwM2VsYWRkci5sc2FwLCBsbGMtXFx1MDAzZWRhZGRyLmxzYXApO1xcbiBcXHRpZiAoIWxsY19zZW5kX2Rpc2Moc2spKVxcbiBcXHRcXHRsbGNfdWlfd2FpdF9mb3JfZGlzYyhzaywgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3Z0aW1lbykpO1xcbitcXHRsaXN0ZW5lciA9IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOO1xcbitcXHRpZiAobGlzdGVuZXIpXFxuK1xcdFxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XFxuIFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHtcXG4gXFx0XFx0c3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy1cXHUwMDNlc2FwO1xcbiBcXG5AQCAtMjE0LDE2ICsyMTksMTggQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0bGxjX3NhcF9ob2xkKHNhcCk7XFxuIFxcdFxcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXFx1MDAzZXNhcCwgc2spO1xcbitcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdFxcdGxsY19zYXBfcHV0KHNhcCk7XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcXG4gXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gXFx0fVxcbiBcXHRuZXRkZXZfcHV0KGxsYy1cXHUwMDNlZGV2LCBcXHUwMDI2bGxjLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuIFxcdHNvY2tfcHV0KHNrKTtcXG4gXFx0c29ja19vcnBoYW4oc2spO1xcbiBcXHRzb2NrLVxcdTAwM2VzayA9IE5VTEw7XFxuLVxcdGxsY19za19mcmVlKHNrKTtcXG4rXFx0bGxjX3NrX2ZyZWUoc2ssIHRydWUpO1xcbiBvdXQ6XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTcyMiw2ICs3MjksMTcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdFxcdGdvdG8gZnJlZXM7XFxuIFxcdHJjID0gMDtcXG4gXFx0bmV3c2sgPSBza2ItXFx1MDAzZXNrO1xcbitcXHRsb2NrX3NvY2tfbmVzdGVkKG5ld3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcdGlmIChsbGNfc2sobmV3c2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSB8fFxcbitcXHQgICAgIWxsY19hY2NlcHRfaW5jb21pbmdfc29jayhuZXdzaykpIHtcXG4rXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19OT05FKVxcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0cmVsZWFzZV9zb2NrKG5ld3NrKTtcXG4rXFx0XFx0c29ja19wdXQobmV3c2spO1xcbitcXHRcXHRyYyA9IC1FQ09OTkFCT1JURUQ7XFxuK1xcdFxcdGdvdG8gZnJlZXM7XFxuK1xcdH1cXG4gXFx0LyogYXR0YWNoIGNvbm5lY3Rpb24gdG8gYSBuZXcgc29ja2V0LiAqL1xcbiBcXHRsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7XFxuIFxcdHNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpO1xcbkBAIC03MzcsNiArNzU1LDggQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdHNrX2FjY2VwdHFfcmVtb3ZlZChzayk7XFxuIFxcdGRwcmludGsoXFxcIiVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4gXFx0XFx0bGxjX3NrKHNrKS1cXHUwMDNlYWRkci5zbGxjX3NhcCwgbmV3bGxjLVxcdTAwM2VkYWRkci5sc2FwKTtcXG4rXFx0cmVsZWFzZV9zb2NrKG5ld3NrKTtcXG4rXFx0c29ja19wdXQobmV3c2spO1xcbiBmcmVlczpcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIG91dDpcXG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jXFxuaW5kZXggMjYwNDYwZDUwZjU0Yy4uNGEzNGYyNDBhZDJjYyAxMDA2NDRcXG4tLS0gYS9uZXQvbGxjL2xsY19jb25uLmNcXG4rKysgYi9uZXQvbGxjL2xsY19jb25uLmNcXG5AQCAtMzIsNiArMzIsNyBAQCBzdGF0aWMgaW50IGxsY19leGVjX2Nvbm5fdHJhbnNfYWN0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqZXYpO1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zICpsbGNfcXVhbGlmeV9jb25uX2V2KHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gXFxuIC8qIE9mZnNldCB0YWJsZSBvbiBjb25uZWN0aW9uIHN0YXRlcyB0cmFuc2l0aW9uIGRpYWdyYW0gKi9cXG4gc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdO1xcbkBAIC04OCw2ICs4OSwxMyBAQCBpbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdCAqIHNrYi1cXHUwMDNlc2sgcG9pbnRpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgaW5cXG4gXFx0XFx0ICogbGxjX2Nvbm5faGFuZGxlci4gLWFjbWVcXG4gXFx0XFx0ICovXFxuK1xcdFxcdGlmIChzayAhPSBza2ItXFx1MDAzZXNrIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdHNvY2tfaG9sZChza2ItXFx1MDAzZXNrKTtcXG4rXFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2bGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c2tiX2dldChza2IpO1xcbiBcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XFxuIFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbkBAIC0zNTQsNyArMzYyLDggQEAgc3RhdGljIGludCBsbGNfY29ubl9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbiBcXHRpbnQgcmMgPSAxO1xcbiBcXG4tXFx0aWYgKGxsYy1cXHUwMDNlc3RhdGUgXFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXFxuK1xcdGlmIChsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNIHx8XFxuK1xcdCAgICBsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0cmMgPSAwO1xcbiBcXHR0cmFucyA9IGxsY19xdWFsaWZ5X2Nvbm5fZXYoc2ssIHNrYik7XFxuQEAgLTc2NSwyNyArNzc0LDE2MiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdG1lbWNweShcXHUwMDI2bmV3bGxjLVxcdTAwM2VsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtXFx1MDAzZWxhZGRyKSk7XFxuIFxcdG1lbWNweShcXHUwMDI2bmV3bGxjLVxcdTAwM2VkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtXFx1MDAzZWRhZGRyKSk7XFxuIFxcdG5ld2xsYy1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRuZXdsbGMtXFx1MDAzZWluY29taW5nX2xpc3RlbmVyID0gc2s7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNm5ld2xsYy1cXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZuZXdsbGMtXFx1MDAzZWluY29taW5nX3dvcmssIGxsY19pbmNvbWluZ19zb2NrX3dvcmspO1xcbitcXHRzb2NrX2hvbGQoc2spO1xcbiBcXHRkZXZfaG9sZChkZXYpO1xcbiBcXHRsbGNfc2FwX2FkZF9zb2NrZXQobGxjLVxcdTAwM2VzYXAsIG5ld3NrKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gbmV3c2s7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsbGNfc29jayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGluY29taW5nX3dvcmspO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2bGxjLVxcdTAwM2VzaztcXG4rXFx0c3RydWN0IHNvY2sgKmxpc3RlbmVyID0gbGxjLVxcdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcXG4rXFxuK1xcdGxvY2tfc29jayhsaXN0ZW5lcik7XFxuK1xcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4rXFx0bGxjX3NrX2ZyZWUoc2ssIGZhbHNlKTtcXG4rXFx0c29ja19vcnBoYW4oc2spO1xcbitcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcXG4rXFx0cmVsZWFzZV9zb2NrKGxpc3RlbmVyKTtcXG4rXFx0ZGV2X3B1dChsbGMtXFx1MDAzZWRldik7XFxuK1xcdGxsYy1cXHUwMDNlZGV2ID0gTlVMTDtcXG4rXFx0c29ja19wdXQoc2spO1xcbitcXHRzb2NrX3B1dChsaXN0ZW5lcik7XFxuK31cXG4rXFxuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbitcXG4rXFx0aWYgKGF0b21pY194Y2hnKFxcdTAwMjZsbGMtXFx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT1cXG4rXFx0ICAgIExMQ19JTkNPTUlOR19OT05FKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRXUklURV9PTkNFKGxsYy1cXHUwMDNlc3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpO1xcbitcXHRzb2NrX2hvbGQoc2spO1xcbitcXHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVxcdTAwM2VzYXAsIHNrKTtcXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bGxjLVxcdTAwM2VpbmNvbWluZ193b3JrKTtcXG4rfVxcbitcXG4rYm9vbCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4rXFxuK1xcdGlmIChhdG9taWNfY21weGNoZyhcXHUwMDI2bGxjLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCxcXG4rXFx0XFx0XFx0XFx0ICBMTENfSU5DT01JTkdfTk9ORSkgIT0gTExDX0lOQ09NSU5HX1FVRVVFRClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0c29ja19wdXQobGxjLVxcdTAwM2VpbmNvbWluZ19saXN0ZW5lcik7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpKSB7XFxuK1xcdFxcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcbitcXHRcXHRpZiAobmV3c2sgXFx1MDAyNlxcdTAwMjYgbmV3c2sgIT0gc2spIHtcXG4rXFx0XFx0XFx0aW50IGluY29taW5nX3N0YXRlO1xcbitcXG4rXFx0XFx0XFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XFxuK1xcdFxcdFxcdGluY29taW5nX3N0YXRlID1cXG4rXFx0XFx0XFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKTtcXG4rXFx0XFx0XFx0aWYgKGluY29taW5nX3N0YXRlICE9IExMQ19JTkNPTUlOR19OT05FKSB7XFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRcXHRpZiAoaW5jb21pbmdfc3RhdGUgPT0gTExDX0lOQ09NSU5HX1FVRVVFRClcXG4rXFx0XFx0XFx0XFx0XFx0c29ja19wdXQobmV3c2spO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0fVxcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXJcXG4rICogYWRkcmVzcyBpbiBsbGMtXFx1MDAzZWRhZGRyIHlldC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbitcXHRpZiAoIW5za2IpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG4rXFx0XFx0XFx0ICAgIHNhZGRyLVxcdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XFxuK1xcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgZl9iaXQpO1xcbitcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBzYWRkci1cXHUwMDNlbWFjKTtcXG4rXFx0aWYgKHVubGlrZWx5KHJjKSlcXG4rXFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGRldl9xdWV1ZV94bWl0KG5za2IpO1xcbit9XFxuK1xcbiB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgbGxjX2FkZHIgc2FkZHIsIGRhZGRyO1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDtcXG4rXFx0Ym9vbCBuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XFxuK1xcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XFxuIFxcbiBcXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XFxuIFxcdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcXHUwMDI2c2FkZHIubHNhcCk7XFxuIFxcdGxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTtcXG4gXFx0bGxjX3BkdV9kZWNvZGVfZHNhcChza2IsIFxcdTAwMjZkYWRkci5sc2FwKTtcXG4gXFxuK2xvb2t1cDpcXG4gXFx0c2sgPSBfX2xsY19sb29rdXAoc2FwLCBcXHUwMDI2c2FkZHIsIFxcdTAwMjZkYWRkciwgZGV2X25ldChza2ItXFx1MDAzZWRldikpO1xcbiBcXHRpZiAoIXNrKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG4rXFx0XFx0bmV3c2sgPSBzaztcXG4rXFx0XFx0YmhfbG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0c29ja19wdXQobmV3c2spO1xcbitcXHRcXHRcXHRuZXdzayA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gbG9va3VwO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNrID0gbGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XFxuK1xcdFxcdHNvY2tfaG9sZChzayk7XFxuK1xcdFxcdG5ld3NrX2xvb2t1cF9yZWYgPSB0cnVlO1xcbitcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdH1cXG4rXFxuIFxcdGJoX2xvY2tfc29jayhzayk7XFxuK1xcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXFxuK1xcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdGlmIChuZXdza19sb29rdXBfcmVmKSB7XFxuK1xcdFxcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xcbitcXHRcXHRuZXdza19sb2NrZWQgPSB0cnVlO1xcbitcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxcbitcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnlfdW5sb2NrO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4rXFx0XFx0XFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XFxuK1xcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0LypcXG4gXFx0ICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC1cXHUwMDNlYWNjZXB0XFxuIFxcdCAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOlxcbkBAIC03OTUsMTAgKzkzOSwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZVxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2FkZHIsIFxcdTAwMjZkYWRkcik7XFxuLVxcdFxcdGlmICghbmV3c2spXFxuLVxcdFxcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdFxcdGlmICghbmV3c2spIHtcXG4rXFx0XFx0XFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xcbitcXHRcXHRcXHRcXHRcXHR1OCBmX2JpdDtcXG4rXFxuK1xcdFxcdFxcdFxcdFxcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFxcdTAwMjZmX2JpdCk7XFxuK1xcdFxcdFxcdFxcdFxcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcXHUwMDI2c2FkZHIsIGZfYml0KTtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcXHUwMDI2c2FkZHIsIDEpO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cXHUwMDNlZGV2LCBcXHUwMDI2c2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZGFkZHIpO1xcbitcXHRcXHRcXHRpZiAoIW5ld3NrKVxcbitcXHRcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuQEAgLTgxMywxOCArOTcyLDQ5IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRza2ItXFx1MDAzZXNrID0gc2s7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfZWZyZWU7XFxuIFxcdH1cXG4tXFx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxcbitcXHRpZiAodW5saWtlbHkobGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkpIHtcXG4rXFx0XFx0aWYgKG5ld3NrKSB7XFxuK1xcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdFxcdFxcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcXG4rXFx0XFx0XFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHRcXHRcXHQgICBMTENfSU5DT01JTkdfUEVORElORykge1xcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbiBcXHRcXHRsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuLVxcdGVsc2Uge1xcbitcXHRcXHRpZiAobmV3c2sgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZHByaW50ayhcXFwiJXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGxsY19zZXRfYmFja2xvZ190eXBlKHNrYiwgTExDX1BBQ0tFVCk7XFxuLVxcdFxcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3JjdmJ1ZikpKVxcbitcXHRcXHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSkge1xcbitcXHRcXHRcXHRpZiAobmV3c2spXFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbiBcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gb3V0OlxcbitcXHRpZiAobmV3c2tfbG9ja2VkKVxcbitcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuIFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4gXFx0c29ja19wdXQoc2spO1xcbitcXHRpZiAobmV3c2tfbG9va3VwX3JlZilcXG4rXFx0XFx0c29ja19wdXQobmV3c2spO1xcbiBcXHRyZXR1cm47XFxuK3JldHJ5X3VubG9jazpcXG4rXFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRuZXdza19sb2NrZWQgPSBmYWxzZTtcXG4rXFx0YmhfdW5sb2NrX3NvY2soc2spO1xcbitcXHRzb2NrX3B1dChzayk7XFxuK1xcdHNvY2tfcHV0KG5ld3NrKTtcXG4rXFx0bmV3c2sgPSBOVUxMO1xcbitcXHRuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XFxuK1xcdGdvdG8gbG9va3VwO1xcbiBkcm9wOlxcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuO1xcbkBAIC04NTIsMTIgKzEwNDIsNTIgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdGludCByYyA9IDA7XFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4rXFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVxcdTAwM2VzaztcXG4gXFxuIFxcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XFxuLVxcdFxcdGlmIChsaWtlbHkobGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIDEpKSAvKiBub3QgY2xvc2VkICovXFxuK1xcdFxcdGlmIChuZXdzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG4rXFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fFxcbitcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4rXFx0XFx0XFx0ICAgIGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9rZnJlZV9za2I7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuLVxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxcbitcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChuZXdzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICBhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdFxcdFxcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcXG4rXFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0aWYgKGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XFxuK1xcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X2tmcmVlX3NrYjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcXG4rXFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChsaWtlbHkobGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIDEpKSB7XFxuK1xcdFxcdFxcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xcbitcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRnb3RvIG91dF9rZnJlZV9za2I7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7XFxuIFxcdFxcdC8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi9cXG4gXFx0XFx0aWYgKGxpa2VseShsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXFxuQEAgLTg3MCw2ICsxMTAwLDIzIEBAIHN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0fVxcbiBvdXQ6XFxuIFxcdHJldHVybiByYztcXG4rcmV0cnk6XFxuK1xcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdCAgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7XFxuK1xcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0XFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XFxuK1xcdFxcdGlmIChsbGNfc2sobmV3c2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNlPSBMTENfQ09OTl9TVEFURV9BRE0pXFxuK1xcdFxcdFxcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xcbitcXHRcXHRlbHNlIHtcXG4rXFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfa2ZyZWVfc2tiO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGdvdG8gb3V0X2tmcmVlX3NrYjtcXG4gb3V0X2tmcmVlX3NrYjpcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdGdvdG8gb3V0O1xcbkBAIC05NjAsMTYgKzEyMDcsMTcgQEAgdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxcbiAvKipcXG4gICpcXHRsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldFxcbiAgKlxcdEBzazogLSBzb2NrZXQgdG8gZnJlZVxcbisgKlxcdEBzeW5jOiB3aGV0aGVyIHRvIHN5bmNocm9ub3VzbHkgc3RvcCB0aW1lcnNcXG4gICpcXG4gICpcXHRGcmVlcyBhIExMQyBzb2NrZXRcXG4gICovXFxuLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxcbiB7XFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4gXFxuIFxcdGxsYy1cXHUwMDNlc3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDO1xcbiBcXHQvKiBTdG9wIGFsbCAocG9zc2libHkpIHJ1bm5pbmcgdGltZXJzICovXFxuLVxcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xcbitcXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCBzeW5jKTtcXG4gI2lmZGVmIERFQlVHX0xMQ19DT05OX0FMTE9DXFxuIFxcdHByaW50ayhLRVJOX0lORk8gXFxcIiVzOiB1bmFja3E9JWQsIHR4cT0lZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdHNrYl9xdWV1ZV9sZW4oXFx1MDAyNmxsYy1cXHUwMDNlcGR1X3VuYWNrX3EpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToxMzoyOS41NzkwNDM5NTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg0Mjk2MDc4ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lIGFuZCB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGluY29taW5nIExMQyBjb25uZWN0aW9ucyB0byBmaXggcmFjZSBjb25kaXRpb25zIGFuZCBsaWZlY3ljbGUgaXNzdWVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiB0aGUgY29yZSBMTEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHRyYWZmaWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwMzI5ZDUzYWNjNzA1NmJlNjM0MDdmZGNlMmI4NGVmZjQ3NjEzY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwOToxMzoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5pbmRleCBlMWEzMDI2OTY3MjM0Li5lODAwM2RiMTEwYWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuKysrIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuQEAgLTYsNiArNiw3IEBAXG4gICogXHRcdCAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyBcdTAwM2NhY21lQGNvbmVjdGl2YS5jb20uYnJcdTAwM2VcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2lmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGxjLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCwxMCBAQFxuICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyXG4gXG4rI2RlZmluZSBMTENfSU5DT01JTkdfTk9ORSAgICAgICAgMFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX1BFTkRJTkcgICAgIDFcbisjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyXG4rXG4gI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDJcbiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDMl9SRUpfVElNRSAgICAgICAgICAgICAzXG5AQCAtNzIsNiArNzcsOSBAQCBzdHJ1Y3QgbGxjX3NvY2sge1xuIFx0XHRcdFx0XHQgICAgICByZWNlaXZlZCBhbmQgY2F1c2VkIHNlbmRpbmcgRlJNUi5cbiBcdFx0XHRcdFx0ICAgICAgVXNlZCBmb3IgcmVzZW5kaW5nIEZSTVIgKi9cbiBcdHUzMlx0XHQgICAgY21zZ19mbGFncztcbitcdGF0b21pY190XHQgICAgaW5jb21pbmdfc3RhdGU7XG4rXHRzdHJ1Y3Qgc29ja1x0ICAgICppbmNvbWluZ19saXN0ZW5lcjtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCBpbmNvbWluZ193b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgICBkZXZfaGFzaF9ub2RlO1xuIH07XG4gXG5AQCAtOTMsNyArMTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0XHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xuIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7XG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuK2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmNcbmluZGV4IGIwNDQ3YzMzZGJmMDkuLmU4MDU0ODA5Y2YwY2YgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2FmX2xsYy5jXG4rKysgYi9uZXQvbGxjL2FmX2xsYy5jXG5AQCAtMjcsNiArMjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfc2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX3BkdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19jb25uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2Nfc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2VcbiBcbiAvKiByZW1lbWJlcjogdW5pbml0aWFsaXplZCBnbG9iYWwgZGF0YSBpcyB6ZXJvZWQgYmVjYXVzZSBpdHMgaW4gLmJzcyAqL1xuQEAgLTE5Niw2ICsxOTcsNyBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjO1xuK1x0Ym9vbCBsaXN0ZW5lcjtcbiBcbiBcdGlmICh1bmxpa2VseShzayA9PSBOVUxMKSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtMjA2LDYgKzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdFx0bGxjLVx1MDAzZWxhZGRyLmxzYXAsIGxsYy1cdTAwM2VkYWRkci5sc2FwKTtcbiBcdGlmICghbGxjX3NlbmRfZGlzYyhzaykpXG4gXHRcdGxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2dGltZW8pKTtcbitcdGxpc3RlbmVyID0gc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTjtcbitcdGlmIChsaXN0ZW5lcilcbitcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbiBcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHtcbiBcdFx0c3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy1cdTAwM2VzYXA7XG4gXG5AQCAtMjE0LDE2ICsyMTksMTggQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHQgKi9cbiBcdFx0bGxjX3NhcF9ob2xkKHNhcCk7XG4gXHRcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4rXHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0bGxjX3NhcF9wdXQoc2FwKTtcbiBcdH0gZWxzZSB7XG4rXHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdH1cbiBcdG5ldGRldl9wdXQobGxjLVx1MDAzZWRldiwgXHUwMDI2bGxjLVx1MDAzZWRldl90cmFja2VyKTtcbiBcdHNvY2tfcHV0KHNrKTtcbiBcdHNvY2tfb3JwaGFuKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0bGxjX3NrX2ZyZWUoc2spO1xuK1x0bGxjX3NrX2ZyZWUoc2ssIHRydWUpO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MjIsNiArNzI5LDE3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0XHRnb3RvIGZyZWVzO1xuIFx0cmMgPSAwO1xuIFx0bmV3c2sgPSBza2ItXHUwMDNlc2s7XG4rXHRsb2NrX3NvY2tfbmVzdGVkKG5ld3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4rXHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNIHx8XG4rXHQgICAgIWxsY19hY2NlcHRfaW5jb21pbmdfc29jayhuZXdzaykpIHtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0cmVsZWFzZV9zb2NrKG5ld3NrKTtcbitcdFx0c29ja19wdXQobmV3c2spO1xuK1x0XHRyYyA9IC1FQ09OTkFCT1JURUQ7XG4rXHRcdGdvdG8gZnJlZXM7XG4rXHR9XG4gXHQvKiBhdHRhY2ggY29ubmVjdGlvbiB0byBhIG5ldyBzb2NrZXQuICovXG4gXHRsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7XG4gXHRzb2NrX3Jlc2V0X2ZsYWcobmV3c2ssIFNPQ0tfWkFQUEVEKTtcbkBAIC03MzcsNiArNzU1LDggQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRza19hY2NlcHRxX3JlbW92ZWQoc2spO1xuIFx0ZHByaW50ayhcIiVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRsbGNfc2soc2spLVx1MDAzZWFkZHIuc2xsY19zYXAsIG5ld2xsYy1cdTAwM2VkYWRkci5sc2FwKTtcbitcdHJlbGVhc2Vfc29jayhuZXdzayk7XG4rXHRzb2NrX3B1dChuZXdzayk7XG4gZnJlZXM6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jXG5pbmRleCAyNjA0NjBkNTBmNTRjLi40YTM0ZjI0MGFkMmNjIDEwMDY0NFxuLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jXG4rKysgYi9uZXQvbGxjL2xsY19jb25uLmNcbkBAIC0zMiw2ICszMiw3IEBAIHN0YXRpYyBpbnQgbGxjX2V4ZWNfY29ubl90cmFuc19hY3Rpb25zKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqZXYpO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgKmxsY19xdWFsaWZ5X2Nvbm5fZXYoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuIC8qIE9mZnNldCB0YWJsZSBvbiBjb25uZWN0aW9uIHN0YXRlcyB0cmFuc2l0aW9uIGRpYWdyYW0gKi9cbiBzdGF0aWMgaW50IGxsY19vZmZzZXRfdGFibGVbTkJSX0NPTk5fU1RBVEVTXVtOQlJfQ09OTl9FVl07XG5AQCAtODgsNiArODksMTMgQEAgaW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQgKiBza2ItXHUwMDNlc2sgcG9pbnRpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgaW5cbiBcdFx0ICogbGxjX2Nvbm5faGFuZGxlci4gLWFjbWVcbiBcdFx0ICovXG4rXHRcdGlmIChzayAhPSBza2ItXHUwMDNlc2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0c29ja19ob2xkKHNrYi1cdTAwM2Vzayk7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSxcbitcdFx0XHRcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpO1xuK1x0XHR9XG4gXHRcdHNrYl9nZXQoc2tiKTtcbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbkBAIC0zNTQsNyArMzYyLDggQEAgc3RhdGljIGludCBsbGNfY29ubl9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcdGludCByYyA9IDE7XG4gXG4tXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4rXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0gfHxcbitcdCAgICBsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcbiBcdFx0Z290byBvdXQ7XG4gXHRyYyA9IDA7XG4gXHR0cmFucyA9IGxsY19xdWFsaWZ5X2Nvbm5fZXYoc2ssIHNrYik7XG5AQCAtNzY1LDI3ICs3NzQsMTYyIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlbGFkZHIsIGRhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWxhZGRyKSk7XG4gXHRtZW1jcHkoXHUwMDI2bmV3bGxjLVx1MDAzZWRhZGRyLCBzYWRkciwgc2l6ZW9mKG5ld2xsYy1cdTAwM2VkYWRkcikpO1xuIFx0bmV3bGxjLVx1MDAzZWRldiA9IGRldjtcbitcdG5ld2xsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lciA9IHNrO1xuK1x0YXRvbWljX3NldChcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTtcbitcdElOSVRfV09SSyhcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfd29yaywgbGxjX2luY29taW5nX3NvY2tfd29yayk7XG4rXHRzb2NrX2hvbGQoc2spO1xuIFx0ZGV2X2hvbGQoZGV2KTtcbiBcdGxsY19zYXBfYWRkX3NvY2tldChsbGMtXHUwMDNlc2FwLCBuZXdzayk7XG4gb3V0OlxuIFx0cmV0dXJuIG5ld3NrO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssXG4rXHRcdFx0XHRcdFx0ICAgIGluY29taW5nX3dvcmspO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2bGxjLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNvY2sgKmxpc3RlbmVyID0gbGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuK1xuK1x0bG9ja19zb2NrKGxpc3RlbmVyKTtcbitcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcdGxsY19za19mcmVlKHNrLCBmYWxzZSk7XG4rXHRzb2NrX29ycGhhbihzayk7XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1x0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XG4rXHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xuK1x0ZGV2X3B1dChsbGMtXHUwMDNlZGV2KTtcbitcdGxsYy1cdTAwM2VkZXYgPSBOVUxMO1xuK1x0c29ja19wdXQoc2spO1xuK1x0c29ja19wdXQobGlzdGVuZXIpO1xuK31cbitcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSA9PVxuK1x0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRXUklURV9PTkNFKGxsYy1cdTAwM2VzdGF0ZSwgTExDX0NPTk5fT1VUX09GX1NWQyk7XG4rXHRzb2NrX2hvbGQoc2spO1xuK1x0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cdTAwM2VzYXAsIHNrKTtcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3dvcmspO1xuK31cbitcbitib29sIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuK1xuK1x0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCxcbitcdFx0XHRcdCAgTExDX0lOQ09NSU5HX05PTkUpICE9IExMQ19JTkNPTUlOR19RVUVVRUQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHNvY2tfcHV0KGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcik7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpKSB7XG4rXHRcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cdTAwM2VzaztcbitcbitcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNiBuZXdzayAhPSBzaykge1xuK1x0XHRcdGludCBpbmNvbWluZ19zdGF0ZTtcbitcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpbmNvbWluZ19zdGF0ZSA9XG4rXHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKTtcbitcdFx0XHRpZiAoaW5jb21pbmdfc3RhdGUgIT0gTExDX0lOQ09NSU5HX05PTkUpIHtcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0aWYgKGluY29taW5nX3N0YXRlID09IExMQ19JTkNPTUlOR19RVUVVRUQpXG4rXHRcdFx0XHRcdHNvY2tfcHV0KG5ld3NrKTtcbitcdFx0XHR9XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHR9XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0fVxuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuKy8qXG4rICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXJcbisgKiBhZGRyZXNzIGluIGxsYy1cdTAwM2VkYWRkciB5ZXQuXG4rICovXG4rc3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbitcdGludCByYztcbitcbitcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xuK1x0aWYgKCFuc2tiKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbitcdFx0XHQgICAgc2FkZHItXHUwMDNlbHNhcCwgTExDX1BEVV9SU1ApO1xuK1x0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XG4rXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbitcdGlmICh1bmxpa2VseShyYykpXG4rXHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdGVsc2VcbitcdFx0ZGV2X3F1ZXVlX3htaXQobnNrYik7XG4rfVxuK1xuIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4rXHRzdHJ1Y3Qgc29jayAqc2ssICpuZXdzayA9IE5VTEw7XG4rXHRib29sIG5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTtcbitcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXHUwMDI2c2FkZHIubHNhcCk7XG4gXHRsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgXHUwMDI2ZGFkZHIubHNhcCk7XG4gXG4rbG9va3VwOlxuIFx0c2sgPSBfX2xsY19sb29rdXAoc2FwLCBcdTAwMjZzYWRkciwgXHUwMDI2ZGFkZHIsIGRldl9uZXQoc2tiLVx1MDAzZWRldikpO1xuIFx0aWYgKCFzaylcbiBcdFx0Z290byBkcm9wO1xuIFxuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0bmV3c2sgPSBzaztcbitcdFx0YmhfbG9ja19zb2NrKG5ld3NrKTtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4rXHRcdFx0bmV3c2sgPSBOVUxMO1xuK1x0XHRcdGdvdG8gbG9va3VwO1xuK1x0XHR9XG4rXHRcdHNrID0gbGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcbitcdFx0c29ja19ob2xkKHNrKTtcbitcdFx0bmV3c2tfbG9va3VwX3JlZiA9IHRydWU7XG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdH1cbitcbiBcdGJoX2xvY2tfc29jayhzayk7XG4rXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKVxuK1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0aWYgKG5ld3NrX2xvb2t1cF9yZWYpIHtcbitcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4rXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0Z290byByZXRyeV91bmxvY2s7XG4rXHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8XG4rXHRcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0fVxuK1x0fVxuIFx0LypcbiBcdCAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtXHUwMDNlYWNjZXB0XG4gXHQgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczpcbkBAIC03OTUsMTAgKzkzOSwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdCAqIGluIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIHByaXZhdGUgYXJlYS4gLWFjbWVcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLVx1MDAzZWRldixcbi1cdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnNhZGRyLCBcdTAwMjZkYWRkcik7XG4tXHRcdGlmICghbmV3c2spXG4tXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0aWYgKCFuZXdzaykge1xuK1x0XHRcdGlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuK1x0XHRcdFx0aWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4rXHRcdFx0XHRcdHU4IGZfYml0O1xuK1xuK1x0XHRcdFx0XHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcdTAwMjZmX2JpdCk7XG4rXHRcdFx0XHRcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcdTAwMjZzYWRkciwgZl9iaXQpO1xuK1x0XHRcdFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XG4rXHRcdFx0XHRcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcdTAwMjZzYWRkciwgMSk7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRcdH1cbitcdFx0XHRuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLVx1MDAzZWRldiwgXHUwMDI2c2FkZHIsXG4rXHRcdFx0XHRcdFx0XHQgXHUwMDI2ZGFkZHIpO1xuK1x0XHRcdGlmICghbmV3c2spXG4rXHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4rXHRcdH1cbiBcdFx0c2tiX3NldF9vd25lcl9yKHNrYiwgbmV3c2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbkBAIC04MTMsMTggKzk3Miw0OSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZXNrID0gc2s7XG4gXHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja19lZnJlZTtcbiBcdH1cbi1cdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbitcdGlmICh1bmxpa2VseShsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSkge1xuK1x0XHRpZiAobmV3c2spIHtcbitcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0fSBlbHNlIGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHRcdCAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzayk7XG4rXHRcdH1cbitcdFx0Z290byBkcm9wX3VubG9jaztcbitcdH1cbitcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xuIFx0XHRsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4tXHRlbHNlIHtcbitcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuK1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0fSBlbHNlIHtcbiBcdFx0ZHByaW50ayhcIiVzOiBhZGRpbmcgdG8gYmFja2xvZy4uLlxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGxsY19zZXRfYmFja2xvZ190eXBlKHNrYiwgTExDX1BBQ0tFVCk7XG4tXHRcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpXG4rXHRcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpIHtcbitcdFx0XHRpZiAobmV3c2spXG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiBcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHR9XG4gXHR9XG4gb3V0OlxuK1x0aWYgKG5ld3NrX2xvY2tlZClcbitcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuIFx0YmhfdW5sb2NrX3NvY2soc2spO1xuIFx0c29ja19wdXQoc2spO1xuK1x0aWYgKG5ld3NrX2xvb2t1cF9yZWYpXG4rXHRcdHNvY2tfcHV0KG5ld3NrKTtcbiBcdHJldHVybjtcbityZXRyeV91bmxvY2s6XG4rXHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRuZXdza19sb2NrZWQgPSBmYWxzZTtcbitcdGJoX3VubG9ja19zb2NrKHNrKTtcbitcdHNvY2tfcHV0KHNrKTtcbitcdHNvY2tfcHV0KG5ld3NrKTtcbitcdG5ld3NrID0gTlVMTDtcbitcdG5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTtcbitcdGdvdG8gbG9va3VwO1xuIGRyb3A6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybjtcbkBAIC04NTIsMTIgKzEwNDIsNTIgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4rXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza2ItXHUwMDNlc2s7XG4gXG4gXHRpZiAobGlrZWx5KGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfUEFDS0VUKSkge1xuLVx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpIC8qIG5vdCBjbG9zZWQgKi9cbitcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxuK1x0XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8XG4rXHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcbitcdFx0XHQgICAgbGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHRcdH1cbiBcdFx0XHRyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdFx0ZWxzZVxuK1x0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0fSBlbHNlIGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHRcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbitcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkge1xuK1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdFx0fVxuK1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0fSBlbHNlIGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkge1xuK1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0fVxuIFx0fSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7XG4gXHRcdC8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi9cbiBcdFx0aWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSAgLyogbm90IGNsb3NlZCAqL1xuQEAgLTg3MCw2ICsxMTAwLDIzIEBAIHN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiBvdXQ6XG4gXHRyZXR1cm4gcmM7XG4rcmV0cnk6XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdCAgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7XG4rXHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdGlmIChsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzZT0gTExDX0NPTk5fU1RBVEVfQURNKVxuK1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xuK1x0XHRlbHNlIHtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHR9XG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0Z290byBvdXRfa2ZyZWVfc2tiO1xuIG91dF9rZnJlZV9za2I6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdGdvdG8gb3V0O1xuQEAgLTk2MCwxNiArMTIwNywxNyBAQCB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4gLyoqXG4gICpcdGxsY19za19mcmVlIC0gRnJlZXMgYSBMTEMgc29ja2V0XG4gICpcdEBzazogLSBzb2NrZXQgdG8gZnJlZVxuKyAqXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXG4gICpcbiAgKlx0RnJlZXMgYSBMTEMgc29ja2V0XG4gICovXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4rdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcbiB7XG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4gXG4gXHRsbGMtXHUwMDNlc3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDO1xuIFx0LyogU3RvcCBhbGwgKHBvc3NpYmx5KSBydW5uaW5nIHRpbWVycyAqL1xuLVx0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XG4rXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCBzeW5jKTtcbiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0NcbiBcdHByaW50ayhLRVJOX0lORk8gXCIlczogdW5hY2txPSVkLCB0eHE9JWRcXG5cIiwgX19mdW5jX18sXG4gXHRcdHNrYl9xdWV1ZV9sZW4oXHUwMDI2bGxjLVx1MDAzZXBkdV91bmFja19xKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEzOjI5LjU3OTA0NTA0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NzM4NjY4NzkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgZmFjdCB0aGF0IGl0J3MgdG91Y2hpbmcgYG5ldC9sbGMvYWZfbGxjLmNgLCBgbmV0L2xsYy9sbGNfY29ubi5jYCwgYW5kIGBpbmNsdWRlL25ldC9sbGNfY29ubi5oYCBpbW1lZGlhdGVseSBzaWduYWxzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB3aXRoaW4gdGhlIExvZ2ljYWwgTGluayBDb250cm9sIChMTEMpIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHN0YXRlIG1hY2hpbmUgKGBpbmNvbWluZ19zdGF0ZWApLCBhIHdvcmtxdWV1ZSAoYGluY29taW5nX3dvcmtgKSwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gY29ubmVjdGlvbiBoYW5kbGluZyBmdW5jdGlvbnMgKGBsbGNfY29ubl9oYW5kbGVyYCwgYGxsY19iYWNrbG9nX3JjdmAsIGBsbGNfdWlfYWNjZXB0YCwgYGxsY191aV9yZWxlYXNlYCkgc3Ryb25nbHkgc3VnZ2VzdHMgcmFjZSBjb25kaXRpb24gb3IgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgYmVpbmcgYWRkcmVzc2VkIGluIHRoZSBoYW5kbGluZyBvZiBpbmNvbWluZyBjb25uZWN0aW9ucyBvbiBsaXN0ZW5pbmcgc29ja2V0cy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIExMQyBpcyBldmVuICpyZWFjaGFibGUqIGluIG91ciB0YXJnZXQgZW52aXJvbm1lbnRzLiBUaGFua2Z1bGx5LCBzaW5jZSBMTEMgaXMgYSBzdGFuZGFyZCBuZXR3b3JraW5nIHByb3RvY29sICg4MDIuMiksIGFuZCBjYW4gYmUgdXNlZCBvdmVyIHN0YW5kYXJkIHZpcnR1YWwgRXRoZXJuZXQgaW50ZXJmYWNlcyBsaWtlIGB2ZXRoYCwgYGR1bW15YCwgYW5kIGBsb29wYmFja2AsIEknbSBjb25maWRlbnQgd2UgY2FuIGluY2x1ZGUgaXQgaW4gb3VyIGZ1enppbmcgc2NvcGUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYG5ldC9sbGMvS2NvbmZpZ2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEknbSBiZXR0aW5nIHdlJ2xsIGZpbmQgYENPTkZJR19MTENgIG9yIHBvc3NpYmx5IGBDT05GSUdfTExDMmAgaW4gdGhlcmUuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGNvbmZpcm0gdGhvc2UgYW5kIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgc28gd2UgY2FuIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBlbmFibGVkIGZvciBvdXIgZnV6emluZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjE3OjM2Ljk2NTczNTIxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjAyMDIyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExMQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbGxjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2xsYy9LY29uZmlnOjI6Y29uZmlnIExMQ1xcbm5ldC9sbGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxubmV0L2xsYy9LY29uZmlnLTQtXFxubmV0L2xsYy9LY29uZmlnOjU6Y29uZmlnIExMQzJcXG5uZXQvbGxjL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiQU5TSS9JRUVFIDgwMi4yIExMQyB0eXBlIDIgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MTc6MzcuMzI1OTQ0NTU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAxODI0NDg0NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29yayBzdGFjayBjb25maWd1cmF0aW9uOlxuXG4qKkxMQzIgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYENPTkZJR19MTEMyYCBoZXJlLiBUaGF0J3MgdGhlIHByaW1hcnkgc3dpdGNoLCB0aGUgYmlnIG9uZSwgdGhlIG9uZSB0aGF0ICplbmFibGVzKiBMTEMgdHlwZSAyIHN1cHBvcnQuIEFuZCwgYXMgSSByZWNhbGwsIHRoYXQgaW5jbHVkZXMgZXZlcnl0aGluZyBpbiBgYWZfbGxjLmNgLCBzcGVjaWZpY2FsbHkgdGhlIHNvY2tldC1yZWxhdGVkIGNvZGUuIEdpdmVuIHRoYXQsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbGxjL01ha2VmaWxlYC4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgYnVpbHQgYXMgZXhwZWN0ZWQuIE1ha2luZyBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJpZ2h0LCBhbmQgdGhhdCB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlcyBnZXQgbGlua2VkIGNvcnJlY3RseS4gTGV0J3MgbWFrZSBzdXJlIGl0IGlzIGFsbCBnb2luZyBhcyBwbGFubmVkLCBhbmQgdGhhdCB0aGUgYnVpbGQgaXMgc2V0IHVwIGFwcHJvcHJpYXRlbHkuIEl0J3MgYSBrZXkgcGllY2UgdG8gbWFrZSBzdXJlIExMQ3YyIHNvY2tldHMgYXJlIGNvcnJlY3RseSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDA2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MjA6NTkuMTUwNDMxODU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzQ4Njk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9sbGNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbGxjL01ha2VmaWxlPTE1PWxsYzIteSA6PSBsbGNfaWYubyBsbGNfY19ldi5vIGxsY19jX2FjLm8gbGxjX2Nvbm4ubyBsbGNfY19zdC5vIGxsY19wZHUubyBcXFxcXFxubmV0L2xsYy9NYWtlZmlsZToxNjpcXHQgIGxsY19zYXAubyBsbGNfc19hYy5vIGxsY19zX2V2Lm8gbGxjX3Nfc3QubyBhZl9sbGMubyBsbGNfc3RhdGlvbi5vXFxubmV0L2xsYy9NYWtlZmlsZS0xNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MjA6NTkuNjUzOTIzMDY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA1NjkwNTQ2MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTExDMiBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBgbGxjMi15YCBkZWZpbml0ZWx5IGltcGxpZXMgdGhhdCBgYWZfbGxjLm9gIGlzIGludm9sdmVkLCB3aGljaCBjb25maXJtcyB0aGF0IGBDT05GSUdfTExDMmAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHb29kLCB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIE5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZ1enouXG5cbkZyb20gdGhlIHBhdGNoIGFuYWx5c2lzLCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQ6IGBsbGNfdWlfcmVsZWFzZWAsIGBsbGNfdWlfYWNjZXB0YCwgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLCBgbGxjX2Nvbm5fc2VydmljZWAsIGBsbGNfY3JlYXRlX2luY29taW5nX3NvY2tgLCBgbGxjX2luY29taW5nX3NvY2tfd29ya2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAsIGBsbGNfY29ubl9zZW5kX2RtX3JzcGAsIGBsbGNfY29ubl9oYW5kbGVyYCwgYGxsY19iYWNrbG9nX3JjdmAsIGFuZCBgbGxjX3NrX2ZyZWVgLlxuXG5CYXNlZCBvbiB0aG9zZSBtb2RpZmljYXRpb25zLCBteSBpbml0aWFsIGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gYGxsY191aV9hY2NlcHRgLCBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBhbmQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgZGF0YSBoYW5kbGluZy5cblxuSSBzdXNwZWN0IHRoYXQgYGxsY19jb25uX2hhbmRsZXJgIGlzIGxpa2VseSBjYWxsZWQgZnJvbSBgbGxjX3JjdmAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB0aGF0IGluIGBuZXQvbGxjL2xsY19pbnB1dC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToyNDoyNS4zNDQ0NzMwMzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5MzM2MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19jb25uX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9hZl9sbGMuYz0xMjY4PXN0YXRpYyBpbnQgX19pbml0IGxsYzJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xMjkzLVxcdGxsY19hZGRfcGFjayhMTENfREVTVF9TQVAsIGxsY19zYXBfaGFuZGxlcik7XFxubmV0L2xsYy9hZl9sbGMuYzoxMjk0OlxcdGxsY19hZGRfcGFjayhMTENfREVTVF9DT05OLCBsbGNfY29ubl9oYW5kbGVyKTtcXG5uZXQvbGxjL2FmX2xsYy5jLTEyOTUtb3V0Olxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTU3PWludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04OS1cXHRcXHQgKiBza2ItXFx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXFxubmV0L2xsYy9sbGNfY29ubi5jOjkwOlxcdFxcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXFxubmV0L2xsYy9sbGNfY29ubi5jLTkxLVxcdFxcdCAqL1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTg4Mi1cXG5uZXQvbGxjL2xsY19jb25uLmM6ODgzOnZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04ODQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToyNDoyNS45NjM4MTI4OTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjYyNjg2NTc1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBMTEMgY29ubmVjdGlvbiBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBlbnRyeSBwb2ludHMuIGBsbGNfY29ubl9oYW5kbGVyYCBpcyB3aGVyZSBldmVyeXRoaW5nIHN0YXJ0cywgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIGNvbm5lY3Rpb24gcGFja2V0cyDigJMgdGhhdCdzIGNlbnRyYWwuIFRoZW4gd2UgaGF2ZSBgbGxjX3VpX2FjY2VwdGAsIHRoZSBhY2NlcHQgc3lzY2FsbCBoYW5kbGVyOyBpdCBtYW5hZ2VzIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGVzdGFibGlzaGVkIGxvY2FsbHkuICBgbGxjX3VpX3JlbGVhc2VgIGhhbmRsZXMgdGhlIGNsb3N1cmUgb2YgdGhlc2UgY29ubmVjdGlvbnMsIHdoaWNoIGlzIGFub3RoZXIgY3JpdGljYWwgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gQW5kIGZpbmFsbHksIGBsbGNfYmFja2xvZ19yY3ZgLCB0aGUgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgdGhlIGNvbm5lY3Rpb24gYmFja2xvZywgaXMgdGhlIGxhc3QgcG9pbnQgSSB3YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQuXG5cbk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZm91ciBmdW5jdGlvbnM6IGBsbGNfdWlfYWNjZXB0YCwgYGxsY191aV9yZWxlYXNlYCwgYGxsY19jb25uX2hhbmRsZXJgLCBhbmQgYGxsY19iYWNrbG9nX3JjdmAuIFRoZXkgcmVwcmVzZW50IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBMTEMgY29ubmVjdGlvbiBtYW5hZ2VtZW50LlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYGxsY19jb25uX2hhbmRsZXJgIGlzbid0IHN0YXRpYywgc28gaXTigJlzIGxpa2VseSBleHBvc2VkIGluIHRoZSBzeW1ib2wgdGFibGU7IGJ1dCBiZWZvcmUgSSBkZWx2ZSBpbnRvIGl0IGZ1bGx5IEkgd2FudCB0byBzZWUgaWYgYGxsY19iYWNrbG9nX3JjdmAgaXMgc3RhdGljLiBGcm9tIHdoYXQgSSByZW1lbWJlciBpdCBpcyBzdGF0aWMgaW4gYG5ldC9sbGMvbGxjX2Nvbm4uY2AsIHNvIEknbGwgZ28gY2hlY2sgdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToyNzoxMi4yMzI0NzM5ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTkwMjg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfYmFja2xvZ19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9sbGNfY29ubi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvbGxjX2Nvbm4uYz0xMDI4PXN0YXRpYyBhdG9taWNfdCBsbGNfc29ja19ucjtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDMxLS8qKlxcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMDMyOiAqXFx0bGxjX2JhY2tsb2dfcmN2IC0gUHJvY2Vzc2VzIHJ4IGZyYW1lcyBhbmQgZXhwaXJlZCB0aW1lcnMuXFxubmV0L2xsYy9sbGNfY29ubi5jLTEwMzMtICpcXHRAc2s6IExMQyBzb2NrIChwODAyMiBjb25uZWN0aW9uKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTEwNDAtICovXFxubmV0L2xsYy9sbGNfY29ubi5jOjEwNDE6c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDQyLXtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz0xMTMxPXN0YXRpYyB2b2lkIGxsY19za19pbml0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMTU1LVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmxsYy1cXHUwMDNlcGR1X3VuYWNrX3EpO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMTU2OlxcdHNrLVxcdTAwM2Vza19iYWNrbG9nX3JjdiA9IGxsY19iYWNrbG9nX3JjdjtcXG5uZXQvbGxjL2xsY19jb25uLmMtMTE1Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjI3OjEyLjg2NDM4MTA0MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk4ODI0MDI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBMTEMgQmFja2xvZyBhbmQgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBsbGNfYmFja2xvZ19yY3ZgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIEkgc2VlIHRoYXQgaXQncyBhbHNvIGFzc2lnbmVkIHRvIGBzay1cdTAwM2Vza19iYWNrbG9nX3JjdmAuIEhtbSwgSSdtIHRoaW5raW5nIGl0IG1pZ2h0IGJlIGNsZWFuZXIgdG8gbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIGhhbmRsZXJzLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfdWlfYWNjZXB0YCwgYW5kIGBsbGNfdWlfcmVsZWFzZWAgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc3RhdGljIGZ1bmN0aW9uLiBJdCBmZWVscyBsaWtlIHRoZXJlJ3MgcHJvYmFibHkgYSBtb3JlIGVsZWdhbnQgd2F5IHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcsIGxldmVyYWdpbmcgZXhpc3RpbmcgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIE5vdywgaG9sZCBvbiBhIHNlY29uZOKApiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTGV0IG1lIHNlZS4uLiBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AgaXMgKm5vdCogc3RhdGljLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG1vZGlmaWVkLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgdG8gbWFrZSBzdXJlIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBhY2N1cmF0ZSBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgcmVmYWN0b3JpbmcuIExldCdzIHNlZSBob3cgdGhhdCBvbmUgaXMgYmVpbmcgdXNlZOKAplxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjI5OjMyLjc0Njc4NzA3NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4NjMxNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19jb25uX3N0YXRlX3Byb2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9sbGNfY29ubi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvbGxjX2Nvbm4uYz00Mz1pbnQgc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0ID0gTExDMl9CVVNZX1RJTUUgKiBIWjtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy00NS0vKipcXG5uZXQvbGxjL2xsY19jb25uLmM6NDY6ICpcXHRsbGNfY29ubl9zdGF0ZV9wcm9jZXNzIC0gc2VuZHMgZXZlbnQgdG8gY29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lXFxubmV0L2xsYy9sbGNfY29ubi5jLTQ3LSAqXFx0QHNrOiBjb25uZWN0aW9uXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtNTYtICovXFxubmV0L2xsYy9sbGNfY29ubi5jOjU3OmludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbGxjL2xsY19jb25uLmMtNTgte1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTE4MD12b2lkIGxsY19jb25uX3NlbmRfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTMtICpcXHRQcmVwYXJlcyBzZXJ2aWNlIHBhcmFtZXRlcnMgKHByaW0gYW5kIHByaW1fZGF0YSkuIGNhbGxpbmcgaW5kaWNhdGlvblxcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxOTQ6ICpcXHRmdW5jdGlvbiB3aWxsIGJlIGRvbmUgaW4gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcy5cXG5uZXQvbGxjL2xsY19jb25uLmMtMTk1LSAqL1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTc1Mz1zdGF0aWMgaW50IGxsY19jb25uX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtNzU4LVxcdGV2LVxcdTAwM2VyZWFzb24gPSAwO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo3NTk6XFx0cmV0dXJuIGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxubmV0L2xsYy9sbGNfY29ubi5jLTc2MC19XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTk2NC1cXHRcXHQgKiBDYW4ndCBiZSBza2Jfc2V0X293bmVyX3IsIHRoaXMgd2lsbCBiZSBkb25lIGF0IHRoZVxcbm5ldC9sbGMvbGxjX2Nvbm4uYzo5NjU6XFx0XFx0ICogbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyBmdW5jdGlvbiwgbGF0ZXIgb24sIHdoZW4gd2Ugd2lsbCB1c2VcXG5uZXQvbGxjL2xsY19jb25uLmMtOTY2LVxcdFxcdCAqIHNrYl9xdWV1ZV9yY3Zfc2tiIHRvIHNlbmQgaXQgdG8gdXBwZXIgbGF5ZXJzLCB0aGlzIGlzXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9MTA0MT1zdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtMTA5My1cXHRcXHRpZiAobGlrZWx5KGxsYy1cXHUwMDNlc3RhdGUgXFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cXG5uZXQvbGxjL2xsY19jb25uLmM6MTA5NDpcXHRcXHRcXHRyYyA9IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxubmV0L2xsYy9sbGNfY29ubi5jLTEwOTUtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToyOTozMy4xNjU0MjQ4NjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxNjAwMzgyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBMTEMgQ29ubmVjdGlvbiBTdGF0ZSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUsIG15IGluaXRpYWwgaW5zdGluY3Qgc2F5cyBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AgaXMgYSBzdHJvbmcgY29udGVuZGVyIGZvciB0aGUgZnVuY3Rpb24gaGFuZGxpbmcgc3RhdGUgdHJhbnNpdGlvbnMuIFRoYXQncyB1c3VhbGx5IHRoZSBwbGFjZSB0byBzdGFydC4gTm93LCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbm5lY3Rpb24ncyBzdGF0ZSB0cmFuc2l0aW9ucywgSSB0aGluayBpdCdzIGNydWNpYWwgdG8gY2hlY2sgdGhlIHVzZXIgaW50ZXJmYWNlIHNpZGUgYXMgd2VsbC4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBpbiBgbmV0L2xsYy9hZl9sbGMuY2AuIFRoZXNlIHNob3VsZCBpbGx1bWluYXRlIGhvdyB0aGUgdXBwZXIgbGF5ZXJzIGFyZSBpbnRlcmFjdGluZyB3aXRoIGFuZCBtYW5pcHVsYXRpbmcgY29ubmVjdGlvbiBzdGF0ZXMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGxpa2VseSBjbGFyaWZ5IGEgbG90IGFib3V0IHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gZmxvdyBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHN0YXRlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzA6NTIuMzI1NDY2NTA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTYyNjY2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX3VpX2FjY2VwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbGxjL2FmX2xsYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvYWZfbGxjLmM9Njc3PXN0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jLTY5Mi0vKipcXG5uZXQvbGxjL2FmX2xsYy5jOjY5MzogKlxcdGxsY191aV9hY2NlcHQgLSBhY2NlcHQgYSBuZXcgaW5jb21pbmcgY29ubmVjdGlvbi5cXG5uZXQvbGxjL2FmX2xsYy5jLTY5NC0gKlxcdEBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLlxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy03MDAtICovXFxubmV0L2xsYy9hZl9sbGMuYzo3MDE6c3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxubmV0L2xsYy9hZl9sbGMuYy03MDItXFx0XFx0XFx0IHN0cnVjdCBwcm90b19hY2NlcHRfYXJnICphcmcpXFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jPTEyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTI0Ny1cXHQuc29ja2V0cGFpciAgPSBzb2NrX25vX3NvY2tldHBhaXIsXFxubmV0L2xsYy9hZl9sbGMuYzoxMjQ4OlxcdC5hY2NlcHQgICAgICA9IGxsY191aV9hY2NlcHQsXFxubmV0L2xsYy9hZl9sbGMuYy0xMjQ5LVxcdC5nZXRuYW1lICAgICA9IGxsY191aV9nZXRuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMDo1Mi42NDE3NTAzODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MjA5ODgxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBDaGVjayBhbmQgRm9sbG93LVVwKipcblxuT2theSwgc28gYGxsY191aV9hY2NlcHRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFNpbmNlIGl0J3Mgc3RhdGljLCBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LCB3aGljaCBjYW4gaW1wYWN0IGl0cyB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIHJldXNlIGFjcm9zcyBkaWZmZXJlbnQgbW9kdWxlcy4gR2l2ZW4gdGhpcywgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgd2hhdCB0aGF0IGltcGxpZXMuIE5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBsbGNfdWlfcmVsZWFzZWAuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHByb2JhYmx5IGltcG9ydGFudCwgaWYgb25lIGlzIHN0YXRpYyB0aGVuIHdoeSwgYW5kIGlmIHRoZXkgYXJlIHJlbGF0ZWQsIGhvdy4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gcmVsZWFzaW5nIHNvbWV0aGluZyB0aGF0IHdhcyBhY2NlcHRlZCwgb3IgaGFuZGxlZCBkaWZmZXJlbnRseSBpbiBhIHN0YXRpYyBjb250ZXh0LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgZGVmaW5lZCBhbmQgaG93IGl0J3MgdXNlZC4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBwb3RlbnRpYWwgZGVzaWduIGltcGxpY2F0aW9ucyBvciBjb25zdHJhaW50cy4gSSB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGNhbGxzIGl0IG1ha2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzE6MjYuMDYyNzQxNzA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI1NDE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfdWlfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbGxjL2FmX2xsYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvYWZfbGxjLmM9MTY3PXN0YXRpYyBpbnQgbGxjX3VpX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTkwLS8qKlxcbm5ldC9sbGMvYWZfbGxjLmM6MTkxOiAqXFx0bGxjX3VpX3JlbGVhc2UgLSBzaHV0ZG93biBzb2NrZXRcXG5uZXQvbGxjL2FmX2xsYy5jLTE5Mi0gKlxcdEBzb2NrOiBTb2NrZXQgdG8gcmVsZWFzZS5cXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTk1LSAqL1xcbm5ldC9sbGMvYWZfbGxjLmM6MTk2OnN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvbGxjL2FmX2xsYy5jLTE5Ny17XFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jPTEyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTI0My1cXHQub3duZXIgICAgICAgPSBUSElTX01PRFVMRSxcXG5uZXQvbGxjL2FmX2xsYy5jOjEyNDQ6XFx0LnJlbGVhc2UgICAgID0gbGxjX3VpX3JlbGVhc2UsXFxubmV0L2xsYy9hZl9sbGMuYy0xMjQ1LVxcdC5iaW5kXFx0ICAgICA9IGxsY191aV9iaW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMToyNi4xMDgwMDA0NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMDc3MTQ5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgQVBJIEVudHJ5cG9pbnRzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhpcyBmdXp6aW5nIHNldHVwLiBUaGUgcHJvbXB0IGlzIHByZXR0eSBjbGVhcjogaXQgd2FudHMgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2U7IGlubGluaW5nIHdvdWxkIG9ic2N1cmUgdGhlIGZ1bmN0aW9uJ3MgZGlzdGluY3QgYWRkcmVzcywgbWFraW5nIGl0IGhhcmRlciBmb3IgdGhlIGZ1enplciB0byB0YXJnZXQgdGhlbSBlZmZlY3RpdmVseS5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIGBsbGNfdWlfcmVsZWFzZWAgaXMgc3RhdGljLiBUaGF0J3MgYSByZWQgZmxhZy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgbWVhbnMgaXQgd29uJ3QgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcyBpbiB0aGUgZnV6emVyIHVubGVzcyBpdCBzb21laG93ICppc24ndCogaW5saW5lZC4gR3JhbnRlZCwgdGhlc2UgYHByb3RvX29wc2AgZnVuY3Rpb25zICpzaG91bGRuJ3QqIGJlIGlubGluZWQgYmVjYXVzZSB0aGVpciBhZGRyZXNzZXMgYXJlIHVzdWFsbHkgdGFrZW4sIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSXQncyBhIHJpc2suIEnigJlsbCBtYWtlIHN1cmUgdG8gZXhwbG9yZSB3aGV0aGVyIG9yIG5vdCBpdCdzIGFjdHVhbGx5IGlubGluZWQuXG5cbkhvd2V2ZXIsIHNpbmNlIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBhcmUgaG9va2VkIGludG8gYHByb3RvX29wc2AsIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGV5IGFyZW4ndCBpbmxpbmVkIGF0IGFsbC4gSSB3aWxsIHRha2UgdGhpcyBpbnRvIGFjY291bnQuXG5cblRvIGJlIGV4dHJhIHNhZmUsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZXNlIG9wZXJhdGlvbnMuIEkgY2FuIGFsc28gaW5jbHVkZSBgbGxjX2Nvbm5faGFuZGxlcmAgYW5kIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AgYW5kIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgIGFyZSAqbm9uLXN0YXRpYyogYW5kICpuZXcqIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2guIEJpbmdvISBUaG9zZSBhcmUgZGVmaW5pdGVseSBwcmltZSBjYW5kaWRhdGVzIHRvIGluY2x1ZGUuIEkgd2lsbCBuZWVkIHRvIHByaW9yaXRpemUgdGhvc2UgdHdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTozOC40MTU3MTc0NThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTA5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19yZWxlYXNlX2luY29taW5nX3NvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9sbGNfY29ubi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvbGxjX2Nvbm4uYz03ODc9c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtODA2LVxcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4MDc6dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbGxjL2xsY19jb25uLmMtODA4LXtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz04MzM9dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtODQ3LVxcdFxcdFxcdGlmIChpbmNvbWluZ19zdGF0ZSAhPSBMTENfSU5DT01JTkdfTk9ORSkge1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4NDg6XFx0XFx0XFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XFxubmV0L2xsYy9sbGNfY29ubi5jLTg0OS1cXHRcXHRcXHRcXHRpZiAoaW5jb21pbmdfc3RhdGUgPT0gTExDX0lOQ09NSU5HX1FVRVVFRClcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz04ODM9dm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtOTI4LVxcdFxcdFxcdCAgICAgc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSkge1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo5Mjk6XFx0XFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XFxubmV0L2xsYy9sbGNfY29ubi5jLTkzMC1cXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTk3OC1cXHRcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXFxubmV0L2xsYy9sbGNfY29ubi5jOjk3OTpcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG5uZXQvbGxjL2xsY19jb25uLmMtOTgwLVxcdFxcdH0gZWxzZSBpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy05ODEtXFx0XFx0XFx0ICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG5uZXQvbGxjL2xsY19jb25uLmM6OTgyOlxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy05ODMtXFx0XFx0fVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTk5MC1cXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXFxubmV0L2xsYy9sbGNfY29ubi5jOjk5MTpcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG5uZXQvbGxjL2xsY19jb25uLmMtOTkyLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtOTk2LVxcdFxcdFxcdGlmIChuZXdzaylcXG5uZXQvbGxjL2xsY19jb25uLmM6OTk3OlxcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy05OTgtXFx0XFx0XFx0Z290byBkcm9wX3VubG9jaztcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz0xMDQxPXN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDYxLVxcdFxcdFxcdCAgICBsbGNfc2sobmV3c2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkge1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMDYyOlxcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDYzLVxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDY5LVxcdFxcdFxcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcXG5uZXQvbGxjL2xsY19jb25uLmM6MTA3MDpcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG5uZXQvbGxjL2xsY19jb25uLmMtMTA3MS1cXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjMxOjM4LjQ2MzIzMjYxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzY3NzgwMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBhbmQgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCBhcmUgaW5kZWVkIHRoZSBuZXcsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50cm9kdWNlcy4gQW5kLCBJIHNlZSBgbGxjX2Nvbm5faGFuZGxlcmAgaXMgYWxzbyBub24tc3RhdGljOyB0aGVzZSBhcmUgYWxsIHByaW1lIGZvY3VzIHBvaW50cy4gVGhleSdyZSBjbGVhcmx5IGludGVuZGVkIHRvIGJlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGVpciBvcmlnaW5hbCBzY29wZSwgd2hpY2ggaXMgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLlxuXG5Ob3csIEkgbmVlZCB0byByZXZpc2l0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gVGhlIGNvcmUgY29uZmlnIG9wdGlvbiBpcyBgQ09ORklHX0xMQzJgLCB0aGF0J3MgY2xlYXIuIEJ1dCwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkPyBJJ2xsIHJlLWV4YW1pbmUgYG5ldC9sbGMvS2NvbmZpZ2AgdGhvcm91Z2hseSB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgYW5kIGhvdyB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA2NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo0NC4yMzEwMTQ5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MzkxODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo0NC4yNzQ1NjIwMjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODMyODk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYENPTkZJR19MTEMyYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgQ09ORklHX0xMQzJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcywgbW9kdWxlcywgb3IgY29uZmlndXJhdGlvbnMgcmVseSBvbiB0aGlzLiBJdCdzIGNydWNpYWwgdG8gZ3Jhc3AgdGhlIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBiZWZvcmUgbWFraW5nIGFueSBjaGFuZ2VzIG9yIGNvbnNpZGVyaW5nIGl0cyByZW1vdmFsLiBUaGlzIGludm9sdmVzIGRpZ2dpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgY3Jvc3MtcmVmZXJlbmNpbmcgd2l0aCBvdGhlciByZWxldmFudCBLY29uZmlncywgYW5kIHBvc3NpYmx5IGV2ZW4gZ2xhbmNpbmcgYXQgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGZpbGVzIHRoYXQgbWlnaHQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB1c2UgdGhpcyBvcHRpb24uIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLCBhbnkgZGVmYXVsdCB2YWx1ZXMgaXQgaW5mbHVlbmNlcywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLiBBIGhvbGlzdGljIHZpZXcgaXMga2V5IOKAkyBJIG5lZWQgdG8gZW5zdXJlIG5vdGhpbmcgYnJlYWtzIGlmIEkgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgYWJvdXQgYENPTkZJR19MTEMyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo0OC42NDI4OTMzNjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjY5MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMTEMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sbGMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbGxjL0tjb25maWc9Mj1jb25maWcgTExDXFxuLS1cXG5uZXQvbGxjL0tjb25maWctNC1cXG5uZXQvbGxjL0tjb25maWc6NTpjb25maWcgTExDMlxcbm5ldC9sbGMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo0OC42ODc1NjU4NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MDY0NDE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtjb25maWcgb2YgbmV0L2xsYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBcIm5ldC9sbGMvS2NvbmZpZ1wiLi4uICp0aGF0KiBzdWdnZXN0cyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBzdWJsYXllciB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIG1hcCBvdXQgdGhlIHBvdGVudGlhbCBhcmVhcyB3ZSdsbCBiZSBkZWFsaW5nIHdpdGguIFdlJ3JlIGxpa2VseSB0byBzZWUgc2V0dGluZ3MgcmVsYXRlZCB0bzpcblxuKiAgICoqTExDIHByb3RvY29sIHN1cHBvcnQ6KiogQXJlIHdlIGNvbmZpZ3VyaW5nIHNwZWNpZmljIExMQyBwcm90b2NvbHMgKGUuZy4sIElFRUUgODAyLjIgVHlwZSAxLCBUeXBlIDIsIG9yIG1heWJlIGV2ZW4gcHJvcHJpZXRhcnkgb25lcyk/IEFyZSB0aGVyZSBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgZGlmZmVyZW50IExMQyBpbXBsZW1lbnRhdGlvbnM/XG4qICAgKipFbmNhcHN1bGF0aW9uL0ZyYW1pbmc6KiogVGhlcmUncyBhIGhpZ2ggcHJvYmFiaWxpdHkgd2UnbGwgc2VlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gaG93IExMQyBmcmFtZXMgYXJlIGVuY2Fwc3VsYXRlZCB3aXRoaW4gb3RoZXIgbmV0d29yayBwcm90b2NvbHMuIFRoaW5rIGFib3V0IFNOQVAgKFN1Yi1OZXR3b3JrIEFjY2VzcyBQcm90b2NvbCksIExMQy9TTkFQIGJyaWRnaW5nLCBtYXliZSBldmVuIHNvbWUgb2JzY3VyZSB0dW5uZWxpbmcgbWV0aG9kcy5cbiogICAqKkhhcmR3YXJlIERlcGVuZGVuY2llczoqKiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHdlIG1pZ2h0IGZpbmQgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXJzIChOSUNzKSBvciBoYXJkd2FyZS5cbiogICAqKlBlcmZvcm1hbmNlIFR1bmluZzoqKiBMTEMgaXMgYSBsYXllciB3aXRoIHRoZSBwb3RlbnRpYWwgdG8gYmUgYSBib3R0bGVuZWNrLCBzbyBpdCdzIHZlcnkgbGlrZWx5IHRoZXJlJ2xsIGJlIHNldHRpbmdzIGZvciBvcHRpbWl6aW5nIGJ1ZmZlcmluZywgd2luZG93aW5nLCBhbmQgbWF5YmUgZXZlbiBpbnRlcnJ1cHQgaGFuZGxpbmcgcmVsYXRlZCB0byBMTEMgdHJhZmZpYy5cbiogICAqKkRlYnVnZ2luZy9UcmFjaW5nOioqIEEgY3J1Y2lhbCBwYXJ0IG9mIGFueSB3ZWxsLWRlc2lnbmVkIEtjb25maWcgZmlsZSBpcyB0aGUgaW5jbHVzaW9uIG9mIG9wdGlvbnMgdG8gZW5hYmxlIGRlYnVnZ2luZyBhbmQgdHJhY2luZy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYERFQlVHX0xMQ2Agb3IgYFRSQUNFX0xMQ2AgZmxhZ3MgdG8gaGVscCB0cm91Ymxlc2hvb3QgYW55IExMQy1yZWxhdGVkIGlzc3VlcyB0aGF0IG1pZ2h0IGNvbWUgdXAuXG5cbk15IGdvYWwgaW4gcmVhZGluZyB0aGlzIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBzZWUgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBib29sYCwgYHRyaXN0YXRlYCwgYGludGAsIGFuZCBgc3RyaW5nYCBvcHRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiBlYWNoIHNldHRpbmcuIEknbGwgYWxzbyBjaGVjayBvdXQgYW55IGhlbHAgdGV4dCwgdGhpcyBnaXZlcyBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIGFzIHRvIHdoYXQgaXMgYXZhaWxhYmxlIGFuZCB3aHkuIFRoaXMgY291bGQgaW5mbHVlbmNlIG91ciBvdmVyYWxsIG5ldHdvcmsgY29uZmlndXJhdGlvbnMgYW5kIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzE6NTMuNzY4MjExODU5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9sbGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIExMQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIExMQzJcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0c2VsZWN0IExMQ1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGlzIGEgTG9naWNhbCBMaW5rIExheWVyIHR5cGUgMiwgY29ubmVjdGlvbiBvcmllbnRlZCBzdXBwb3J0LlxcbiAgMTA6XFx0XFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIFBGX0xMQyBzb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo1My43NjgyNTg0NjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAwMjUyOTkyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTExDMiBDb25maWd1cmF0aW9uIFN1bW1hcnkqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBMTEMyYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGVuYWJsZSBmb3IgdGhpcy4gTGV0IG1lIHNvbGlkaWZ5IG15IHJlYXNvbmluZyBoZXJlLCBhcyBJJ20gZ29pbmcgdG8gc2V0IHRoaXMgdXAgZm9yIGZ1enppbmcuXG5cbkZpcnN0LCB0aGUgY29yZSBpZGVhOiB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IGludHJvZHVjaW5nIGEgbmV3IHN0YXRlIG1hY2hpbmUgYW5kIHdvcmtxdWV1ZS4gVGhpcyBpcyByaWdodCBpbiB0aGUgY29yZSBvZiB0aGUgTExDIG5ldHdvcmtpbmcgY29kZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhvc2UgUEZfTExDIHNvY2tldHMgYW5kIG9idmlvdXNseSBuZXR3b3JrIHRyYWZmaWMuIFNvLCB3b3J0aCBmdXp6aW5nLCB0aGF0J3MgY2xlYXIuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdXNlIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAsIGFuZCBgbGxjX2Nvbm5faGFuZGxlcmAgYXMgdGhlIGBGb2N1c1N5bWJvbHNgLiBMZXQncyBjb25maXJtIGBsbGNfY29ubl9oYW5kbGVyYCBtYWtlcyBzZW5zZTogSXQncyB0aGUgcHJpbWFyeSBoYW5kbGVyIGZvciAqaW5jb21pbmcqIHBhY2tldHMgb24gTExDIGNvbm5lY3Rpb25zLCBzbyBzcG90IG9uLiBJIGFsc28gY29uc2lkZXJlZCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AsIGFzIGl0J3MgYmVlbiBtb2RpZmllZCwgYW5kIGltcG9ydGFudGx5LCBpdCdzIG5vbi1zdGF0aWMuXG5cbkFjdHVhbGx5LCBsZXQncyByZXZpc2l0IGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYC4gSXQncyBub3QgKmV4cG9ydGVkKiBhcyBJIGluaXRpYWxseSB0aG91Z2h0LCBidXQgaXQncyBub3Qgc3RhdGljIGVpdGhlciwgYW5kIHRoYXQgbWFrZXMgaXQgcGVyZmVjdGx5IHZhbGlkIGFzIGEgZm9jdXMgc3ltYm9sLlxuXG5Ob3csIGFib3V0IGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYC4gSXQncyBiZWVuIHRvdWNoZWQsIGJ1dCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbWluaW1hbC4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBhcHBlYXJzIHRvIHJlc2lkZSBpbiBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGFuZCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLlxuXG5TcGVjaWZpY2FsbHksIGBsbGNfY29ubl9oYW5kbGVyYCBoYXMgYSBzdWJzdGFudGlhbCBudW1iZXIgb2YgY2hhbmdlcywgYW5kIHRoZXNlIHN5bWJvbHMsIGNvbWJpbmVkLCBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcGF0Y2guXG5cbkkgYWxzbyBjb25zaWRlcmVkIGFkZGluZyB0aGUgc3lzY2FsbCBoYW5kbGVycyBgbGxjX3VpX2FjY2VwdGAgYW5kIGBsbGNfdWlfcmVsZWFzZWAuIEFsdGhvdWdoIHRoZXkgYXJlIHN0YXRpYywgdGhleSBhcmUgdGhlIG1haW4gc3lzY2FsbCBoYW5kbGVycyBtb2RpZmllZCwgYW5kIEkgY291bGQgYWRkIHRoZW0ganVzdCBpbiBjYXNlLiBCdXQgdG8gYmUgc2FmZSwgSSdsbCBzdGljayB0byBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBhbmQgYGxsY19jb25uX2hhbmRsZXJgLlxuXG5GaW5hbGx5LCBhbnkgb3RoZXIgY29uZmlncz8gYENPTkZJR19ORVRgIGlzIG9idmlvdXNseSBhIHByZXJlcXVpc2l0ZSwgYnV0IHRoYXQncyBhIGdpdmVuLiBPa2F5LCBJJ20gY29uZmlkZW50IGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM3OSwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzoxMy43OTM1NjAyMTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTU1OTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTExDMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19hY2NlcHRfaW5jb21pbmdfc29ja1wiLFxuICAgIFwibGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5cIixcbiAgICBcImxsY19jb25uX2hhbmRsZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgYW5kIHdvcmtxdWV1ZSBmb3IgaGFuZGxpbmcgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHRvIGZpeCByYWNlIGNvbmRpdGlvbnMgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHRoZSBjb3JlIExMQyBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUEZfTExDIHNvY2tldHMgYW5kIG5ldHdvcmsgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMTEMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja1wiLFxuICAgIFwibGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlblwiLFxuICAgIFwibGxjX2Nvbm5faGFuZGxlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgTExDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cyBhbmQgbmV0d29yayB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzoxMy44NzUxMjU4MTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzU0NDE2MDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjMzOjEzLjg3NTYyODI5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTc1NDM2NTQ0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBpbiB0aGUgTExDIHByb3RvY29sIGJ5IGludHJvZHVjaW5nIHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBgaW5jb21pbmdfd29ya2ApIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGlzdGVuZXIgc29ja2V0IHRlYXJkb3duLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIGZ1bmN0aW9uIHRvIHNlbmQgYSBETSByZXNwb25zZSAoYGxsY19jb25uX3NlbmRfZG1fcnNwYCksIHdoaWNoIGFsbG9jYXRlcyBhIG5ldyBza2IgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGl0cyBieXRlcyAoTExDIGhlYWRlciBhbmQgTUFDIGhlYWRlcikgYmVmb3JlIHRyYW5zbWlzc2lvbiwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkIHRvIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTAzMjlkNTNhY2M3MDU2YmU2MzQwN2ZkY2UyYjg0ZWZmNDc2MTNjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA5OjEzOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaCBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcbmluZGV4IGUxYTMwMjY5NjcyMzQuLmU4MDAzZGIxMTBhZDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG4rKysgYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5AQCAtNiw2ICs2LDcgQEBcbiAgKiBcdFx0IDIwMDEsIDIwMDIgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIFx1MDAzY2FjbWVAY29uZWN0aXZhLmNvbS5iclx1MDAzZVxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfaWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGMuaFx1MDAzZVxuQEAgLTEzLDYgKzE0LDEwIEBAXG4gI2RlZmluZSBMTENfRVZFTlQgICAgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDJcbiBcbisjZGVmaW5lIExMQ19JTkNPTUlOR19OT05FICAgICAgICAwXG4rI2RlZmluZSBMTENfSU5DT01JTkdfUEVORElORyAgICAgMVxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX1FVRVVFRCAgICAgIDJcbitcbiAjZGVmaW5lIExMQzJfUF9USU1FICAgICAgICAgICAgICAgMlxuICNkZWZpbmUgTExDMl9BQ0tfVElNRSAgICAgICAgICAgICAxXG4gI2RlZmluZSBMTEMyX1JFSl9USU1FICAgICAgICAgICAgIDNcbkBAIC03Miw2ICs3Nyw5IEBAIHN0cnVjdCBsbGNfc29jayB7XG4gXHRcdFx0XHRcdCAgICAgIHJlY2VpdmVkIGFuZCBjYXVzZWQgc2VuZGluZyBGUk1SLlxuIFx0XHRcdFx0XHQgICAgICBVc2VkIGZvciByZXNlbmRpbmcgRlJNUiAqL1xuIFx0dTMyXHRcdCAgICBjbXNnX2ZsYWdzO1xuK1x0YXRvbWljX3RcdCAgICBpbmNvbWluZ19zdGF0ZTtcbitcdHN0cnVjdCBzb2NrXHQgICAgKmluY29taW5nX2xpc3RlbmVyO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IGluY29taW5nX3dvcms7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7XG4gfTtcbiBcbkBAIC05Myw3ICsxMDEsMTAgQEAgc3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXG4gc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LFxuIFx0XHRcdCAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2Vybik7XG4gdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7XG4rdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7XG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4rYm9vbCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzayk7XG4gXG4gdm9pZCBsbGNfc2tfcmVzZXQoc3RydWN0IHNvY2sgKnNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuY1xuaW5kZXggYjA0NDdjMzNkYmYwOS4uZTgwNTQ4MDljZjBjZiAxMDA2NDRcbi0tLSBhL25ldC9sbGMvYWZfbGxjLmNcbisrKyBiL25ldC9sbGMvYWZfbGxjLmNcbkBAIC0yNyw2ICsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19zYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfcGR1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2Nvbm4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9sbGNfY19zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFx1MDAzZVxuIFxuIC8qIHJlbWVtYmVyOiB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIGlzIHplcm9lZCBiZWNhdXNlIGl0cyBpbiAuYnNzICovXG5AQCAtMTk2LDYgKzE5Nyw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGM7XG4rXHRib29sIGxpc3RlbmVyO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrID09IE5VTEwpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0yMDYsNiArMjA4LDkgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHRsbGMtXHUwMDNlbGFkZHIubHNhcCwgbGxjLVx1MDAzZWRhZGRyLmxzYXApO1xuIFx0aWYgKCFsbGNfc2VuZF9kaXNjKHNrKSlcbiBcdFx0bGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay1cdTAwM2Vza19yY3Z0aW1lbykpO1xuK1x0bGlzdGVuZXIgPSBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOO1xuK1x0aWYgKGxpc3RlbmVyKVxuK1x0XHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuIFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkge1xuIFx0XHRzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLVx1MDAzZXNhcDtcbiBcbkBAIC0yMTQsMTYgKzIxOSwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHRcdCAqL1xuIFx0XHRsbGNfc2FwX2hvbGQoc2FwKTtcbiBcdFx0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cdTAwM2VzYXAsIHNrKTtcbitcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRsbGNfc2FwX3B1dChzYXApO1xuIFx0fSBlbHNlIHtcbitcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0fVxuIFx0bmV0ZGV2X3B1dChsbGMtXHUwMDNlZGV2LCBcdTAwMjZsbGMtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFx0c29ja19wdXQoc2spO1xuIFx0c29ja19vcnBoYW4oc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRsbGNfc2tfZnJlZShzayk7XG4rXHRsbGNfc2tfZnJlZShzaywgdHJ1ZSk7XG4gb3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcyMiw2ICs3MjksMTcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdGdvdG8gZnJlZXM7XG4gXHRyYyA9IDA7XG4gXHRuZXdzayA9IHNrYi1cdTAwM2VzaztcbitcdGxvY2tfc29ja19uZXN0ZWQobmV3c2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcdGlmIChsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0gfHxcbitcdCAgICAhbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKSkge1xuK1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRyZWxlYXNlX3NvY2sobmV3c2spO1xuK1x0XHRzb2NrX3B1dChuZXdzayk7XG4rXHRcdHJjID0gLUVDT05OQUJPUlRFRDtcbitcdFx0Z290byBmcmVlcztcbitcdH1cbiBcdC8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi9cbiBcdGxsY191aV9za19pbml0KG5ld3NvY2ssIG5ld3NrKTtcbiBcdHNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpO1xuQEAgLTczNyw2ICs3NTUsOCBAQCBzdGF0aWMgaW50IGxsY191aV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdHNrX2FjY2VwdHFfcmVtb3ZlZChzayk7XG4gXHRkcHJpbnRrKFwiJXM6IG9rIHN1Y2Nlc3Mgb24gJTAyWCwgY2xpZW50IG9uICUwMlhcXG5cIiwgX19mdW5jX18sXG4gXHRcdGxsY19zayhzayktXHUwMDNlYWRkci5zbGxjX3NhcCwgbmV3bGxjLVx1MDAzZWRhZGRyLmxzYXApO1xuK1x0cmVsZWFzZV9zb2NrKG5ld3NrKTtcbitcdHNvY2tfcHV0KG5ld3NrKTtcbiBmcmVlczpcbiBcdGtmcmVlX3NrYihza2IpO1xuIG91dDpcbmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmNcbmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjRhMzRmMjQwYWQyY2MgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2xsY19jb25uLmNcbisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xuQEAgLTMyLDYgKzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpldik7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gXG4gLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqL1xuIHN0YXRpYyBpbnQgbGxjX29mZnNldF90YWJsZVtOQlJfQ09OTl9TVEFURVNdW05CUl9DT05OX0VWXTtcbkBAIC04OCw2ICs4OSwxMyBAQCBpbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIHNrYi1cdTAwM2VzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpblxuIFx0XHQgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZVxuIFx0XHQgKi9cbitcdFx0aWYgKHNrICE9IHNrYi1cdTAwM2VzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRzb2NrX2hvbGQoc2tiLVx1MDAzZXNrKTtcbitcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlLFxuK1x0XHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7XG4rXHRcdH1cbiBcdFx0c2tiX2dldChza2IpO1xuIFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpO1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuQEAgLTM1NCw3ICszNjIsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFx0aW50IHJjID0gMTtcbiBcbi1cdGlmIChsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcbitcdGlmIChsbGMtXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSB8fFxuK1x0ICAgIGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxuIFx0XHRnb3RvIG91dDtcbiBcdHJjID0gMDtcbiBcdHRyYW5zID0gbGxjX3F1YWxpZnlfY29ubl9ldihzaywgc2tiKTtcbkBAIC03NjUsMjcgKzc3NCwxNjIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0bWVtY3B5KFx1MDAyNm5ld2xsYy1cdTAwM2VsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtXHUwMDNlbGFkZHIpKTtcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlZGFkZHIsIHNhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWRhZGRyKSk7XG4gXHRuZXdsbGMtXHUwMDNlZGV2ID0gZGV2O1xuK1x0bmV3bGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyID0gc2s7XG4rXHRhdG9taWNfc2V0KFx1MDAyNm5ld2xsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1BFTkRJTkcpO1xuK1x0SU5JVF9XT1JLKFx1MDAyNm5ld2xsYy1cdTAwM2VpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTtcbitcdHNvY2tfaG9sZChzayk7XG4gXHRkZXZfaG9sZChkZXYpO1xuIFx0bGxjX3NhcF9hZGRfc29ja2V0KGxsYy1cdTAwM2VzYXAsIG5ld3NrKTtcbiBvdXQ6XG4gXHRyZXR1cm4gbmV3c2s7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsbGNfc29jayxcbitcdFx0XHRcdFx0XHQgICAgaW5jb21pbmdfd29yayk7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZsbGMtXHUwMDNlc2s7XG4rXHRzdHJ1Y3Qgc29jayAqbGlzdGVuZXIgPSBsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XG4rXG4rXHRsb2NrX3NvY2sobGlzdGVuZXIpO1xuK1x0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0bGxjX3NrX2ZyZWUoc2ssIGZhbHNlKTtcbitcdHNvY2tfb3JwaGFuKHNrKTtcbitcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcbitcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4rXHRkZXZfcHV0KGxsYy1cdTAwM2VkZXYpO1xuK1x0bGxjLVx1MDAzZWRldiA9IE5VTEw7XG4rXHRzb2NrX3B1dChzayk7XG4rXHRzb2NrX3B1dChsaXN0ZW5lcik7XG4rfVxuK1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuK1xuK1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpID09XG4rXHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4rXHRcdHJldHVybjtcbitcbitcdFdSSVRFX09OQ0UobGxjLVx1MDAzZXN0YXRlLCBMTENfQ09OTl9PVVRfT0ZfU1ZDKTtcbitcdHNvY2tfaG9sZChzayk7XG4rXHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVx1MDAzZXNhcCwgc2spO1xuK1x0c2NoZWR1bGVfd29yayhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfd29yayk7XG4rfVxuK1xuK2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4rXG4rXHRpZiAoYXRvbWljX2NtcHhjaGcoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfUVVFVUVELFxuK1x0XHRcdFx0ICBMTENfSU5DT01JTkdfTk9ORSkgIT0gTExDX0lOQ09NSU5HX1FVRVVFRClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c29ja19wdXQobGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkpIHtcbitcdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuK1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2IG5ld3NrICE9IHNrKSB7XG4rXHRcdFx0aW50IGluY29taW5nX3N0YXRlO1xuK1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdGluY29taW5nX3N0YXRlID1cbitcdFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpO1xuK1x0XHRcdGlmIChpbmNvbWluZ19zdGF0ZSAhPSBMTENfSU5DT01JTkdfTk9ORSkge1xuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0XHRpZiAoaW5jb21pbmdfc3RhdGUgPT0gTExDX0lOQ09NSU5HX1FVRVVFRClcbitcdFx0XHRcdFx0c29ja19wdXQobmV3c2spO1xuK1x0XHRcdH1cbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdH1cbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHR9XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rLypcbisgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlclxuKyAqIGFkZHJlc3MgaW4gbGxjLVx1MDAzZWRhZGRyIHlldC5cbisgKi9cbitzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0IHN0cnVjdCBsbGNfYWRkciAqc2FkZHIsIHU4IGZfYml0KVxuK3tcbitcdHN0cnVjdCBza19idWZmICpuc2tiO1xuK1x0aW50IHJjO1xuK1xuK1x0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG4rXHRpZiAoIW5za2IpXG4rXHRcdHJldHVybjtcbitcbitcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxuK1x0XHRcdCAgICBzYWRkci1cdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XG4rXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbitcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBzYWRkci1cdTAwM2VtYWMpO1xuK1x0aWYgKHVubGlrZWx5KHJjKSlcbitcdFx0a2ZyZWVfc2tiKG5za2IpO1xuK1x0ZWxzZVxuK1x0XHRkZXZfcXVldWVfeG1pdChuc2tiKTtcbit9XG4rXG4gdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGxsY19hZGRyIHNhZGRyLCBkYWRkcjtcbi1cdHN0cnVjdCBzb2NrICpzaztcbitcdHN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDtcbitcdGJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuK1x0Ym9vbCBuZXdza19sb2NrZWQgPSBmYWxzZTtcbiBcbiBcdGxsY19wZHVfZGVjb2RlX3NhKHNrYiwgc2FkZHIubWFjKTtcbiBcdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcdTAwMjZzYWRkci5sc2FwKTtcbiBcdGxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTtcbiBcdGxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCBcdTAwMjZkYWRkci5sc2FwKTtcbiBcbitsb29rdXA6XG4gXHRzayA9IF9fbGxjX2xvb2t1cChzYXAsIFx1MDAyNnNhZGRyLCBcdTAwMjZkYWRkciwgZGV2X25ldChza2ItXHUwMDNlZGV2KSk7XG4gXHRpZiAoIXNrKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRuZXdzayA9IHNrO1xuK1x0XHRiaF9sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdHNvY2tfcHV0KG5ld3NrKTtcbitcdFx0XHRuZXdzayA9IE5VTEw7XG4rXHRcdFx0Z290byBsb29rdXA7XG4rXHRcdH1cbitcdFx0c2sgPSBsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuK1x0XHRzb2NrX2hvbGQoc2spO1xuK1x0XHRuZXdza19sb29rdXBfcmVmID0gdHJ1ZTtcbitcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0fVxuK1xuIFx0YmhfbG9ja19zb2NrKHNrKTtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXG4rXHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRpZiAobmV3c2tfbG9va3VwX3JlZikge1xuK1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRnb3RvIHJldHJ5X3VubG9jaztcbitcdFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcbitcdFx0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHtcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHR9XG4rXHR9XG4gXHQvKlxuIFx0ICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC1cdTAwM2VhY2NlcHRcbiBcdCAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOlxuQEAgLTc5NSwxMCArOTM5LDI1IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0ICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZVxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikpIHtcbi1cdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2c2FkZHIsIFx1MDAyNmRhZGRyKTtcbi1cdFx0aWYgKCFuZXdzaylcbi1cdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRpZiAoIW5ld3NrKSB7XG4rXHRcdFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4rXHRcdFx0XHRpZiAoIWxsY19jb25uX2V2X3J4X2Rpc2NfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHtcbitcdFx0XHRcdFx0dTggZl9iaXQ7XG4rXG4rXHRcdFx0XHRcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFx1MDAyNmZfYml0KTtcbitcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCBmX2JpdCk7XG4rXHRcdFx0XHR9IGVsc2UgaWYgKCFsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0XzEoc2ssIHNrYikpIHtcbitcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCAxKTtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdFx0fVxuK1x0XHRcdG5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LCBcdTAwMjZzYWRkcixcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZkYWRkcik7XG4rXHRcdFx0aWYgKCFuZXdzaylcbitcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcbitcdFx0fVxuIFx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuQEAgLTgxMywxOCArOTcyLDQ5IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlc2sgPSBzaztcbiBcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX2VmcmVlO1xuIFx0fVxuLVx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxuK1x0aWYgKHVubGlrZWx5KGxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pKSB7XG4rXHRcdGlmIChuZXdzaykge1xuK1x0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHR9IGVsc2UgaWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTtcbitcdFx0fVxuK1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0fVxuK1x0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7XG4gXHRcdGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdGVsc2Uge1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHR9IGVsc2Uge1xuIFx0XHRkcHJpbnRrKFwiJXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0bGxjX3NldF9iYWNrbG9nX3R5cGUoc2tiLCBMTENfUEFDS0VUKTtcbi1cdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSlcbitcdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSkge1xuK1x0XHRcdGlmIChuZXdzaylcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuIFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdH1cbiBcdH1cbiBvdXQ6XG4rXHRpZiAobmV3c2tfbG9ja2VkKVxuK1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4gXHRiaF91bmxvY2tfc29jayhzayk7XG4gXHRzb2NrX3B1dChzayk7XG4rXHRpZiAobmV3c2tfbG9va3VwX3JlZilcbitcdFx0c29ja19wdXQobmV3c2spO1xuIFx0cmV0dXJuO1xuK3JldHJ5X3VubG9jazpcbitcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdG5ld3NrX2xvY2tlZCA9IGZhbHNlO1xuK1x0YmhfdW5sb2NrX3NvY2soc2spO1xuK1x0c29ja19wdXQoc2spO1xuK1x0c29ja19wdXQobmV3c2spO1xuK1x0bmV3c2sgPSBOVUxMO1xuK1x0bmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuK1x0Z290byBsb29rdXA7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuO1xuQEAgLTg1MiwxMiArMTA0Miw1MiBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cdTAwM2VzaztcbiBcbiBcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XG4tXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgLyogbm90IGNsb3NlZCAqL1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHxcbitcdFx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuK1x0XHRcdCAgICBsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pIHtcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdFx0fVxuIFx0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuLVx0XHRlbHNlXG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHR9IGVsc2UgaWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCkge1xuK1x0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0XHR9XG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHR9IGVsc2UgaWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSB7XG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHR9XG4gXHR9IGVsc2UgaWYgKGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfRVZFTlQpIHtcbiBcdFx0LyogdGltZXIgZXhwaXJhdGlvbiBldmVudCAqL1xuIFx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXG5AQCAtODcwLDYgKzExMDAsMjMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIG91dDpcbiBcdHJldHVybiByYztcbityZXRyeTpcbitcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbitcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNlPSBMTENfQ09OTl9TVEFURV9BRE0pXG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7XG4rXHRcdGVsc2Uge1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdH1cbitcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRnb3RvIG91dF9rZnJlZV9za2I7XG4gb3V0X2tmcmVlX3NrYjpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0Z290byBvdXQ7XG5AQCAtOTYwLDE2ICsxMjA3LDE3IEBAIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcbiAvKipcbiAgKlx0bGxjX3NrX2ZyZWUgLSBGcmVlcyBhIExMQyBzb2NrZXRcbiAgKlx0QHNrOiAtIHNvY2tldCB0byBmcmVlXG4rICpcdEBzeW5jOiB3aGV0aGVyIHRvIHN5bmNocm9ub3VzbHkgc3RvcCB0aW1lcnNcbiAgKlxuICAqXHRGcmVlcyBhIExMQyBzb2NrZXRcbiAgKi9cbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaylcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxuIHtcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcbiBcdGxsYy1cdTAwM2VzdGF0ZSA9IExMQ19DT05OX09VVF9PRl9TVkM7XG4gXHQvKiBTdG9wIGFsbCAocG9zc2libHkpIHJ1bm5pbmcgdGltZXJzICovXG4tXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcbitcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xuICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQ1xuIFx0cHJpbnRrKEtFUk5fSU5GTyBcIiVzOiB1bmFja3E9JWQsIHR4cT0lZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0c2tiX3F1ZXVlX2xlbihcdTAwMjZsbGMtXHUwMDNlcGR1X3VuYWNrX3EpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzM6MTMuODc1NjMxODMyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNjc4OTE5OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50IGZvciBMTEMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIHBhdGNoIHNlcmllcyB0b3VjaGluZyBgbmV0L2xsYy9hZl9sbGMuY2AsIGBuZXQvbGxjL2xsY19jb25uLmNgLCBhbmQgYGluY2x1ZGUvbmV0L2xsY19jb25uLmhgLCBhbmQgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHByaW1hcnkgZm9jdXMgc2VlbXMgdG8gYmUgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmV0aW1lIGFuZCBjb25jdXJyZW50IGFjY2VzcyBkdXJpbmcgTExDIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgcG9pbnRpbmcgdG93YXJkcyBwb3RlbnRpYWwgVUFGIG9yIHJhY2UgY29uZGl0aW9uIGZpeGVzIOKAkyBhIGRlZmluaXRlIHBvaW50IG9mIGludGVyZXN0LlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSB0cmFja2luZyBmb3IgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHZpYSBgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBhbmQgYGluY29taW5nX3dvcmtgLiAgT2theSwgc28gd2UgaGF2ZSB0aGVzZSBuZXcgc3RhdGUgdmFyaWFibGVzIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9uczogYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYW5kIHRoZSB3b3JrIGZ1bmN0aW9uIGBsbGNfaW5jb21pbmdfc29ja193b3JrYC4gQWxzbyBhZmZlY3RlZCBhcmUgYGxsY191aV9yZWxlYXNlYCwgYGxsY191aV9hY2NlcHRgLCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AsIGBsbGNfY29ubl9zZXJ2aWNlYCwgYGxsY19jb25uX2hhbmRsZXJgLCBhbmQgYGxsY19iYWNrbG9nX3JjdmAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBzZXQgb2YgY2hhbmdlcywgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgbmVjZXNzYXJ5LlxuXG5GaXJzdCwgdGhlIGNydWNpYWwgcXVlc3Rpb246IGFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgbW9kaWZpZWQgb3IgaW50cm9kdWNlZCB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGNvbmNlbnRyYXRlZCBpbnRlcm5hbGx5LCBmb2N1c2VkIG9uIHNvY2tldCBzdGF0ZSB0cmFja2luZyBhbmQgbG9ja2luZywgd2hpY2ggaXMgZ29vZC4gVGhhdCByZWR1Y2VzIHNvbWUgaW5pdGlhbCByaXNrLlxuXG5OZXh0LCBjb25kaXRpb25hbCBsb2dpYyBhbmQgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gIFRoZSBuZXcgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBpbiBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYDogYGluY29taW5nX2xpc3RlbmVyYCBpcyBhc3NpZ25lZCwgYGluY29taW5nX3N0YXRlYCBpcyBzZXQgdG8gYExMQ19JTkNPTUlOR19QRU5ESU5HYCwgYW5kIGBpbmNvbWluZ193b3JrYCBpcyBpbml0aWFsaXplZC4gTG9va3Mgc29saWQgb24gdGhhdCBmcm9udC5cblxuVGhlbiwgZG8gd2UgaGF2ZSBhbnkgbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0ICpjb3VsZCogZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzPyAgVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBzb2NrZXQgbGlmZWN5Y2xlLCBsb2NraW5nLCBhbmQgcHJldmVudGluZyBVQUYvZG91YmxlLWZyZWUgaXNzdWVzLiBJdCBzZWVtcyB0byBiZSBzYWZlIGZyb20gdGhpcyBwZXJzcGVjdGl2ZS5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGFzIGEgc2FuaXR5IGNoZWNrLCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhbnl0aGluZyBzdWJ0bGUuIEl0IGFsbG9jYXRlcyBhIG5ldyBgc2tiYCwgcG9wdWxhdGVzIGl0IHdpdGggaGVhZGVycywgYW5kIHRyYW5zbWl0cyBpdC4gYGxsY19hbGxvY19mcmFtZWAsIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLCBhbmQgYGxsY19tYWNfaGRyX2luaXRgIGFsbCBoYW5kbGUgd3JpdGluZyB0byB0aGUgYHNrYmAuIFdoaWxlIHRoZSBjb2RlIHBhdGggKmxvb2tzKiBjbGVhbiwgaXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gcGVyZm9ybSBhIGRlZXBlciBkaXZlIGludG8gYGxsY19hbGxvY19mcmFtZWAgYW5kIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgdXNpbmcgdG9vbHMgdG8gZW5zdXJlIHRoZXJlJ3Mgbm8gc3VidGxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaW4gdGhlcmUuIExldCdzIGRvIHRoYXQgYmVmb3JlIGRlY2lkaW5nIHRvIHNraXAgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzoyNi41NTQ1NTQ5MTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjk4NDA0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2FsbG9jX2ZyYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsY19zYXAuaD0xNz12b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oLTE4LVxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgcHJpbSk7XFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oOjE5OnN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0yMC1cXHRcXHRcXHRcXHR1OCB0eXBlLCB1MzIgZGF0YV9zaXplKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMTk1LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6MTk2OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0xOTctXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMjAtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzoyMjE6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTIyMi1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTI0Ni1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI0NzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjQ4LVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTI2Nz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9mcm1yX3JzcF9mX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNzktXFx0XFx0Zl9iaXQgPSAwO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzoyODA6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yODEtXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMwMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMwNC1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjMwNTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMDYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMyOD1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMzNS1cXHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcXHUwMDI2Zl9iaXQpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzozMzY6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMzctXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTQyMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2lfeHh4X3hfc2V0XzBfb3Jfc2VuZF9ycihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDI3LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDI4OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00MjktXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDU5PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDYyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDYzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00NjQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDgzPWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDg2LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDg3OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00ODgtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTA3PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTEwLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTExOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MTItXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTMxPWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTM0LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTM1OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MzYtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTU1PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTU4LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTU5OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjAtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTc5PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTgyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTgzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01ODQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NjE1PWludCBsbGNfY29ubl9hY19vcHRfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTYxOC1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjYxOTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNjIwLVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTYzOT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjQyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NjQzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NjYzPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NjYtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Njc6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTY2OC1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02ODg9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy02OTEtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2OTI6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTY5My1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03MTI9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTcxNS1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjcxNjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzE3LVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTczNj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTczOS1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjc0MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzQxLVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTc3MD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9zYWJtZV9jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNzczLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6Nzc0OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy03NzUtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9Nzk4PWludCBsbGNfY29ubl9hY19zZW5kX3VhX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy04MDItXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo4MDM6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTgwNC1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05NTk9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtOTYzLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6OTY0OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy05NjUtXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9ODYzPXN0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtODY4LVxcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4Njk6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzAtXFx0aWYgKCFuc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTEwNT1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF94aWRfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTExMy1cXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXFx1MDAyNmRzYXApO1xcbm5ldC9sbGMvbGxjX3NfYWMuYzoxMTQ6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXFxubmV0L2xsYy9sbGNfc19hYy5jLTExNS1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTtcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmMtMTYzLVxcdGRhdGFfc2l6ZSA9IG50b2hzKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9wcm90bykgLSAzO1xcbm5ldC9sbGMvbGxjX3NfYWMuYzoxNjQ6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XFxubmV0L2xsYy9sbGNfc19hYy5jLTE2NS1cXHRpZiAoIW5za2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYz0yMj1zdGF0aWMgaW50IGxsY19tYWNfaGVhZGVyX2xlbih1bnNpZ25lZCBzaG9ydCBkZXZ0eXBlKVxcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtMzItLyoqXFxubmV0L2xsYy9sbGNfc2FwLmM6MzM6ICpcXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcXG5uZXQvbGxjL2xsY19zYXAuYy0zNC0gKlxcdEBzazogIHNvY2tldCB0byBhbGxvY2F0ZSBmcmFtZSB0b1xcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXFxubmV0L2xsYy9sbGNfc2FwLmM6NDI6c3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2xsYy9sbGNfc2FwLmMtNDMtXFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYz00Mj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfeGlkX3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy00NS1cXHRpbnQgcmMgPSAxO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo0NjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTQ3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY194aWRfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTY2PXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF90ZXN0X3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy03Ny1cXHRkYXRhX3NpemUgPSBudG9ocyhldGhfaGRyKHNrYiktXFx1MDAzZWhfcHJvdG8pIC0gMztcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6Nzg6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTc5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzoyOC42MjQ0MDAzNjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1NjMxODEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gTExDIEZyYW1lIEFsbG9jYXRpb24qKlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFraW5nIGludG8gdGhlIG5ldHdvcmsgdmlhIHRoZSBMTEMgcHJvdG9jb2wuIEkgbmVlZCB0byBtYWtlIHN1cmUgYGxsY19hbGxvY19mcmFtZWAgaW4gYG5ldC9sbGMvbGxjX3NhcC5jYCBpcyBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiBjb3JyZWN0bHksIHNwZWNpZmljYWxseSB0aGUgKmluaXRpYWxpemF0aW9uKiBvZiB0aGUgU29ja2V0IEJ1ZmZlciAoc2tiKS4gSSd2ZSBnb3QgdG8gY29uZmlybSBpZiBpdCdzIHplcm9pbmcgb3V0IHRoZSBhbGxvY2F0ZWQgYHNrYmAgYmVmb3JlIHVzZS4gSWYgaXQgKmRvZXNuJ3QqLCB3ZSdyZSBsb29raW5nIGF0IGEgY2xhc3NpYyBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHZ1bG5lcmFiaWxpdHksIGFsYmVpdCB3aXRoaW4gYSBmYWlybHkgbmljaGUgcHJvdG9jb2wgc3RhY2suIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJ3QgbWFraW5nIGl0cyB3YXkgb250byB0aGUgd2lyZS4gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjMzOjM1Ljc4MDcyMDU1M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNzM3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2FsbG9jX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sbGMvbGxjX3NhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvbGxjX3NhcC5jPTIyPXN0YXRpYyBpbnQgbGxjX21hY19oZWFkZXJfbGVuKHVuc2lnbmVkIHNob3J0IGRldnR5cGUpXFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYy0zMi0vKipcXG5uZXQvbGxjL2xsY19zYXAuYzozMzogKlxcdGxsY19hbGxvY19mcmFtZSAtIGFsbG9jYXRlcyBza19idWZmIGZvciBmcmFtZVxcbm5ldC9sbGMvbGxjX3NhcC5jLTM0LSAqXFx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYy00MS0gKi9cXG5uZXQvbGxjL2xsY19zYXAuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvbGxjL2xsY19zYXAuYy00My1cXHRcXHRcXHRcXHR1OCB0eXBlLCB1MzIgZGF0YV9zaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzozNS44MjcxMDA3MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NzgxMTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbGxjX3NhcC5jYCAtIExpbmUgNDIqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5ldC9sbGMvbGxjX3NhcC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSA0Mi4gSSdtIGd1ZXNzaW5nIHRoYXQgcGFydGljdWxhciBwb2ludCBpbiB0aGUgZmlsZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggdGhlIFNlcnZpY2UgQWNjZXNzIFBvaW50IChTQVApIGNvbmZpZ3VyYXRpb24gb3IgaGFuZGxpbmcuIEknbSBleHBlY3Rpbmcgc29tZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBtYXliZSByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIExMQyBTQVAgdGFibGUgb3IgcmVnaXN0ZXJpbmcgYSBuZXcgU0FQLiBJdCBjb3VsZCBhbHNvIGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBvciBmdW5jdGlvbiBjYWxsIHJlbGV2YW50IHRvIFNBUCBtYW5hZ2VtZW50LiBMaW5lIDQyLi4uIGhtbSwgbGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4gTXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgTExDIHByb3RvY29sIGFuZCBMaW51eCBuZXR3b3JraW5nIHN0YWNrIHNob3VsZCBoZWxwIG1lIGNvbnRleHR1YWxpemUgaXQgcmFwaWRseS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUncyBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzM6NDAuOTA0OTE0NjUyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9sbGMvbGxjX3NhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMzOlxcdCAqXFx0bGxjX2FsbG9jX2ZyYW1lIC0gYWxsb2NhdGVzIHNrX2J1ZmYgZm9yIGZyYW1lXFxuICAzNDpcXHQgKlxcdEBzazogIHNvY2tldCB0byBhbGxvY2F0ZSBmcmFtZSB0b1xcbiAgMzU6XFx0ICpcXHRAZGV2OiBuZXR3b3JrIGRldmljZSB0aGlzIHNrYiB3aWxsIGJlIHNlbnQgb3ZlclxcbiAgMzY6XFx0ICpcXHRAdHlwZTogcGR1IHR5cGUgdG8gYWxsb2NhdGVcXG4gIDM3OlxcdCAqXFx0QGRhdGFfc2l6ZTogZGF0YSBzaXplIHRvIGFsbG9jYXRlXFxuICAzODpcXHQgKlxcbiAgMzk6XFx0ICpcXHRBbGxvY2F0ZXMgYW4gc2tfYnVmZiBmb3IgZnJhbWUgYW5kIGluaXRpYWxpemVzIHNrX2J1ZmYgZmllbGRzLlxcbiAgNDA6XFx0ICpcXHRSZXR1cm5zIGFsbG9jYXRlZCBza2Igb3IgJU5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LlxcbiAgNDE6XFx0ICovXFxuICA0MjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gIDQzOlxcdFxcdFxcdFxcdFxcdHU4IHR5cGUsIHUzMiBkYXRhX3NpemUpXFxuICA0NDpcXHR7XFxuICA0NTpcXHRcXHRpbnQgaGxlbiA9IHR5cGUgPT0gTExDX1BEVV9UWVBFX1UgPyAzIDogNDtcXG4gIDQ2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdGhsZW4gKz0gbGxjX21hY19oZWFkZXJfbGVuKGRldi1cXHUwMDNldHlwZSk7XFxuICA0OTpcXHRcXHRza2IgPSBhbGxvY19za2IoaGxlbiArIGRhdGFfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdGlmIChza2IpIHtcXG4gIDUyOlxcdFxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuICA1MzpcXHRcXHRcXHRza2JfcmVzZXJ2ZShza2IsIGhsZW4pO1xcbiAgNTQ6XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuICA1NTpcXHRcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAgNTY6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTtcXG4gIDU3OlxcdFxcdFxcdHNrYi1cXHUwMDNlZGV2ICAgICAgPSBkZXY7XFxuICA1ODpcXHRcXHRcXHRpZiAoc2sgIT0gTlVMTClcXG4gIDU5OlxcdFxcdFxcdFxcdHNrYl9zZXRfb3duZXJfdyhza2IsIHNrKTtcXG4gIDYwOlxcdFxcdH1cXG4gIDYxOlxcdFxcdHJldHVybiBza2I7XFxuICA2MjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjMzOjQwLjkwNDk4NTYyM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDEwNzg3MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIExMQyBGcmFtZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gaGVyZSdzIHdoYXQncyBnb2luZyBvbiBpbiB0aGlzIGBsbGNfYWxsb2NfZnJhbWVgIGZ1bmN0aW9uLCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBJdCB1c2VzIGBhbGxvY19za2JgLCB3aGljaCBJIGtub3csIGRvZXNuJ3QgemVybyBvdXQgdGhlIGRhdGEgYnVmZmVyLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBhcyB3ZSdyZSBwcm9iYWJseSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWV0aGluZyBhYm91dCB0aGF0LCBkZXBlbmRpbmcgb24gdGhlIHVzYWdlLlxuXG5Ob3csIHNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBhbmQgaXQgY2FsbHMgYGxsY19hbGxvY19mcmFtZWAgd2l0aCBgZGF0YV9zaXplYCBhcyAwLCB3aGljaCBzdWdnZXN0cyBpdCBleHBlY3RzIGFuIGVtcHR5IGRhdGEgYnVmZmVyIGluIHRoZSBTS0IuIFRoZSBoZWFkZXIgc2l6ZSBpcyBjb21wdXRlZCB0byBiZSAzIGJ5dGVzIChJIGFzc3VtZSBmb3IgdGhlIExMQyBoZWFkZXIgaXRzZWxmKSBwbHVzIGBtYWNfaGVhZGVyX2xlbmAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyB0aGUgTExDIGFuZCBNQUMgbGF5ZXJzLlxuXG5OZXh0LCB3ZSBhcmUgY2FsbGluZyBgbGxjX3BkdV9oZWFkZXJfaW5pdGAsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCwgYW5kIGBsbGNfbWFjX2hkcl9pbml0YC4gU2luY2UgYGRhdGFfc2l6ZWAgaXMgemVybywgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZXhhbWluZWQgY2FyZWZ1bGx5LiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhlIGhlYWRlcnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCB0aGF0IG5vdGhpbmcgaXMgYmVpbmcgaW5hZHZlcnRlbnRseSB3cml0dGVuICppbnRvKiB0aGUgZGF0YSBidWZmZXIuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBsbGNfcGR1X2hlYWRlcl9pbml0YCBhbmQgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLiBUaGV5J3JlIHRoZSBjcml0aWNhbCBwb2ludHMgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhleSBkbywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgZW1wdHkgZGF0YSBidWZmZXIuIEFyZSB0aGV5IGluaXRpYWxpemluZyBoZWFkZXJzICpiZWZvcmUqIHRoZSBkYXRhIGJ1ZmZlcj8gQXJlIHRoZXkgd3JpdGluZyB0byB0aGUgcmlnaHQgb2Zmc2V0IGluIHRoZSBTS0I/IE9yIGFyZSB3ZSBnb2luZyB0byBzZWUgc29tZSBnYXJiYWdlIGRhdGE/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlIGRlZXBseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzo0Ni4zMTU3NzkxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3ODA4NTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfcGR1X2hlYWRlcl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsY19wZHUuaD0yMTI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV91biAqbGxjX3BkdV91bl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0yMTctLyoqXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjIxODogKlxcdGxsY19wZHVfaGVhZGVyX2luaXQgLSBpbml0aWFsaXplcyBwZHUgaGVhZGVyXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIxOS0gKlxcdEBza2I6IGlucHV0IHNrYiB0aGF0IGhlYWRlciBtdXN0IGJlIHNldCBpbnRvIGl0Llxcbi0tXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIyNi0gKi9cXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg6MjI3OnN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2hlYWRlcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIyOC1cXHRcXHRcXHRcXHQgICAgICAgdTggc3NhcCwgdTggZHNhcCwgdTggY3IpXFxuLS1cXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg9MzcwPXN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2luaXRfYXNfeGlkX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTM4My1cXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg6Mzg0OlxcdC8qIG5vIG5lZWQgdG8gcHVzaC9wdXQgc2luY2UgbGxjX3BkdV9oZWFkZXJfaW5pdCgpIGhhcyBhbHJlYWR5XFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTM4NS1cXHQgKiBwdXNoZWQgMyArIDMgYnl0ZXNcXG4tLVxcbm5ldC84MDIvZ2FycC5jPTI1MD1zdGF0aWMgdm9pZCBnYXJwX3BkdV9xdWV1ZShzdHJ1Y3QgZ2FycF9hcHBsaWNhbnQgKmFwcClcXG4tLVxcbm5ldC84MDIvZ2FycC5jLTI1Ny1cXG5uZXQvODAyL2dhcnAuYzoyNTg6XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChhcHAtXFx1MDAzZXBkdSwgTExDX1BEVV9UWVBFX1UsIExMQ19TQVBfQlNQQU4sXFxubmV0LzgwMi9nYXJwLmMtMjU5LVxcdFxcdFxcdCAgICBMTENfU0FQX0JTUEFOLCBMTENfUERVX0NNRCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmM9MzU9c3RhdGljIHZvaWQgYnJfc2VuZF9icGR1KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMtNTAtXFxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jOjUxOlxcdGxsY19wZHVfaGVhZGVyX2luaXQoc2tiLCBMTENfUERVX1RZUEVfVSwgTExDX1NBUF9CU1BBTixcXG5uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMtNTItXFx0XFx0XFx0ICAgIExMQ19TQVBfQlNQQU4sIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMjAwLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzoyMDE6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMDItXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTIxNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMjI3LVxcdFxcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFxcdTAwMjZmX2JpdCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjIyODpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTIyOS1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjQzPWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNTEtXFxubmV0L2xsYy9sbGNfY19hYy5jOjI1MjpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTI1My1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjY3PWludCBsbGNfY29ubl9hY19zZW5kX2ZybXJfcnNwX2Zfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTI4NC1cXG5uZXQvbGxjL2xsY19jX2FjLmM6Mjg1OlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjg2LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0zMDE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9mcm1yX3JzcF9mX3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMTEtXFxubmV0L2xsYy9sbGNfY19hYy5jOjMxMjpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTMxMy1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MzI4PWludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMzQxLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzozNDI6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNDMtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTM1OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9pX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNjMtXFxubmV0L2xsYy9sbGNfY19hYy5jOjM2NDpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX0ksIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtMzY1LVxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0zNzY9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX2lfY21kX3Bfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTM4MS1cXG5uZXQvbGxjL2xsY19jX2FjLmM6MzgyOlxcdGxsY19wZHVfaGVhZGVyX2luaXQoc2tiLCBMTENfUERVX1RZUEVfSSwgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zODMtXFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTM5ND1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9pX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zOTktXFxubmV0L2xsYy9sbGNfY19hYy5jOjQwMDpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX0ksIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNDAxLVxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz00MjE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9pX3h4eF94X3NldF8wX29yX3NlbmRfcnIoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTQzMi1cXG5uZXQvbGxjL2xsY19jX2FjLmM6NDMzOlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNDM0LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy00NjctXFxubmV0L2xsYy9sbGNfY19hYy5jOjQ2ODpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTQ2OS1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDgzPWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDkxLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo0OTI6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy00OTMtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTUwNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTUxNS1cXG5uZXQvbGxjL2xsY19jX2FjLmM6NTE2OlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNTE3LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy01MzktXFxubmV0L2xsYy9sbGNfY19hYy5jOjU0MDpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTU0MS1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTU1PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTYzLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo1NjQ6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjUtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTU3OT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTU4Ny1cXG5uZXQvbGxjL2xsY19jX2FjLmM6NTg4OlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNTg5LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjIzLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo2MjQ6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy02MjUtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTYzOT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjQ3LVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo2NDg6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDktXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTY2Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjcyLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo2NzM6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NzQtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTY4OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTY5Ni1cXG5uZXQvbGxjL2xsY19jX2FjLmM6Njk3OlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNjk4LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03MTI9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTcyMC1cXG5uZXQvbGxjL2xsY19jX2FjLmM6NzIxOlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIyLVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03MzY9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy03NDQtXFxubmV0L2xsYy9sbGNfY19hYy5jOjc0NTpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTc0Ni1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NzcwPWludCBsbGNfY29ubl9hY19zZW5kX3NhYm1lX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy03ODEtXFx0XFx0XFx0ZG1hYyA9IGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcjtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NzgyOlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzgzLVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03OTg9aW50IGxsY19jb25uX2FjX3NlbmRfdWFfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTgwOS1cXHRcXHRuc2tiLVxcdTAwM2VkZXYgPSBsbGMtXFx1MDAzZWRldjtcXG5uZXQvbGxjL2xsY19jX2FjLmM6ODEwOlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtODExLVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05MDQ9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX2lfcnNwX2Zfc2V0X2Fja3BmKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy05MTAtXFxubmV0L2xsYy9sbGNfY19hYy5jOjkxMTpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX0ksIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtOTEyLVxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05NTk9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtOTY4LVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo5Njk6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy05NzAtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTg3Mi1cXG5uZXQvbGxjL2xsY19jb25uLmM6ODczOlxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jb25uLmMtODc0LVxcdFxcdFxcdCAgICBzYWRkci1cXHUwMDNlbHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfb3V0cHV0LmM9NTg9aW50IGxsY19idWlsZF9hbmRfc2VuZF91aV9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9sbGMvbGxjX291dHB1dC5jLTYxLVxcdGludCByYztcXG5uZXQvbGxjL2xsY19vdXRwdXQuYzo2MjpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02My1cXHRcXHRcXHQgICAgZHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTY2PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3VpKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmMtNjktXFxubmV0L2xsYy9sbGNfc19hYy5jOjcwOlxcdGxsY19wZHVfaGVhZGVyX2luaXQoc2tiLCBMTENfUERVX1RZUEVfVSwgZXYtXFx1MDAzZXNhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfc19hYy5jLTcxLVxcdFxcdFxcdCAgICBldi1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTg2PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3hpZF9jKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmMtODktXFxubmV0L2xsYy9sbGNfc19hYy5jOjkwOlxcdGxsY19wZHVfaGVhZGVyX2luaXQoc2tiLCBMTENfUERVX1RZUEVfVV9YSUQsIGV2LVxcdTAwM2VzYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX3NfYWMuYy05MS1cXHRcXHRcXHQgICAgZXYtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYz0xMDU9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfeGlkX3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xMTctXFx0XFx0Z290byBvdXQ7XFxubmV0L2xsYy9sbGNfc19hYy5jOjExODpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsIGRzYXAsXFxubmV0L2xsYy9sbGNfc19hYy5jLTExOS1cXHRcXHRcXHQgICAgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTEzNz1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF90ZXN0X2Moc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNDAtXFxubmV0L2xsYy9sbGNfc19hYy5jOjE0MTpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX1UsIGV2LVxcdTAwM2VzYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNDItXFx0XFx0XFx0ICAgIGV2LVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmM9MTQ4PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3Rlc3RfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTE2Ni1cXHRcXHRnb3RvIG91dDtcXG5uZXQvbGxjL2xsY19zX2FjLmM6MTY3OlxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCwgZHNhcCxcXG5uZXQvbGxjL2xsY19zX2FjLmMtMTY4LVxcdFxcdFxcdCAgICBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM9NDI9c3RhdGljIGludCBsbGNfc3RhdGlvbl9hY19zZW5kX3hpZF9yKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNTItXFx0bGxjX3BkdV9kZWNvZGVfc3NhcChza2IsIFxcdTAwMjZkc2FwKTtcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6NTM6XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgMCwgZHNhcCwgTExDX1BEVV9SU1ApO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy01NC1cXHRsbGNfcGR1X2luaXRfYXNfeGlkX3JzcChuc2tiLCBMTENfWElEX05VTExfQ0xBU1NfMiwgMTI3KTtcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYz02Nj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfdGVzdF9yKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtODMtXFx0bGxjX3BkdV9kZWNvZGVfc3NhcChza2IsIFxcdTAwMjZkc2FwKTtcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6ODQ6XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgMCwgZHNhcCwgTExDX1BEVV9SU1ApO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy04NS1cXHRsbGNfcGR1X2luaXRfYXNfdGVzdF9yc3AobnNrYiwgc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzM6NDcuODkzODcxODI2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MTQzMjk4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTExDIFBEVSBIZWFkZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBpbnRvIHRoZSB3ZWVkcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYGxsY19wZHVfaGVhZGVyX2luaXRgIGZyb20gYGluY2x1ZGUvbmV0L2xsY19wZHUuaGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBoZWFkZXIgaXMgaW5pdGlhbGl6ZWQ7IHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBJJ2xsIG5lZWQgdG8gcmV2aXNpdCB0aGlzIGNvZGUgcGF0aCBmb3IgW21lbnRpb24gYSBzcGVjaWZpYyB1c2UgY2FzZSByZWxhdGVkIHRvIHRoZSB1c2VyJ3MgZmllbGQsIGUuZy4sIFwibXkgdXBjb21pbmcgd29yayBvbiBjb25nZXN0aW9uIGNvbnRyb2wgaW4gTExDIGZyYW1lcyxcIiBvciBcImRlYnVnZ2luZyBhIHJlY2VudCBpc3N1ZSB3aXRoIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBvbiB0aGlzIHBhcnRpY3VsYXIgcGxhdGZvcm1cIl0uIEknbSBob3BpbmcgaXQncyB3ZWxsLWNvbW1lbnRlZCwgYXMgaXMgdHlwaWNhbCBmb3IgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGV0aWVzIGluIHRoZSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGVzcGVjaWFsbHkgYW55IGJpdGZpZWxkIG1hbmlwdWxhdGlvbnMgb3IgcG9pbnRlciBhc3NpZ25tZW50cyB0aGF0IG1pZ2h0IGJlIGNyaXRpY2FsLiBMZXQncyBzZWUgaWYgdGhpcyByZXZlYWxzIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciwgZXZlbiB3b3JzZSwgYnVncyB0aGF0IGNvdWxkIGJlIGx1cmtpbmcuIEknbGwgYWxzbyBiZSBtZW50YWxseSBtYXBwaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdG8gaG93IHRoZSBMTEMgUERVIGlzIHN1YnNlcXVlbnRseSB1c2VkLCBzbyBJIGNhbiBlbnN1cmUgdGhlIGludmFyaWFudHMgSSdtIGV4cGVjdGluZyBhcmUgYmVpbmcgc2V0IHVwIGNvcnJlY3RseSBhbmQgbWFpbnRhaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzo1NC41MDgyMDM4NjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbGxjX3BkdS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxOCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxODpcXHQgKlxcdGxsY19wZHVfaGVhZGVyX2luaXQgLSBpbml0aWFsaXplcyBwZHUgaGVhZGVyXFxuIDIxOTpcXHQgKlxcdEBza2I6IGlucHV0IHNrYiB0aGF0IGhlYWRlciBtdXN0IGJlIHNldCBpbnRvIGl0LlxcbiAyMjA6XFx0ICpcXHRAdHlwZTogdHlwZSBvZiBQRFUgKFUsIEkgb3IgUykuXFxuIDIyMTpcXHQgKlxcdEBzc2FwOiBzb3VyY2Ugc2FwLlxcbiAyMjI6XFx0ICpcXHRAZHNhcDogZGVzdGluYXRpb24gc2FwLlxcbiAyMjM6XFx0ICpcXHRAY3I6IGNvbW1hbmQvcmVzcG9uc2UgYml0ICgwIG9yIDEpLlxcbiAyMjQ6XFx0ICpcXG4gMjI1OlxcdCAqXFx0VGhpcyBmdW5jdGlvbiBzZXRzIERTQVAsIFNTQVAgYW5kIGNvbW1hbmQvUmVzcG9uc2UgYml0IGluIExMQyBoZWFkZXIuXFxuIDIyNjpcXHQgKi9cXG4gMjI3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2hlYWRlcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXFxuIDIyODpcXHRcXHRcXHRcXHRcXHQgICAgICAgdTggc3NhcCwgdTggZHNhcCwgdTggY3IpXFxuIDIyOTpcXHR7XFxuIDIzMDpcXHRcXHRpbnQgaGxlbiA9IDQ7IC8qIGRlZmF1bHQgdmFsdWUgZm9yIEkgYW5kIFMgdHlwZXMgKi9cXG4gMjMxOlxcdFxcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHU7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbiAyMzQ6XFx0XFx0Y2FzZSBMTENfUERVX1RZUEVfVTpcXG4gMjM1OlxcdFxcdFxcdGhsZW4gPSAzO1xcbiAyMzY6XFx0XFx0XFx0YnJlYWs7XFxuIDIzNzpcXHRcXHRjYXNlIExMQ19QRFVfVFlQRV9VX1hJRDpcXG4gMjM4OlxcdFxcdFxcdGhsZW4gPSA2O1xcbiAyMzk6XFx0XFx0XFx0YnJlYWs7XFxuIDI0MDpcXHRcXHR9XFxuIDI0MTpcXHRcXG4gMjQyOlxcdFxcdHNrYl9wdXNoKHNrYiwgaGxlbik7XFxuIDI0MzpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gMjQ0OlxcdFxcdHBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7XFxuIDI0NTpcXHRcXHRwZHUtXFx1MDAzZWRzYXAgPSBkc2FwO1xcbiAyNDY6XFx0XFx0cGR1LVxcdTAwM2Vzc2FwID0gc3NhcDtcXG4gMjQ3OlxcdFxcdHBkdS1cXHUwMDNlc3NhcCB8PSBjcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzM6NTQuNTA4MjkyNDA1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTg5NjgyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipBbmFseXppbmcgdGhlIExMQyBQRFUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gb2YgY29kZS4gRmlyc3QsIGl0J3Mgc2V0dGluZyB0aGUgYHBkdS1cdTAwM2Vkc2FwYCBhbmQgYHBkdS1cdTAwM2Vzc2FwYCB2YWx1ZXMuIE1ha2VzIHNlbnNlOyB0aGVzZSBhcmUgdGhlIERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50IGFuZCBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQsIGNydWNpYWwgZm9yIGFkZHJlc3NpbmcgaW4gdGhlIExvZ2ljYWwgTGluayBDb250cm9sIGxheWVyLiBOb3csIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBQRFUgc3RydWN0dXJlIHNwZWNpZmljYWxseSBhcyBhIFwiRE0gUmVzcG9uc2UsXCIgbGlrZWx5IGEgXCJEaXNjb25uZWN0IE1vZGVcIiByZXNwb25zZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAgZnVuY3Rpb24gY2FsbCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHNoYXBpbmcgdGhlIFBEVSBmb3IgdGhpcyBzcGVjaWZpYyB0eXBlIG9mIHJlc3BvbnNlLiBJcyBpdCBzZXR0aW5nIGZsYWdzPyBGaWxsaW5nIGluIHNwZWNpZmljIGZpZWxkcyB3aXRoaW4gdGhlIFBEVT8gSSBuZWVkIHRoZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI4NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzU6MTEuNjk3OTc3MzA2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3MTMzODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19wZHVfaW5pdF9hc19kbV9yc3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbGxjX3BkdS5oPTQzMD12b2lkIGxsY19wZHVfaW5pdF9hc19zYWJtZV9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcF9iaXQpO1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaDo0MzE6dm9pZCBsbGNfcGR1X2luaXRfYXNfZG1fcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IGZfYml0KTtcXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtNDMyLXZvaWQgbGxjX3BkdV9pbml0X2FzX2ZybXJfcnNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsbGNfcGR1X3NuICpwcmV2X3BkdSxcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0yMTc9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTIyOS1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjIzMDpcXHRcXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjMxLVxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTI1My1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI1NDpcXHRcXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIDEpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNTUtXFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTg3NC1cXHRcXHRcXHQgICAgc2FkZHItXFx1MDAzZWxzYXAsIExMQ19QRFVfUlNQKTtcXG5uZXQvbGxjL2xsY19jb25uLmM6ODc1OlxcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgZl9iaXQpO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzYtXFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgc2FkZHItXFx1MDAzZW1hYyk7XFxuLS1cXG5uZXQvbGxjL2xsY19wZHUuYz0xNzg9dm9pZCBsbGNfcGR1X2luaXRfYXNfc2FibWVfY21kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHBfYml0KVxcbi0tXFxubmV0L2xsYy9sbGNfcGR1LmMtMTg3LS8qKlxcbm5ldC9sbGMvbGxjX3BkdS5jOjE4ODogKlxcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AgLSBidWlsZHMgRE0gcmVzcG9uc2UgcGR1XFxubmV0L2xsYy9sbGNfcGR1LmMtMTg5LSAqXFx0QHNrYjogQWRkcmVzcyBvZiB0aGUgc2tiIHRvIGJ1aWxkXFxuLS1cXG5uZXQvbGxjL2xsY19wZHUuYy0xOTMtICovXFxubmV0L2xsYy9sbGNfcGR1LmM6MTk0OnZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmX2JpdClcXG5uZXQvbGxjL2xsY19wZHUuYy0xOTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNToxMy42OTUxMTY2MjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NDgwODc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvbGxjL2xsY19wZHUuY2AgYW5kIHNwZWNpZmljYWxseSBkaXNzZWN0IGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYC4gVGhpcyBmdW5jdGlvbidzIG5hbWUgc2NyZWFtcyBcImluaXRpYWxpemluZyBhIFByb3RvY29sIERhdGEgVW5pdCAoUERVKSBhcyBhIERpc2Nvbm5lY3QgTW9kZSAoRE0pIHJlc3BvbnNlLlwiIFNvLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgc2V0dXAgZm9yIGEgUERVIHRoYXQncyBhY2tub3dsZWRnaW5nIGEgZGlzY29ubmVjdGlvbiByZXF1ZXN0LiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQgZmllbGRzIGl0IHBvcHVsYXRlcywgaG93IGl0IGhhbmRsZXMgdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24gKHNvdXJjZSBhbmQgZGVzdGluYXRpb24gTUFDcyBwcm9iYWJseSksIGFuZCB3aGF0IGZsYWdzIG9yIGNvbnRyb2wgYml0cyBpdCBzZXRzIHRvIHNpZ25hbCB0aGUgRE0gc3RhdHVzLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQgcmV1c2VzIGFueSBleGlzdGluZyBQRFUgaW5pdGlhbGl6YXRpb24gbWVjaGFuaXNtcyBvciBpZiBpdCdzIGEgZGVkaWNhdGVkIGZ1bmN0aW9uIGZvciB0aGlzIHNwZWNpZmljIHJlc3BvbnNlIHR5cGUuIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaW1wbGVtZW50ZWQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNToxOC4wMzk5MjgzNzZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2xsYy9sbGNfcGR1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk0OlxcdHZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmX2JpdClcXG4gMTk1OlxcdHtcXG4gMTk2OlxcdFxcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRwZHUtXFx1MDAzZWN0cmxfMSAgPSBMTENfUERVX1RZUEVfVTtcXG4gMTk5OlxcdFxcdHBkdS1cXHUwMDNlY3RybF8xIHw9IExMQ18yX1BEVV9SU1BfRE07XFxuIDIwMDpcXHRcXHRwZHUtXFx1MDAzZWN0cmxfMSB8PSAoKGZfYml0IFxcdTAwMjYgMSkgXFx1MDAzY1xcdTAwM2MgNCkgXFx1MDAyNiBMTENfVV9QRl9CSVRfTUFTSztcXG4gMjAxOlxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0LyoqXFxuIDIwNDpcXHQgKlxcdGxsY19wZHVfaW5pdF9hc19mcm1yX3JzcCAtIGJ1aWxkcyBGUk1SIHJlc3BvbnNlIFBEVVxcbiAyMDU6XFx0ICpcXHRAc2tiOiBBZGRyZXNzIG9mIHRoZSBmcmFtZSB0byBidWlsZFxcbiAyMDY6XFx0ICpcXHRAcHJldl9wZHU6IFRoZSByZWplY3RlZCBQRFUgZnJhbWVcXG4gMjA3OlxcdCAqXFx0QGZfYml0OiBUaGUgRiBiaXQgdG8gc2V0IGluIHRoZSBQRFVcXG4gMjA4OlxcdCAqXFx0QHZzOiB0eCBzdGF0ZSB2YXJpIHZhbHVlIGZvciB0aGUgZGF0YSBsaW5rIGNvbm4gYXQgdGhlIHJlamVjdGluZyBMTENcXG4gMjA5OlxcdCAqXFx0QHZyOiByeCBzdGF0ZSB2YXIgdmFsdWUgZm9yIHRoZSBkYXRhIGxpbmsgY29ubiBhdCB0aGUgcmVqZWN0aW5nIExMQ1xcbiAyMTA6XFx0ICpcXHRAdnp5eHc6IGNvbXBsZXRlbHkgZGVzY3JpYmVkIGluIHRoZSBJRUVFIFN0ZCA4MDIuMiBkb2N1bWVudCAoUGcgNTUpXFxuIDIxMTpcXHQgKlxcbiAyMTI6XFx0ICpcXHRCdWlsZHMgYSBwZHUgZnJhbWUgYXMgYSBGUk1SIHJlc3BvbnNlLlxcbiAyMTM6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM1OjE4LjAzOTk5NDU0NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ3MjkxOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHByb2Nlc3NpbmcgdGhpcyBsb2dpYzpcblxuKipMTEMgUERVIEluaXRpYWxpemF0aW9uIC0gQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAgZnVuY3Rpb24gd29ya3MuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gYWN0aW9uIGlzIHNldHRpbmcgdGhlIGBwZHUtXHUwMDNlY3RybF8xYCBmaWVsZCwgd2hpY2ggSSBrbm93IGlzIGEgY3J1Y2lhbCBjb250cm9sIGJ5dGUgaW4gdGhlIExMQyBmcmFtZS4gVGhpcyBtZWFucywgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBleGVjdXRlcywgSSBjYW4gZXhwZWN0IHRoYXQgYHBkdS1cdTAwM2Vkc2FwYCwgYHBkdS1cdTAwM2Vzc2FwYCwgKmFuZCogYHBkdS1cdTAwM2VjdHJsXzFgIHdpbGwgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkLiBOaWNlIGFuZCBlZmZpY2llbnQuXG5cblNwZWNpZmljYWxseSwgZm9yIHRoZSBgTExDX1BEVV9UWVBFX1VgIHR5cGUgZnJhbWVzLCB0aGlzIGFsc28gc2V0cyB0aGUgaGVhZGVyIGxlbmd0aCwgYGhsZW5gIHRvIDMuIFNvLCBmb3IgdGhpcyB0eXBlIG9mIGZyYW1lLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlc2UgdGhyZWUgYnl0ZXMgYXJlIHNldCB1cCBjb3JyZWN0bHk6IGBwZHUtXHUwMDNlZHNhcGAsIGBwZHUtXHUwMDNlc3NhcGAsIGFuZCBgcGR1LVx1MDAzZWN0cmxfMWAuIFRoZW4sIHRoZSBjb2RlIGNhbGxzIGBsbGNfbWFjX2hkcl9pbml0YCB3aGljaCBJJ2xsIG5lZWQgdG8gY2hlY2ssIGJ1dCBsb29rcyBsaWtlIGl0IGhhbmRsZXMgdGhlIE1BQyBoZWFkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTg1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNToyMi43ODcyODg3NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMzkyNzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfbWFjX2hkcl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsYy5oPTk0PWludCBsbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsXFxuLS1cXG5pbmNsdWRlL25ldC9sbGMuaC05Ni1cXG5pbmNsdWRlL25ldC9sbGMuaDo5NzppbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSxcXG5pbmNsdWRlL25ldC9sbGMuaC05OC1cXHRcXHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhKTtcXG4tLVxcbm5ldC84MDIvZ2FycC5jPTI1MD1zdGF0aWMgdm9pZCBnYXJwX3BkdV9xdWV1ZShzdHJ1Y3QgZ2FycF9hcHBsaWNhbnQgKmFwcClcXG4tLVxcbm5ldC84MDIvZ2FycC5jLTI2MC1cXHRsbGNfcGR1X2luaXRfYXNfdWlfY21kKGFwcC1cXHUwMDNlcGR1KTtcXG5uZXQvODAyL2dhcnAuYzoyNjE6XFx0bGxjX21hY19oZHJfaW5pdChhcHAtXFx1MDAzZXBkdSwgYXBwLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLFxcbm5ldC84MDIvZ2FycC5jLTI2Mi1cXHRcXHRcXHQgYXBwLVxcdTAwM2VhcHAtXFx1MDAzZXByb3RvLmdyb3VwX2FkZHJlc3MpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jPTM1PXN0YXRpYyB2b2lkIGJyX3NlbmRfYnBkdShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jLTU0LVxcbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYzo1NTpcXHRsbGNfbWFjX2hkcl9pbml0KHNrYiwgcC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgcC1cXHUwMDNlYnItXFx1MDAzZWdyb3VwX2FkZHIpO1xcbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYy01Ni1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMjAzLVxcdFxcdGxsY19wZHVfaW5pdF9hc19kaXNjX2NtZChuc2tiLCAxKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6MjA0OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjA1LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMzAtXFx0XFx0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjIzMTpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTIzMi1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTI0Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMjU0LVxcdFxcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgMSk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI1NTpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTI1Ni1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTI2Nz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9mcm1yX3JzcF9mX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yODgtXFx0XFx0XFx0XFx0XFx0IGxsYy1cXHUwMDNldlIsIElOQ09SUkVDVCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI4OTpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTI5MC1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMwMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMxNS1cXHRcXHRcXHRcXHRcXHQgbGxjLVxcdTAwM2V2UiwgSU5DT1JSRUNUKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6MzE2OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMzE3LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MzI4PWludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMzQ1LVxcdFxcdFxcdFxcdFxcdCBsbGMtXFx1MDAzZXZSLCBJTkNPUlJFQ1QpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzozNDY6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNDctXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0zNTg9aW50IGxsY19jb25uX2FjX3NlbmRfaV9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMzY2LVxcdGxsY19wZHVfaW5pdF9hc19pX2NtZChza2IsIDEsIGxsYy1cXHUwMDNldlMsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzozNjc6XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTM2OC1cXHRpZiAobGlrZWx5KCFyYykpIHtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0zNzY9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX2lfY21kX3Bfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTM4NC1cXHRsbGNfcGR1X2luaXRfYXNfaV9jbWQoc2tiLCAwLCBsbGMtXFx1MDAzZXZTLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6Mzg1OlxcdHJjID0gbGxjX21hY19oZHJfaW5pdChza2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0zODYtXFx0aWYgKGxpa2VseSghcmMpKSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9Mzk0PWludCBsbGNfY29ubl9hY19zZW5kX2lfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTQwMi1cXHRsbGNfcGR1X2luaXRfYXNfaV9jbWQoc2tiLCAwLCBsbGMtXFx1MDAzZXZTLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDAzOlxcdHJjID0gbGxjX21hY19oZHJfaW5pdChza2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00MDQtXFx0aWYgKGxpa2VseSghcmMpKSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDIxPWludCBsbGNfY29ubl9hY19yZXNlbmRfaV94eHhfeF9zZXRfMF9vcl9zZW5kX3JyKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy00MzUtXFx0XFx0bGxjX3BkdV9pbml0X2FzX3JyX3JzcChuc2tiLCAwLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDM2OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNDM3LVxcdFxcdGlmIChsaWtlbHkoIXJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy00NzAtXFx0XFx0bGxjX3BkdV9pbml0X2FzX3Jlal9jbWQobnNrYiwgMSwgbGxjLVxcdTAwM2V2Uik7XFxubmV0L2xsYy9sbGNfY19hYy5jOjQ3MTpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTQ3Mi1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTQ4Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTQ5NC1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcmVqX3JzcChuc2tiLCAxLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDk1OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNDk2LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTA3PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTE4LVxcdFxcdGxsY19wZHVfaW5pdF9hc19yZWpfcnNwKG5za2IsIDAsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo1MTk6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MjAtXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy01NDItXFx0XFx0bGxjX3BkdV9pbml0X2FzX3Jucl9jbWQobnNrYiwgMSwgbGxjLVxcdTAwM2V2Uik7XFxubmV0L2xsYy9sbGNfY19hYy5jOjU0MzpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTU0NC1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTU1NT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTU2Ni1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcm5yX3JzcChuc2tiLCAxLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTY3OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNTY4LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTc5PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTkwLVxcdFxcdGxsY19wZHVfaW5pdF9hc19ybnJfcnNwKG5za2IsIDAsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo1OTE6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01OTItXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjI2LVxcdFxcdGxsY19wZHVfaW5pdF9hc19ybnJfcnNwKG5za2IsIDAsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Mjc6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy02MjgtXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02Mzk9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTY1MC1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcnJfY21kKG5za2IsIDEsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2NTE6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy02NTItXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02NjM9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTY3NS1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIGZfYml0LCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6Njc2OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNjc3LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9Njg4PWludCBsbGNfY29ubl9hY19zZW5kX2Fja19yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjk5LVxcdFxcdGxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgMSwgbGxjLVxcdTAwM2V2Uik7XFxubmV0L2xsYy9sbGNfY19hYy5jOjcwMDpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTcwMS1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTcxMj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIzLVxcdFxcdGxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgMCwgbGxjLVxcdTAwM2V2Uik7XFxubmV0L2xsYy9sbGNfY19hYy5jOjcyNDpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTcyNS1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTczNj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTc0Ny1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIDAsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo3NDg6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy03NDktXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03NzA9aW50IGxsY19jb25uX2FjX3NlbmRfc2FibWVfY21kX3Bfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTc4NC1cXHRcXHRsbGNfcGR1X2luaXRfYXNfc2FibWVfY21kKG5za2IsIDEpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo3ODU6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgZG1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTc4Ni1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTc5OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF91YV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtODEyLVxcdFxcdGxsY19wZHVfaW5pdF9hc191YV9yc3AobnNrYiwgZl9iaXQpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo4MTM6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy04MTQtXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05MDQ9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX2lfcnNwX2Zfc2V0X2Fja3BmKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy05MTMtXFx0bGxjX3BkdV9pbml0X2FzX2lfY21kKHNrYiwgbGxjLVxcdTAwM2VhY2tfcGYsIGxsYy1cXHUwMDNldlMsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo5MTQ6XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTkxNS1cXHRpZiAobGlrZWx5KCFyYykpIHtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05NTk9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtOTcxLVxcdFxcdGxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgbGxjLVxcdTAwM2VhY2tfcGYsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo5NzI6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy05NzMtXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz04NjM9c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzUtXFx0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XFxubmV0L2xsYy9sbGNfY29ubi5jOjg3NjpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBzYWRkci1cXHUwMDNlbWFjKTtcXG5uZXQvbGxjL2xsY19jb25uLmMtODc3LVxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0xNi0vKipcXG5uZXQvbGxjL2xsY19vdXRwdXQuYzoxNzogKlxcdGxsY19tYWNfaGRyX2luaXQgLSBmaWxscyBNQUMgaGVhZGVyIGZpZWxkc1xcbm5ldC9sbGMvbGxjX291dHB1dC5jLTE4LSAqXFx0QHNrYjogQWRkcmVzcyBvZiB0aGUgZnJhbWUgdG8gaW5pdGlhbGl6ZSBpdHMgTUFDIGhlYWRlclxcbi0tXFxubmV0L2xsYy9sbGNfb3V0cHV0LmMtMjQtICovXFxubmV0L2xsYy9sbGNfb3V0cHV0LmM6MjU6aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNi1cXHRcXHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSlcXG4tLVxcbm5ldC9sbGMvbGxjX291dHB1dC5jPTU4PWludCBsbGNfYnVpbGRfYW5kX3NlbmRfdWlfcGt0KHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02NC1cXHRsbGNfcGR1X2luaXRfYXNfdWlfY21kKHNrYik7XFxubmV0L2xsYy9sbGNfb3V0cHV0LmM6NjU6XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBkbWFjKTtcXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02Ni1cXHRpZiAobGlrZWx5KCFyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYy03Mi1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYzo3MzpFWFBPUlRfU1lNQk9MKGxsY19tYWNfaGRyX2luaXQpO1xcbm5ldC9sbGMvbGxjX291dHB1dC5jLTc0LUVYUE9SVF9TWU1CT0wobGxjX2J1aWxkX2FuZF9zZW5kX3VpX3BrdCk7XFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmM9Mzc9c3RhdGljIGludCBsbGNfcHJlcGFyZV9hbmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTQyLVxcbm5ldC9sbGMvbGxjX3NfYWMuYzo0MzpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQoc2tiLCBldi1cXHUwMDNlc2FkZHIubWFjLCBldi1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19zX2FjLmMtNDQtXFx0aWYgKHJjKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTEwNT1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF94aWRfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTEyMC1cXHRsbGNfcGR1X2luaXRfYXNfeGlkX3JzcChuc2tiLCBMTENfWElEX05VTExfQ0xBU1NfMiwgMCk7XFxubmV0L2xsYy9sbGNfc19hYy5jOjEyMTpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbWFjX3NhLCBtYWNfZGEpO1xcbm5ldC9sbGMvbGxjX3NfYWMuYy0xMjItXFx0aWYgKGxpa2VseSghcmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTE0OD1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF90ZXN0X3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNjktXFx0bGxjX3BkdV9pbml0X2FzX3Rlc3RfcnNwKG5za2IsIHNrYik7XFxubmV0L2xsYy9sbGNfc19hYy5jOjE3MDpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbWFjX3NhLCBtYWNfZGEpO1xcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNzEtXFx0aWYgKGxpa2VseSghcmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTQyPXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF94aWRfcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTU0LVxcdGxsY19wZHVfaW5pdF9hc194aWRfcnNwKG5za2IsIExMQ19YSURfTlVMTF9DTEFTU18yLCAxMjcpO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo1NTpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBtYWNfZGEpO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy01Ni1cXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTY2PXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF90ZXN0X3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy04NS1cXHRsbGNfcGR1X2luaXRfYXNfdGVzdF9yc3AobnNrYiwgc2tiKTtcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6ODY6XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbWFjX2RhKTtcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtODctXFx0aWYgKHVubGlrZWx5KHJjKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzU6MjQuMjkxMjIxMzU4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTY3NTQ3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbGxjX21hY19oZHJfaW5pdGAgZnVuY3Rpb24gaW4gYG5ldC9sbGMvbGxjX291dHB1dC5jYCwgdGhpbmtpbmcgb3V0IGxvdWQuLi5cblxuKipEaXZpbmcgaW50byBMTEMgT3V0cHV0IEhlYWRlciBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSBmb2N1c2luZyBvbiBgbGxjX21hY19oZHJfaW5pdGAgaW5zaWRlIGBuZXQvbGxjL2xsY19vdXRwdXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIGF0IGxlYXN0LCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIE1BQyBoZWFkZXIgZm9yIExvZ2ljYWwgTGluayBDb250cm9sIChMTEMpIGZyYW1lcy4gSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyB0byBjcmFmdCB0aGF0IGVzc2VudGlhbCBoZWFkZXIuIEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgb2YgdGhlIHZhcmlvdXMgcGFyYW1ldGVycyBpdCdzIHByb2JhYmx5IHVzaW5nLCBsaWtlIHRoZSBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcywgc291cmNlIE1BQyBhZGRyZXNzLCBFdGhlclR5cGUsIGFuZCBhbnkgcG90ZW50aWFsIExMQy1zcGVjaWZpYyBmaWVsZHMuIE15IHBhc3QgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgcHJvYmFibHkgYSBjcnVjaWFsIHN0ZXAgaW4gZW5zdXJpbmcgb3VyIExMQyBmcmFtZXMgYXJlIHByb3Blcmx5IGZvcm1hdHRlZCBiZWZvcmUgdGhleSBoaXQgdGhlIHdpcmUgYW5kIHRoYXQgdGhleSdyZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXQgdGhlIHJlY2VpdmluZyBlbmQuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgYWRkcmVzcyBmaWVsZHMuIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZTsgaG93IGl0IGhhbmRsZXMgYW55IHBvdGVudGlhbGx5IGZyYWdtZW50ZWQgZnJhbWVzLCBhbmQgYW55IGJ1ZmZlci1tYW5hZ2VtZW50IGRldGFpbHMuIEknbSBnb2luZyB0byBwYXJzZSB0aGUgY29kZSBhbmQgbG9vayBmb3IgZGV0YWlscyByZWdhcmRpbmcgb3B0aW1pemF0aW9ucywgZXNwZWNpYWxseSBhbnkgaW5saW5lIG1lbW9yeSBvcGVyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW5pdCBmdW5jdGlvbiB3aWxsIG9mZmVyIGluc2lnaHQgb24gaG93IExMQyBmcmFtZXMgYXJlIGdlbmVyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3NDYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNToyOC4yNDc5Nzk0NjVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2xsYy9sbGNfb3V0cHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTc6XFx0ICpcXHRsbGNfbWFjX2hkcl9pbml0IC0gZmlsbHMgTUFDIGhlYWRlciBmaWVsZHNcXG4gIDE4OlxcdCAqXFx0QHNrYjogQWRkcmVzcyBvZiB0aGUgZnJhbWUgdG8gaW5pdGlhbGl6ZSBpdHMgTUFDIGhlYWRlclxcbiAgMTk6XFx0ICpcXHRAc2E6IFRoZSBNQUMgc291cmNlIGFkZHJlc3NcXG4gIDIwOlxcdCAqXFx0QGRhOiBUaGUgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3NcXG4gIDIxOlxcdCAqXFxuICAyMjpcXHQgKlxcdEZpbGxzIE1BQyBoZWFkZXIgZmllbGRzLCBkZXBlbmRpbmcgb24gTUFDIHR5cGUuIFJldHVybnMgMCwgSWYgTUFDIHR5cGVcXG4gIDIzOlxcdCAqXFx0aXMgYSB2YWxpZCB0eXBlIGFuZCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZXMgY29ycmVjdGx5IDEsIG90aGVyd2lzZS5cXG4gIDI0OlxcdCAqL1xcbiAgMjU6XFx0aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDI2OlxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhKVxcbiAgMjc6XFx0e1xcbiAgMjg6XFx0XFx0aW50IHJjID0gLUVJTlZBTDtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSkge1xcbiAgMzE6XFx0XFx0Y2FzZSBBUlBIUkRfRVRIRVI6XFxuICAzMjpcXHRcXHRjYXNlIEFSUEhSRF9MT09QQkFDSzpcXG4gIDMzOlxcdFxcdFxcdHJjID0gZGV2X2hhcmRfaGVhZGVyKHNrYiwgc2tiLVxcdTAwM2VkZXYsIEVUSF9QXzgwMl8yLCBkYSwgc2EsXFxuICAzNDpcXHRcXHRcXHRcXHRcXHQgICAgIHNrYi1cXHUwMDNlbGVuKTtcXG4gIDM1OlxcdFxcdFxcdGlmIChyYyBcXHUwMDNlIDApXFxuICAzNjpcXHRcXHRcXHRcXHRyYyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM1OjI4LjI0ODA0MDczNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjU4ODY4MTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTExDIENvbm5lY3Rpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBgZGV2X2hhcmRfaGVhZGVyYCBnZXRzIHRoZSBNQUMgaGVhZGVyIHNvcnRlZCBhbmQgZnVsbHkgcG9wdWxhdGVzIHRoZSBgc2tiYC4gR29vZCwgdGhhdCBtZWFucyB0aGUgYHNrYmAgaXMgaW5pdGlhbGl6ZWQsIHdoaWNoIHByZXZlbnRzIHVzIGZyb20gc2VuZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgZGVsdmUgaW50byB0aGVzZSBjaGFuZ2VzIGluIGBsbGNfY29ubl9oYW5kbGVyYC5cblxuQWxyaWdodCwgSSBzZWUgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIGBUQ1BfTElTVEVOYCBzdGF0ZS4gQmVmb3JlLCBhIG5ldyBzb2NrZXQgd2FzIGltbWVkaWF0ZWx5IGNyZWF0ZWQgdXNpbmcgYGxsY19jcmVhdGVfaW5jb21pbmdfc29ja2AuIE5vdywgaXQgc2VlbXMgbGlrZSB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgbG9naWMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgY2hlY2tpbmcgZm9yIHNwZWNpZmljIExMQyBjb21tYW5kcyBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgc29ja2V0LlxuXG5UaGUgY29kZSBub3cgY2hlY2tzIGZvciBgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3hgLiBJZiBpdCAqcmV0dXJucyB0cnVlKiAod2hpY2ggbWVhbnMgbm90IGEgU0FCTUUgY29tbWFuZCksIGEgRE0gcmVzcG9uc2UgaXMgc2VudC4gSG93ZXZlciwgaG9sZCBvbi4uLiB0aGUgbG9naWMgaXMgaW52ZXJ0ZWQuIExldCBtZSBkb3VibGUtY2hlY2suXG5cblRoZSBsb2dpYyBpcyBlc3NlbnRpYWxseTogSWYgaXQncyAqbm90KiBhIFNBQk1FIGNvbW1hbmQsIHRoZW4gY2hlY2sgZm9yIERJU0MgY29tbWFuZCwgaWYgaXQncyBub3QgYSBESVNDIGNvbW1hbmQsIGRlY29kZSB0aGUgUC9GIGJpdCBmcm9tIHRoZSBQRFUgYW5kIHNlbmQgYSBETSByZXNwb25zZS4gSWYgaXQncyBub3QgYSBTQUJNRSBjb21tYW5kIGFuZCBpdCdzIGEgRElTQyBjb21tYW5kIHRoZW4gY2hlY2sgZm9yIGB4eHhgIGFuZCBpZiBpdCBpcyBub3QgdGhhdCBzZW5kIGEgRE0gcmVzcG9uc2UuXG5cblRoZSBjb2RlICpzaG91bGQqIHNlbmQgYSBETSByZXNwb25zZS4gV2FpdCwgdGhpcyBpcyBpbnZlcnRlZCwgSSBuZWVkIHRvIGNoZWNrIGBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeGAgYmVjYXVzZSBJIHRoaW5rIGl0IHJldHVybnMgMCBmb3IgYSBTQUJNRSBjb21tYW5kLiBSaWdodCwgSSBuZWVkIHRvIGdvIG92ZXIgdGhhdCBmdW5jdGlvbiBpbiBtb3JlIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0MjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjoyNC44MzY3MjQyMzlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODgzNDgxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbGxjX2NfZXYuaD0xNDI9aW50IGxsY19jb25uX2V2X3J4X3Jlal9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L2xsY19jX2V2Lmg6MTQzOmludCBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L2xsY19jX2V2LmgtMTQ0LWludCBsbGNfY29ubl9ldl9yeF91YV9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19ldi5jPTQxNT1pbnQgbGxjX2Nvbm5fZXZfcnhfcnJfcnNwX2ZiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19ldi5jLTQyNC1cXG5uZXQvbGxjL2xsY19jX2V2LmM6NDI1OmludCBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2xsYy9sbGNfY19ldi5jLTQyNi17XFxuLS1cXG5uZXQvbGxjL2xsY19jX3N0LmM9NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfY29tbW9uX3N0YXRlX3RyYW5zXzMgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjc3OlxcdC5ldlxcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxcbm5ldC9sbGMvbGxjX2Nfc3QuYy03OC1cXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX05PUk1BTCxcXG4tLVxcbm5ldC9sbGMvbGxjX2Nfc3QuYz0zNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfYWRtX3N0YXRlX3RyYW5zXzIgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjM3NjpcXHQuZXZcXHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcXG5uZXQvbGxjL2xsY19jX3N0LmMtMzc3LVxcdC5uZXh0X3N0YXRlICAgID0gTExDX0NPTk5fU1RBVEVfTk9STUFMLFxcbi0tXFxubmV0L2xsYy9sbGNfY19zdC5jPTQ1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19zZXR1cF9zdGF0ZV90cmFuc18xID0ge1xcbm5ldC9sbGMvbGxjX2Nfc3QuYzo0NTE6XFx0LmV2XFx0ICAgICAgID0gbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3gsXFxubmV0L2xsYy9sbGNfY19zdC5jLTQ1Mi1cXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX1NFVFVQLFxcbi0tXFxubmV0L2xsYy9sbGNfY19zdC5jPTQxNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfZF9jb25uX3N0YXRlX3RyYW5zXzEgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjQxNjk6XFx0LmV2XFx0ICAgICAgID0gbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3gsXFxubmV0L2xsYy9sbGNfY19zdC5jLTQxNzAtXFx0Lm5leHRfc3RhdGUgICAgPSBMTENfQ09OTl9TVEFURV9BRE0sXFxuLS1cXG5uZXQvbGxjL2xsY19jX3N0LmM9NDE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19kX2Nvbm5fc3RhdGVfdHJhbnNfMV8xID0ge1xcbm5ldC9sbGMvbGxjX2Nfc3QuYzo0MTkyOlxcdC5ldlxcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxcbm5ldC9sbGMvbGxjX2Nfc3QuYy00MTkzLVxcdC5uZXh0X3N0YXRlICAgID0gTExDX0NPTk5fU1RBVEVfQURNLFxcbi0tXFxubmV0L2xsYy9sbGNfY19zdC5jPTQ0MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfcnN0X3N0YXRlX3RyYW5zXzEgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjQ0MTc6XFx0LmV2XFx0ICAgICAgID0gbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3gsXFxubmV0L2xsYy9sbGNfY19zdC5jLTQ0MTgtXFx0Lm5leHRfc3RhdGUgICAgPSBMTENfQ09OTl9TVEFURV9SRVNFVCxcXG4tLVxcbm5ldC9sbGMvbGxjX2Nfc3QuYz00NzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgbGxjX2Vycm9yX3N0YXRlX3RyYW5zXzEgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjQ3MDg6XFx0LmV2XFx0ICAgICAgID0gbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3gsXFxubmV0L2xsYy9sbGNfY19zdC5jLTQ3MDktXFx0Lm5leHRfc3RhdGUgICAgPSBMTENfQ09OTl9TVEFURV9OT1JNQUwsXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTk0Mi1cXHRcXHRpZiAoIW5ld3NrKSB7XFxubmV0L2xsYy9sbGNfY29ubi5jOjk0MzpcXHRcXHRcXHRpZiAobGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHtcXG5uZXQvbGxjL2xsY19jb25uLmMtOTQ0LVxcdFxcdFxcdFxcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjoyNi44MjUwNzczNjhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDkwNzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIExMQyBTQUJNRSBDb21tYW5kIEhhbmRsaW5nKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9sbGMvbGxjX2NfZXYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTExDIGxheWVyIGhhbmRsZXMgdGhlIFNBQk1FIGNvbW1hbmQsIHNwZWNpZmljYWxseSB0aGUgcGFydCB3aGVyZSB0aGUgUC1iaXQgaXMgc2V0IHZpYSBgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3hgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgc2VxdWVuY2UsIGxpa2VseSBkZWFsaW5nIHdpdGggY29ubmVjdGlvbiBpbml0aWF0aW9uIG9yIHJlLWVzdGFibGlzaG1lbnQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGlzIGlzIGhhbmRsaW5nIGFuIGV4cGxpY2l0IFNBQk1FIHJlY2VwdGlvbiBvciBpZiBpdCdzIHRpZWQgdG8gb3RoZXIgc3RhdGUgdHJhbnNpdGlvbnMgd2l0aGluIHRoZSBGU00uIExldCdzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGV5IGFyZSBtYW5hZ2luZyB0aGUgUC1iaXQgd2l0aGluIHRoZSBTQUJNRSBjb21tYW5kLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgYWNrbm93bGVkZ21lbnQgcHJvY2VkdXJlcyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGluZy4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLWNvbW1lbnRlZCwgc28gSSBjYW4gZ3Jhc3AgdGhlIG51YW5jZXMgb2YgdGhlIFAtYml0IHNpZ25hbGluZyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg4NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM2OjMxLjAyOTk4Nzc5NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbGxjL2xsY19jX2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdGludCBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQyNjpcXHR7XFxuIDQyNzpcXHRcXHRjb25zdCBzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0XFx0cmV0dXJuIExMQ19QRFVfSVNfQ01EKHBkdSkgXFx1MDAyNlxcdTAwMjYgTExDX1BEVV9UWVBFX0lTX1UocGR1KSBcXHUwMDI2XFx1MDAyNlxcbiA0MzA6XFx0XFx0ICAgICAgIExMQ19VX1BEVV9DTUQocGR1KSA9PSBMTENfMl9QRFVfQ01EX1NBQk1FID8gMCA6IDE7XFxuIDQzMTpcXHR9XFxuIDQzMjpcXHRcXG4gNDMzOlxcdGludCBsbGNfY29ubl9ldl9yeF91YV9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQzNDpcXHR7XFxuIDQzNTpcXHRcXHRzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0cmV0dXJuIExMQ19QRFVfSVNfUlNQKHBkdSkgXFx1MDAyNlxcdTAwMjYgTExDX1BEVV9UWVBFX0lTX1UocGR1KSBcXHUwMDI2XFx1MDAyNlxcbiA0Mzg6XFx0XFx0ICAgICAgIExMQ19VX1BEVV9SU1AocGR1KSA9PSBMTENfMl9QRFVfUlNQX1VBID8gMCA6IDE7XFxuIDQzOTpcXHR9XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdGludCBsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0NDI6XFx0e1xcbiA0NDM6XFx0XFx0dTE2IHJjID0gMTtcXG4gNDQ0OlxcdFxcdGNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjozMS4wMzAwNjEzODVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxMTk2NTY1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIExMQyBQRFUgSGFuZGxpbmcgYW5kIFNvY2tldCBDcmVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgYnJlYWtpbmcgZG93biB0aGUgTExDIFBEVSBoYW5kbGluZy4gIEZpcnN0LCB0aGUgaW5pdGlhbCBjaGVjayBgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc2ssIHNrYilgIGFjdHVhbGx5ICpuZWdhdGVzKiB0aGUgbWVhbmluZzogYSByZXR1cm4gb2YgYDBgIGluZGljYXRlcyB0aGF0IHRoZSBwYWNrZXQgaXMgKm5vdCogYSBTQUJNRSBjb21tYW5kLiAgR290IGl0LiAgSWYgaXQgaXNuJ3QgU0FCTUUsIHRoZW4gd2UgY2hlY2sgZm9yIERJU0MgY29tbWFuZHMuIElmIGl0ICppcyogYSBESVNDLCB3ZSBzZW5kIGEgRE0gKERpc2Nvbm5lY3QgTW9kZSkgcmVzcG9uc2Ugd2l0aCB0aGUgRiBiaXQuIE90aGVyd2lzZSwgaWYgdGhlIFAgYml0IGlzIHNldCwgd2UgYWxzbyBzZW5kIGEgRE0gd2l0aCB0aGUgRiBiaXQgc2V0LCB0aGVuIGRyb3AgdGhlIHBhY2tldC4gIEFsbCBwcmV0dHkgc3RhbmRhcmQuXG5cbk5vdywgbXkgZm9jdXMgaXMgb24gaG93IHRob3NlIERNIHJlc3BvbnNlcyBhcmUgY29uc3RydWN0ZWQgYW5kIHNlbnQuIFNwZWNpZmljYWxseSB3aGF0J3MgZ29pbmcgb24gd2hlbiBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGlzIGNhbGxlZC4gSXQgdXNlcyBgbGxjX2FsbG9jX2ZyYW1lYCB0byBjcmVhdGUgYSBuZXcgYHNrYmAuICBUaGUgc2l6ZSBjYWxjdWxhdGlvbiBvZiBgaGxlbiArIGRhdGFfc2l6ZWAgaXMgZ29vZDsgaW4gdGhpcyBjYXNlIHRoYXQgd29ya3Mgb3V0IHRvIGAzICsgbWFjX2hlYWRlcl9sZW4gKyAwYCB3aXRoIHRoZSByZXN1bHQgYmVpbmcgcGFzc2VkIHRvIGBsbGNfcGR1X2hlYWRlcl9pbml0YC4gIFxuXG5gbGxjX3BkdV9oZWFkZXJfaW5pdGAgcHVzaGVzIDMgYnl0ZXMgb250byB0aGUgU0tCIGFuZCBzZXRzIGBkc2FwYCwgYHNzYXBgLCBhbmQgYGN0cmxfMWAgZmllbGRzLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgbGxjX3BkdV9oZWFkZXJfaW5pdGAgd2hpY2ggSSBzZWUgZG9lcyB0aGUgYHNrYl9wdXNoYCwgc2V0cyB0aGUgbmV0d29yayBoZWFkZXIsIHRoZW4gc2V0cyB0aGUgTExDIFUtZm9ybWF0IGhlYWRlciBmaWVsZHM6IGBkc2FwYCwgYHNzYXBgIGFuZCB0aGUgYGN0cmxfMWAgYnl0ZS4gVGhlIGBjcmAgYml0IGlzIHNldCBpbiB0aGUgYHNzYXBgIGJ5dGUuXG5cbk5leHQsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCBzZXRzIHRoZSBgY3RybF8xYCBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlIERNIHJlc3BvbnNlIGZvcm1hdCwgaW5jbHVkaW5nIHRoZSBGIGJpdC4gVGhhdCBoYW5kbGVzIHRoZSBjb250cm9sIGJ5dGUuIFNvLCB0aG9zZSB0aHJlZSBieXRlcyBhcmUgdGhlIExMQyBoZWFkZXIsIGNsZWFybHkgZGVmaW5lZC4gIFRoZW4gYGxsY19tYWNfaGRyX2luaXRgIGFkZHMgYW5kIHBvcHVsYXRlcyB0aGUgTUFDIGhlYWRlci4gU28gZmFyLCBzbyBnb29kLlxuXG5Ob3csIHRvIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBTS0I/IExldCdzIHRyYWNlIGl0IGNhcmVmdWxseS4gYGFsbG9jX3NrYmAgYWxsb2NhdGVzIHRoZSBidWZmZXIuIFRoZW4sIGBza2JfcmVzZXJ2ZWAgc2V0cyBhc2lkZSBzcGFjZSBmb3IgYm90aCB0aGUgTUFDIGFuZCBMTEMgaGVhZGVyLiBgc2tiX3B1c2hgIHB1dHMgaW4gdGhlIExMQyBoZWFkZXIgKDMgYnl0ZXMpLiBUaGVuLCBgZGV2X2hhcmRfaGVhZGVyYCBjb25zdHJ1Y3RzIGFuZCBhZGRzIHRoZSBNQUMgaGVhZGVyIChsZXQncyBzYXkgMTQgYnl0ZXMgZm9yIEV0aGVybmV0KSwgYW5kIGZpbGxzIGl0LiBUaGVyZWZvcmUsIHRoZSBvdmVyYWxsIFNLQiBsZW5ndGggaXMgMTQgKyAzID0gMTcgYnl0ZXMsIGFuZCBhbGwgb2YgdGhlc2UgYnl0ZXMgYXJlIHdyaXR0ZW4gZXhwbGljaXRseS4gTm8gb2J2aW91cyBtZW1vcnkgbGVhay4gRXhjZWxsZW50LlxuXG5Ob3csIHNoaWZ0aW5nIGdlYXJzLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIGBsbGNfY3JlYXRlX2luY29taW5nX3NvY2tgLiBJdCBsb29rcyBsaWtlIGl0IGNyZWF0ZXMgYSBuZXcgc29ja2V0IHRvIGhhbmRsZSBpbmNvbWluZyBjb25uZWN0aW9ucywgY29weWluZyBhZGRyZXNzZXMgYW5kIGRldmljZSBpbmZvcm1hdGlvbi4gVGhpcyBzZWVtcyBmaW5lLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhlIGFsbG9jYXRpb24gaXMgc2FmZS4gIExldCdzIGRpZyBpbnRvIGBsbGNfc2tfYWxsb2NgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY0MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjo0NS4xNDk3MjA1OThaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTU4MjIyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX3NrX2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsY19jb25uLmg9OTY9c3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9sbGNfY29ubi5oLTEwMC1cXG5pbmNsdWRlL25ldC9sbGNfY29ubi5oOjEwMTpzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXFxuaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaC0xMDItXFx0XFx0XFx0ICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmM9MTY3PXN0YXRpYyBpbnQgbGxjX3VpX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTgwLVxcdFxcdHJjID0gLUVOT01FTTtcXG5uZXQvbGxjL2FmX2xsYy5jOjE4MTpcXHRcXHRzayA9IGxsY19za19hbGxvYyhuZXQsIFBGX0xMQywgR0ZQX0tFUk5FTCwgXFx1MDAyNmxsY19wcm90bywga2Vybik7XFxubmV0L2xsYy9hZl9sbGMuYy0xODItXFx0XFx0aWYgKHNrKSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9NzYyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy03NjYte1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo3Njc6XFx0c3RydWN0IHNvY2sgKm5ld3NrID0gbGxjX3NrX2FsbG9jKHNvY2tfbmV0KHNrKSwgc2stXFx1MDAzZXNrX2ZhbWlseSwgR0ZQX0FUT01JQyxcXG5uZXQvbGxjL2xsY19jb25uLmMtNzY4LVxcdFxcdFxcdFxcdFxcdCAgc2stXFx1MDAzZXNrX3Byb3QsIDApO1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTExMzE9c3RhdGljIHZvaWQgbGxjX3NrX2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTExNTktLyoqXFxubmV0L2xsYy9sbGNfY29ubi5jOjExNjA6ICpcXHRsbGNfc2tfYWxsb2MgLSBBbGxvY2F0ZXMgTExDIHNvY2tcXG5uZXQvbGxjL2xsY19jb25uLmMtMTE2MS0gKlxcdEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtMTE2OS0gKi9cXG5uZXQvbGxjL2xsY19jb25uLmM6MTE3MDpzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXFxubmV0L2xsYy9sbGNfY29ubi5jLTExNzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjo0Ni42NDU1NDg0OTZaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0Mzg3MjM0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTExDIFNvY2tldCBBbGxvY2F0aW9uKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBsbGNfc2tfYWxsb2NgIHdpdGhpbiBgbmV0L2xsYy9sbGNfY29ubi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlci1sYXllciBjb25uZWN0aW9uLW9yaWVudGVkIExpbmsgTGF5ZXIgQ29udHJvbCAoTExDKSBzb2NrZXRzIGFyZSBhY3R1YWxseSBicm91Z2h0IGludG8gZXhpc3RlbmNlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGF0IHByb2Nlc3MuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgaXRzZWxmLCBidXQgSSdtIGFsc28gYmV0dGluZyBpdCBkZWFscyB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhdCBsZWFzdCBzb21lIG9mIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCB0aWUgdGhlIExMQyBzb2NrZXQgaW50byB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGFzc29jaWF0ZWQgY29udHJvbCBibG9ja3MsIG1heWJlIHNvbWUgbmV0bGluay1yZWxhdGVkIHNldHVwIGlmIHRoaXMgaXMgaG93IExMQyBjb25maWd1cmF0aW9uIGhhcHBlbnMsIGFuZCwgb2YgY291cnNlLCB0aGUgaW5pdGlhbCBzdGF0ZSB0cmFuc2l0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJcyB0aGlzIHVzaW5nIHRoZSByZWd1bGFyIGtlcm5lbCBhbGxvY2F0b3IsIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgTExDIGxheWVyPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgdG8gb3B0aW1pemUgZm9yIHRoZSBleHBlY3RlZCB0cmFmZmljIHBhdHRlcm5zPyBUaGlzIGNvdWxkIGJlIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODE3NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM3OjQ0LjA4NDI3NDI0NloiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbGxjL2xsY19jb25uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3MDpcXHRzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXFxuMTE3MTpcXHR7XFxuMTE3MjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBza19hbGxvYyhuZXQsIGZhbWlseSwgcHJpb3JpdHksIHByb3QsIGtlcm4pO1xcbjExNzM6XFx0XFxuMTE3NDpcXHRcXHRpZiAoIXNrKVxcbjExNzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3NjpcXHRcXHRsbGNfc2tfaW5pdChzayk7XFxuMTE3NzpcXHRcXHRzb2NrX2luaXRfZGF0YShOVUxMLCBzayk7XFxuMTE3ODpcXHQjaWZkZWYgTExDX1JFRkNOVF9ERUJVR1xcbjExNzk6XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2bGxjX3NvY2tfbnIpO1xcbjExODA6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIkxMQyBzb2NrZXQgJXAgY3JlYXRlZCBpbiAlcywgbm93IHdlIGhhdmUgJWQgYWxpdmVcXFxcblxcXCIsIHNrLFxcbjExODE6XFx0XFx0XFx0X19mdW5jX18sIGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc29ja19ucikpO1xcbjExODI6XFx0I2VuZGlmXFxuMTE4MzpcXHRvdXQ6XFxuMTE4NDpcXHRcXHRyZXR1cm4gc2s7XFxuMTE4NTpcXHR9XFxuMTE4NjpcXHRcXG4xMTg3OlxcdHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcXG4xMTg4OlxcdHtcXG4xMTg5OlxcdFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6Mzc6NDQuMDg0MzYxOTQ2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzM0ODk3MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IExMQyBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgYnVnIHdpdGhpbiB0aGUgTExDIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBsaWtlbHkgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBpbmNvbWluZ19zdGF0ZWAsIGBpbmNvbWluZ19saXN0ZW5lcmAsIGFuZCBgaW5jb21pbmdfd29ya2Agc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBtYW5hZ2luZyB0aGUgc3RhdGVzIG9mIGluY29taW5nIGNvbm5lY3Rpb25zIGFuZCB0aGVpciBwcm9wZXIgY2xlYW51cC5cblxuTXkgZmlyc3QgY2hlY2sgd2FzIHRvIGVuc3VyZSBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3IgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBgc2tfYWxsb2NgIGRvZXMgaXRzIGpvYiBvZiBhbGxvY2F0aW5nIGFuZCB6ZXJvaW5nIHRoZSBzb2NrZXQsIHdoaWNoIGlzIGdvb2QuIFRoZSBrZXkgZnVuY3Rpb24gdG8gbG9vayBhdCBpcyBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgLiBXaGlsZSBpdCBhbGxvY2F0ZXMgYW4gYHNrYmAsIGl0IGV4cGxpY2l0bHkgcG9wdWxhdGVzIGFsbCB0aGUgYnl0ZXMgd2l0aGluIGl0LCBzbyBubyBjb25jZXJuIHRoZXJlLlxuXG5JIHRoZW4gZGlkIGEgZGVlcGVyIGRpdmUsIGNyb3NzLWNoZWNraW5nIGBsbGNfY29ubl9zZW5kX2RtX3JzcGAsIHNwZWNpZmljYWxseSB0aGUgc291cmNlIG9mIGBzYWRkci1cdTAwM2VtYWNgLiBJIHRyYWNlZCBgc2FkZHJgIGJhY2sgdG8gYGxsY19jb25uX2hhbmRsZXJgLCB3aGljaCBwdWxscyB0aGUgZGF0YSBmcm9tIHRoZSBpbmNvbWluZyBgc2tiYCB1c2luZyBmdW5jdGlvbnMgbGlrZSBgbGxjX3BkdV9kZWNvZGVfc2FgIGFuZCBgbGxjX3BkdV9kZWNvZGVfc3NhcGAuIFRoZSBkYXRhIGlzLCB0aGVyZWZvcmUsIGluaXRpYWxpemVkIGZyb20gdGhlIG5ldHdvcmsgcGFja2V0LCBzbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTmV4dCwgSSBsb29rZWQgYXQgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCBhbmQgYGxsY191aV9hY2NlcHRgLCBhcyB0aGVzZSBhcmUgY3JpdGljYWwgcGFydHMgb2YgdGhlIGNsZWFudXAgYW5kIGFjY2VwdGFuY2UgcHJvY2Vzcy4gSSdtIHNhdGlzZmllZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBkb24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcy4gVGhleSdyZSBwcmltYXJpbHkgaW52b2x2ZWQgaW4gcmVsZWFzaW5nIGFuZCBtYW5hZ2luZyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgaW5jb21pbmcgc29ja2V0cywgYW5kIGFsbCBkYXRhIGFjY2VzcyBhcHBlYXJzIHRvIGJlIHByb3Blcmx5IHN5bmNocm9uaXplZCBhbmQgaW5pdGlhbGl6ZWQuXG5cbkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBzdGFuZGFyZCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBmaXguIFdoaWxlIGl0J3MgaW1wb3J0YW50IHRvIGJlIHJpZ29yb3VzLCBpdCBkb2VzICpub3QqIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mb3JtYXRpb24gbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gS0FTQU4gYW5kIExPQ0tERVAgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGlzIHBhdGNoIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggKFVBRiwgZG91YmxlIGZyZWVzLCBhbmQgbG9ja2luZyBpc3N1ZXMpLiBUaGVyZWZvcmUsIHRoaXMgZG9lcyAqbm90KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIEknbGwgZ28gYWhlYWQgYW5kIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYCBhbmQgZm9ybXVsYXRlIHRoZSBLTVNBTlJlYXNvbmluZyBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3OTksIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM4OjMxLjQxOTI2MjI4N1oiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgYnVnIGluIHRoZSBMTEMgcHJvdG9jb2wgYnkgaW50cm9kdWNpbmcgc3RhdGUgdHJhY2tpbmcgKGBpbmNvbWluZ19zdGF0ZWAsIGBpbmNvbWluZ19saXN0ZW5lcmAsIGBpbmNvbWluZ193b3JrYCkgZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBkdXJpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBsaXN0ZW5lciBzb2NrZXQgdGVhcmRvd24uIEFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHVwb24gc29ja2V0IGNyZWF0aW9uLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgZnVuY3Rpb24gdG8gc2VuZCBhIERNIHJlc3BvbnNlIChgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgKSwgd2hpY2ggYWxsb2NhdGVzIGEgbmV3IHNrYiBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplcyBhbGwgaXRzIGJ5dGVzIChMTEMgaGVhZGVyIGFuZCBNQUMgaGVhZGVyKSBiZWZvcmUgdHJhbnNtaXNzaW9uLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQgdG8gdGhlIG5ldHdvcmsuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBidWcgaW4gdGhlIExMQyBwcm90b2NvbCBieSBpbnRyb2R1Y2luZyBzdGF0ZSB0cmFja2luZyAoYGluY29taW5nX3N0YXRlYCwgYGluY29taW5nX2xpc3RlbmVyYCwgYGluY29taW5nX3dvcmtgKSBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpc3RlbmVyIHNvY2tldCB0ZWFyZG93bi4gQWxsIG5ld2x5IGludHJvZHVjZWQgc3RydWN0IGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBmdW5jdGlvbiB0byBzZW5kIGEgRE0gcmVzcG9uc2UgKGBsbGNfY29ubl9zZW5kX2RtX3JzcGApLCB3aGljaCBhbGxvY2F0ZXMgYSBuZXcgc2tiIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBpdHMgYnl0ZXMgKExMQyBoZWFkZXIgYW5kIE1BQyBoZWFkZXIpIGJlZm9yZSB0cmFuc21pc3Npb24sIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZCB0byB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowwkssh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 08:58:42 +0000 UTC FinishedAt: 2026-08-27 09:38:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LLC2" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LLC2" ], "series_id": "83773eea-ba88-4f19-aba7-4fa98dfc7112" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "llc_release_incoming_sock", "llc_accept_incoming_sock", "llc_release_incoming_children", "llc_conn_handler" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMTEMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfYWNjZXB0X2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBpbiB0aGUgTExDIHByb3RvY29sIGJ5IGludHJvZHVjaW5nIHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBgaW5jb21pbmdfd29ya2ApIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGlzdGVuZXIgc29ja2V0IHRlYXJkb3duLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIGZ1bmN0aW9uIHRvIHNlbmQgYSBETSByZXNwb25zZSAoYGxsY19jb25uX3NlbmRfZG1fcnNwYCksIHdoaWNoIGFsbG9jYXRlcyBhIG5ldyBza2IgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGl0cyBieXRlcyAoTExDIGhlYWRlciBhbmQgTUFDIGhlYWRlcikgYmVmb3JlIHRyYW5zbWlzc2lvbiwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkIHRvIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgTExDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cyBhbmQgbmV0d29yayB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTAzMjlkNTNhY2M3MDU2YmU2MzQwN2ZkY2UyYjg0ZWZmNDc2MTNjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA5OjEzOjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5pbmRleCBlMWEzMDI2OTY3MjM0Li5lODAwM2RiMTEwYWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICAqIFx0XHQgMjAwMSwgMjAwMiBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gXHUwMDNjYWNtZUBjb25lY3RpdmEuY29tLmJyXHUwMDNlXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfaWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGMuaFx1MDAzZVxuQEAgLTEzLDYgJiM0MzsxNCwxMCBAQFxuICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyXG4gXG4mIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDBcbiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfUEVORElORyAgICAgMVxuJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyXG4mIzQzO1xuICNkZWZpbmUgTExDMl9QX1RJTUUgICAgICAgICAgICAgICAyXG4gI2RlZmluZSBMTEMyX0FDS19USU1FICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgM1xuQEAgLTcyLDYgJiM0Mzs3Nyw5IEBAIHN0cnVjdCBsbGNfc29jayB7XG4gXHRcdFx0XHRcdCAgICAgIHJlY2VpdmVkIGFuZCBjYXVzZWQgc2VuZGluZyBGUk1SLlxuIFx0XHRcdFx0XHQgICAgICBVc2VkIGZvciByZXNlbmRpbmcgRlJNUiAqL1xuIFx0dTMyXHRcdCAgICBjbXNnX2ZsYWdzO1xuJiM0MztcdGF0b21pY190XHQgICAgaW5jb21pbmdfc3RhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2tcdCAgICAqaW5jb21pbmdfbGlzdGVuZXI7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IGluY29taW5nX3dvcms7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7XG4gfTtcbiBcbkBAIC05Myw3ICYjNDM7MTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0XHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xuIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7XG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcbiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4mIzQzO2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4mIzQzO3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKTtcbiBcbiB2b2lkIGxsY19za19yZXNldChzdHJ1Y3Qgc29jayAqc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jXG5pbmRleCBiMDQ0N2MzM2RiZjA5Li5lODA1NDgwOWNmMGNmIDEwMDY0NFxuLS0tIGEvbmV0L2xsYy9hZl9sbGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2xsYy9hZl9sbGMuY1xuQEAgLTI3LDYgJiM0MzsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19zYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfcGR1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2Nvbm4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2Nfc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2VcbiBcbiAvKiByZW1lbWJlcjogdW5pbml0aWFsaXplZCBnbG9iYWwgZGF0YSBpcyB6ZXJvZWQgYmVjYXVzZSBpdHMgaW4gLmJzcyAqL1xuQEAgLTE5Niw2ICYjNDM7MTk3LDcgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYztcbiYjNDM7XHRib29sIGxpc3RlbmVyO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrID09IE5VTEwpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0yMDYsNiAmIzQzOzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdFx0bGxjLVx1MDAzZWxhZGRyLmxzYXAsIGxsYy1cdTAwM2VkYWRkci5sc2FwKTtcbiBcdGlmICghbGxjX3NlbmRfZGlzYyhzaykpXG4gXHRcdGxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2dGltZW8pKTtcbiYjNDM7XHRsaXN0ZW5lciA9IHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU47XG4mIzQzO1x0aWYgKGxpc3RlbmVyKVxuJiM0MztcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbiBcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHtcbiBcdFx0c3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy1cdTAwM2VzYXA7XG4gXG5AQCAtMjE0LDE2ICYjNDM7MjE5LDE4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdFx0ICovXG4gXHRcdGxsY19zYXBfaG9sZChzYXApO1xuIFx0XHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVx1MDAzZXNhcCwgc2spO1xuJiM0MztcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRsbGNfc2FwX3B1dChzYXApO1xuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdH1cbiBcdG5ldGRldl9wdXQobGxjLVx1MDAzZWRldiwgXHUwMDI2bGxjLVx1MDAzZWRldl90cmFja2VyKTtcbiBcdHNvY2tfcHV0KHNrKTtcbiBcdHNvY2tfb3JwaGFuKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0bGxjX3NrX2ZyZWUoc2spO1xuJiM0MztcdGxsY19za19mcmVlKHNrLCB0cnVlKTtcbiBvdXQ6XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNzIyLDYgJiM0Mzs3MjksMTcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdGdvdG8gZnJlZXM7XG4gXHRyYyA9IDA7XG4gXHRuZXdzayA9IHNrYi1cdTAwM2VzaztcbiYjNDM7XHRsb2NrX3NvY2tfbmVzdGVkKG5ld3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1x0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSB8fFxuJiM0MztcdCAgICAhbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKSkge1xuJiM0MztcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4mIzQzO1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdFx0cmVsZWFzZV9zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdHNvY2tfcHV0KG5ld3NrKTtcbiYjNDM7XHRcdHJjID0gLUVDT05OQUJPUlRFRDtcbiYjNDM7XHRcdGdvdG8gZnJlZXM7XG4mIzQzO1x0fVxuIFx0LyogYXR0YWNoIGNvbm5lY3Rpb24gdG8gYSBuZXcgc29ja2V0LiAqL1xuIFx0bGxjX3VpX3NrX2luaXQobmV3c29jaywgbmV3c2spO1xuIFx0c29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7XG5AQCAtNzM3LDYgJiM0Mzs3NTUsOCBAQCBzdGF0aWMgaW50IGxsY191aV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdHNrX2FjY2VwdHFfcmVtb3ZlZChzayk7XG4gXHRkcHJpbnRrKFwmIzM0OyVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0bGxjX3NrKHNrKS1cdTAwM2VhZGRyLnNsbGNfc2FwLCBuZXdsbGMtXHUwMDNlZGFkZHIubHNhcCk7XG4mIzQzO1x0cmVsZWFzZV9zb2NrKG5ld3NrKTtcbiYjNDM7XHRzb2NrX3B1dChuZXdzayk7XG4gZnJlZXM6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jXG5pbmRleCAyNjA0NjBkNTBmNTRjLi40YTM0ZjI0MGFkMmNjIDEwMDY0NFxuLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2xsY19jb25uLmNcbkBAIC0zMiw2ICYjNDM7MzIsNyBAQCBzdGF0aWMgaW50IGxsY19leGVjX2Nvbm5fdHJhbnNfYWN0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zICpsbGNfcXVhbGlmeV9jb25uX2V2KHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gXG4gLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqL1xuIHN0YXRpYyBpbnQgbGxjX29mZnNldF90YWJsZVtOQlJfQ09OTl9TVEFURVNdW05CUl9DT05OX0VWXTtcbkBAIC04OCw2ICYjNDM7ODksMTMgQEAgaW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQgKiBza2ItXHUwMDNlc2sgcG9pbnRpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgaW5cbiBcdFx0ICogbGxjX2Nvbm5faGFuZGxlci4gLWFjbWVcbiBcdFx0ICovXG4mIzQzO1x0XHRpZiAoc2sgIT0gc2tiLVx1MDAzZXNrIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4mIzQzO1x0XHRcdHNvY2tfaG9sZChza2ItXHUwMDNlc2spO1xuJiM0MztcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlLFxuJiM0MztcdFx0XHRcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpO1xuJiM0MztcdFx0fVxuIFx0XHRza2JfZ2V0KHNrYik7XG4gXHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG5AQCAtMzU0LDcgJiM0MzszNjIsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFx0aW50IHJjID0gMTtcbiBcbi1cdGlmIChsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcbiYjNDM7XHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0gfHxcbiYjNDM7XHQgICAgbGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4gXHRcdGdvdG8gb3V0O1xuIFx0cmMgPSAwO1xuIFx0dHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpO1xuQEAgLTc2NSwyNyAmIzQzOzc3NCwxNjIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0bWVtY3B5KFx1MDAyNm5ld2xsYy1cdTAwM2VsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtXHUwMDNlbGFkZHIpKTtcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlZGFkZHIsIHNhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWRhZGRyKSk7XG4gXHRuZXdsbGMtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdG5ld2xsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lciA9IHNrO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2bmV3bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfUEVORElORyk7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNm5ld2xsYy1cdTAwM2VpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTtcbiYjNDM7XHRzb2NrX2hvbGQoc2spO1xuIFx0ZGV2X2hvbGQoZGV2KTtcbiBcdGxsY19zYXBfYWRkX3NvY2tldChsbGMtXHUwMDNlc2FwLCBuZXdzayk7XG4gb3V0OlxuIFx0cmV0dXJuIG5ld3NrO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBpbmNvbWluZ193b3JrKTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZsbGMtXHUwMDNlc2s7XG4mIzQzO1x0c3RydWN0IHNvY2sgKmxpc3RlbmVyID0gbGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuJiM0MztcbiYjNDM7XHRsb2NrX3NvY2sobGlzdGVuZXIpO1xuJiM0MztcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiYjNDM7XHRsbGNfc2tfZnJlZShzaywgZmFsc2UpO1xuJiM0MztcdHNvY2tfb3JwaGFuKHNrKTtcbiYjNDM7XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuJiM0MztcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4mIzQzO1x0ZGV2X3B1dChsbGMtXHUwMDNlZGV2KTtcbiYjNDM7XHRsbGMtXHUwMDNlZGV2ID0gTlVMTDtcbiYjNDM7XHRzb2NrX3B1dChzayk7XG4mIzQzO1x0c29ja19wdXQobGlzdGVuZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuJiM0MztcbiYjNDM7XHRpZiAoYXRvbWljX3hjaGcoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT1cbiYjNDM7XHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UobGxjLVx1MDAzZXN0YXRlLCBMTENfQ09OTl9PVVRfT0ZfU1ZDKTtcbiYjNDM7XHRzb2NrX2hvbGQoc2spO1xuJiM0MztcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4mIzQzO1x0c2NoZWR1bGVfd29yayhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCxcbiYjNDM7XHRcdFx0XHQgIExMQ19JTkNPTUlOR19OT05FKSAhPSBMTENfSU5DT01JTkdfUVVFVUVEKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzb2NrX3B1dChsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXIpO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSkge1xuJiM0MztcdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjYgbmV3c2sgIT0gc2spIHtcbiYjNDM7XHRcdFx0aW50IGluY29taW5nX3N0YXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4mIzQzO1x0XHRcdGluY29taW5nX3N0YXRlID1cbiYjNDM7XHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKTtcbiYjNDM7XHRcdFx0aWYgKGluY29taW5nX3N0YXRlICE9IExMQ19JTkNPTUlOR19OT05FKSB7XG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdFx0aWYgKGluY29taW5nX3N0YXRlID09IExMQ19JTkNPTUlOR19RVUVVRUQpXG4mIzQzO1x0XHRcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlclxuJiM0MzsgKiBhZGRyZXNzIGluIGxsYy1cdTAwM2VkYWRkciB5ZXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpuc2tiO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG4mIzQzO1x0aWYgKCFuc2tiKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbiYjNDM7XHRcdFx0ICAgIHNhZGRyLVx1MDAzZWxzYXAsIExMQ19QRFVfUlNQKTtcbiYjNDM7XHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbiYjNDM7XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbiYjNDM7XHRpZiAodW5saWtlbHkocmMpKVxuJiM0MztcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRldl9xdWV1ZV94bWl0KG5za2IpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrLCAqbmV3c2sgPSBOVUxMO1xuJiM0MztcdGJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuJiM0MztcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXHUwMDI2c2FkZHIubHNhcCk7XG4gXHRsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgXHUwMDI2ZGFkZHIubHNhcCk7XG4gXG4mIzQzO2xvb2t1cDpcbiBcdHNrID0gX19sbGNfbG9va3VwKHNhcCwgXHUwMDI2c2FkZHIsIFx1MDAyNmRhZGRyLCBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpKTtcbiBcdGlmICghc2spXG4gXHRcdGdvdG8gZHJvcDtcbiBcbiYjNDM7XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdG5ld3NrID0gc2s7XG4mIzQzO1x0XHRiaF9sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4mIzQzO1x0XHRcdG5ld3NrID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBsb29rdXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzayA9IGxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XG4mIzQzO1x0XHRzb2NrX2hvbGQoc2spO1xuJiM0MztcdFx0bmV3c2tfbG9va3VwX3JlZiA9IHRydWU7XG4mIzQzO1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGJoX2xvY2tfc29jayhzayk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXG4mIzQzO1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdGlmIChuZXdza19sb29rdXBfcmVmKSB7XG4mIzQzO1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbiYjNDM7XHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4mIzQzO1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbiYjNDM7XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbiYjNDM7XHRcdFx0Z290byByZXRyeV91bmxvY2s7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuJiM0MztcdFx0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHtcbiYjNDM7XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFx0LypcbiBcdCAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtXHUwMDNlYWNjZXB0XG4gXHQgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczpcbkBAIC03OTUsMTAgJiM0Mzs5MzksMjUgQEAgdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHQgKiBpbiB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBwcml2YXRlIGFyZWEuIC1hY21lXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkge1xuLVx0XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZzYWRkciwgXHUwMDI2ZGFkZHIpO1xuLVx0XHRpZiAoIW5ld3NrKVxuLVx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHRpZiAoIW5ld3NrKSB7XG4mIzQzO1x0XHRcdGlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuJiM0MztcdFx0XHRcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuJiM0MztcdFx0XHRcdFx0dTggZl9iaXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0bGxjX3BkdV9kZWNvZGVfcGZfYml0KHNrYiwgXHUwMDI2Zl9iaXQpO1xuJiM0MztcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCBmX2JpdCk7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XG4mIzQzO1x0XHRcdFx0XHRsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgXHUwMDI2c2FkZHIsIDEpO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdG5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LCBcdTAwMjZzYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdFx0XHRpZiAoIW5ld3NrKVxuJiM0MztcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0XHRuZXdza19sb2NrZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuIFx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuQEAgLTgxMywxOCAmIzQzOzk3Miw0OSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZXNrID0gc2s7XG4gXHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja19lZnJlZTtcbiBcdH1cbi1cdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbiYjNDM7XHRpZiAodW5saWtlbHkobGxjX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkpIHtcbiYjNDM7XHRcdGlmIChuZXdzaykge1xuJiM0MztcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuJiM0MztcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdFx0fSBlbHNlIGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0XHQgICBMTENfSU5DT01JTkdfUEVORElORykge1xuJiM0MztcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xuIFx0XHRsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4tXHRlbHNlIHtcbiYjNDM7XHRcdGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuJiM0MztcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuJiM0MztcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRkcHJpbnRrKFwmIzM0OyVzOiBhZGRpbmcgdG8gYmFja2xvZy4uLlxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpO1xuLVx0XHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpKVxuJiM0MztcdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSkge1xuJiM0MztcdFx0XHRpZiAobmV3c2spXG4mIzQzO1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4gXHRcdFx0Z290byBkcm9wX3VubG9jaztcbiYjNDM7XHRcdH1cbiBcdH1cbiBvdXQ6XG4mIzQzO1x0aWYgKG5ld3NrX2xvY2tlZClcbiYjNDM7XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiBcdGJoX3VubG9ja19zb2NrKHNrKTtcbiBcdHNvY2tfcHV0KHNrKTtcbiYjNDM7XHRpZiAobmV3c2tfbG9va3VwX3JlZilcbiYjNDM7XHRcdHNvY2tfcHV0KG5ld3NrKTtcbiBcdHJldHVybjtcbiYjNDM7cmV0cnlfdW5sb2NrOlxuJiM0MztcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRuZXdza19sb2NrZWQgPSBmYWxzZTtcbiYjNDM7XHRiaF91bmxvY2tfc29jayhzayk7XG4mIzQzO1x0c29ja19wdXQoc2spO1xuJiM0MztcdHNvY2tfcHV0KG5ld3NrKTtcbiYjNDM7XHRuZXdzayA9IE5VTEw7XG4mIzQzO1x0bmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuJiM0MztcdGdvdG8gbG9va3VwO1xuIGRyb3A6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybjtcbkBAIC04NTIsMTIgJiM0MzsxMDQyLDUyIEBAIHN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRpbnQgcmMgPSAwO1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuJiM0MztcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cdTAwM2VzaztcbiBcbiBcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XG4tXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgLyogbm90IGNsb3NlZCAqL1xuJiM0MztcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4mIzQzO1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbiYjNDM7XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbiYjNDM7XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4mIzQzO1x0XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuJiM0MztcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHRcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHxcbiYjNDM7XHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcbiYjNDM7XHRcdFx0ICAgIGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkge1xuJiM0MztcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdFx0ZWxzZVxuJiM0MztcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuJiM0MztcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4mIzQzO1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbiYjNDM7XHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCkge1xuJiM0MztcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4mIzQzO1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0XHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XG4mIzQzO1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcbiYjNDM7XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiM0MztcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpIHtcbiYjNDM7XHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdH1cbiBcdH0gZWxzZSBpZiAobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19FVkVOVCkge1xuIFx0XHQvKiB0aW1lciBleHBpcmF0aW9uIGV2ZW50ICovXG4gXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cbkBAIC04NzAsNiAmIzQzOzExMDAsMjMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIG91dDpcbiBcdHJldHVybiByYztcbiYjNDM7cmV0cnk6XG4mIzQzO1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4mIzQzO1x0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbiYjNDM7XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuJiM0MztcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNlPSBMTENfQ09OTl9TVEFURV9BRE0pXG4mIzQzO1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xuJiM0MztcdFx0ZWxzZSB7XG4mIzQzO1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbiYjNDM7XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbiBvdXRfa2ZyZWVfc2tiOlxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRnb3RvIG91dDtcbkBAIC05NjAsMTYgJiM0MzsxMjA3LDE3IEBAIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcbiAvKipcbiAgKlx0bGxjX3NrX2ZyZWUgLSBGcmVlcyBhIExMQyBzb2NrZXRcbiAgKlx0QHNrOiAtIHNvY2tldCB0byBmcmVlXG4mIzQzOyAqXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXG4gICpcbiAgKlx0RnJlZXMgYSBMTEMgc29ja2V0XG4gICovXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4ge1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFxuIFx0bGxjLVx1MDAzZXN0YXRlID0gTExDX0NPTk5fT1VUX09GX1NWQztcbiBcdC8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi9cbi1cdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xuJiM0MztcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xuICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQ1xuIFx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDslczogdW5hY2txPSVkLCB0eHE9JWRcXG5cJiMzNDssIF9fZnVuY19fLFxuIFx0XHRza2JfcXVldWVfbGVuKFx1MDAyNmxsYy1cdTAwM2VwZHVfdW5hY2tfcSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMTEMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfYWNjZXB0X2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4mIzM0OywKICAgICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgYW5kIHdvcmtxdWV1ZSBmb3IgaGFuZGxpbmcgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHRvIGZpeCByYWNlIGNvbmRpdGlvbnMgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHRoZSBjb3JlIExMQyBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUEZfTExDIHNvY2tldHMgYW5kIG5ldHdvcmsgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwMzI5ZDUzYWNjNzA1NmJlNjM0MDdmZGNlMmI4NGVmZjQ3NjEzY2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwOToxMzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCmluZGV4IGUxYTMwMjY5NjcyMzQuLmU4MDAzZGIxMTBhZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaApAQCAtNiw2ICYjNDM7Niw3IEBACiAgKiAJCSAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyAmbHQ7YWNtZUBjb25lY3RpdmEuY29tLmJyJmd0OwogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2xsY19pZi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGxjLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsMTAgQEAKICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDIKIAomIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDAKJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19QRU5ESU5HICAgICAxCiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfUVVFVUVEICAgICAgMgomIzQzOwogI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDIKICNkZWZpbmUgTExDMl9BQ0tfVElNRSAgICAgICAgICAgICAxCiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgMwpAQCAtNzIsNiAmIzQzOzc3LDkgQEAgc3RydWN0IGxsY19zb2NrIHsKIAkJCQkJICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuCiAJCQkJCSAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovCiAJdTMyCQkgICAgY21zZ19mbGFnczsKJiM0MzsJYXRvbWljX3QJICAgIGluY29taW5nX3N0YXRlOwomIzQzOwlzdHJ1Y3Qgc29jawkgICAgKmluY29taW5nX2xpc3RlbmVyOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5jb21pbmdfd29yazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7CiB9OwogCkBAIC05Myw3ICYjNDM7MTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LAogCQkJICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTsKIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7Ci12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7dm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7CiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7Ym9vbCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzayk7CiAKIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IGIwNDQ3YzMzZGJmMDkuLmU4MDU0ODA5Y2YwY2YgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvbGxjX3NhcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9sbGNfcGR1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2xsY19jb25uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9sbGNfY19zdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3Bfc3RhdGVzLmgmZ3Q7CiAKIC8qIHJlbWVtYmVyOiB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIGlzIHplcm9lZCBiZWNhdXNlIGl0cyBpbiAuYnNzICovCkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLSZndDtzazsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYzsKJiM0MzsJYm9vbCBsaXN0ZW5lcjsKIAogCWlmICh1bmxpa2VseShzayA9PSBOVUxMKSkKIAkJZ290byBvdXQ7CkBAIC0yMDYsNiAmIzQzOzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAkJbGxjLSZndDtsYWRkci5sc2FwLCBsbGMtJmd0O2RhZGRyLmxzYXApOwogCWlmICghbGxjX3NlbmRfZGlzYyhzaykpCiAJCWxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdnRpbWVvKSk7CiYjNDM7CWxpc3RlbmVyID0gc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU47CiYjNDM7CWlmIChsaXN0ZW5lcikKJiM0MzsJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLSZndDtzYXA7CiAKQEAgLTIxNCwxNiAmIzQzOzIxOSwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJCSAqLwogCQlsbGNfc2FwX2hvbGQoc2FwKTsKIAkJbGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy0mZ3Q7c2FwLCBzayk7CiYjNDM7CQlsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCWxsY19zYXBfcHV0KHNhcCk7CiAJfSBlbHNlIHsKJiM0MzsJCWxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAl9CiAJbmV0ZGV2X3B1dChsbGMtJmd0O2RldiwgJmFtcDtsbGMtJmd0O2Rldl90cmFja2VyKTsKIAlzb2NrX3B1dChzayk7CiAJc29ja19vcnBoYW4oc2spOwogCXNvY2stJmd0O3NrID0gTlVMTDsKLQlsbGNfc2tfZnJlZShzayk7CiYjNDM7CWxsY19za19mcmVlKHNrLCB0cnVlKTsKIG91dDoKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMiw2ICYjNDM7NzI5LDE3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCQlnb3RvIGZyZWVzOwogCXJjID0gMDsKIAluZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CWxvY2tfc29ja19uZXN0ZWQobmV3c2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJaWYgKGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICAhbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKSkgewomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX05PTkUpCiYjNDM7CQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQlyZWxlYXNlX3NvY2sobmV3c2spOwomIzQzOwkJc29ja19wdXQobmV3c2spOwomIzQzOwkJcmMgPSAtRUNPTk5BQk9SVEVEOwomIzQzOwkJZ290byBmcmVlczsKJiM0MzsJfQogCS8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi8KIAlsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7CiAJc29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7CkBAIC03MzcsNiAmIzQzOzc1NSw4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCXNrX2FjY2VwdHFfcmVtb3ZlZChzayk7CiAJZHByaW50aygmIzM0OyVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXG4mIzM0OywgX19mdW5jX18sCiAJCWxsY19zayhzayktJmd0O2FkZHIuc2xsY19zYXAsIG5ld2xsYy0mZ3Q7ZGFkZHIubHNhcCk7CiYjNDM7CXJlbGVhc2Vfc29jayhuZXdzayk7CiYjNDM7CXNvY2tfcHV0KG5ld3NrKTsKIGZyZWVzOgogCWtmcmVlX3NrYihza2IpOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jCmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjRhMzRmMjQwYWQyY2MgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2xsY19jb25uLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBAIHN0YXRpYyBpbnQgbGxjX2V4ZWNfY29ubl90cmFuc19hY3Rpb25zKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgKmxsY19xdWFsaWZ5X2Nvbm5fZXYoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqLwogc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdOwpAQCAtODgsNiAmIzQzOzg5LDEzIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJICogc2tiLSZndDtzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpbgogCQkgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZQogCQkgKi8KJiM0MzsJCWlmIChzayAhPSBza2ItJmd0O3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCQlzb2NrX2hvbGQoc2tiLSZndDtzayk7CiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUsCiYjNDM7CQkJCSAgIExMQ19JTkNPTUlOR19RVUVVRUQpOwomIzQzOwkJfQogCQlza2JfZ2V0KHNrYik7CiAJCXNrYl9xdWV1ZV90YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwpAQCAtMzU0LDcgJiM0MzszNjIsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAlpbnQgcmMgPSAxOwogCi0JaWYgKGxsYy0mZ3Q7c3RhdGUgJmd0OyBOQlJfQ09OTl9TVEFURVMpCiYjNDM7CWlmIChsbGMtJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICBsbGMtJmd0O3N0YXRlICZndDsgTkJSX0NPTk5fU1RBVEVTKQogCQlnb3RvIG91dDsKIAlyYyA9IDA7CiAJdHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpOwpAQCAtNzY1LDI3ICYjNDM7Nzc0LDE2MiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtJmd0O2xhZGRyKSk7CiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtJmd0O2RhZGRyKSk7CiAJbmV3bGxjLSZndDtkZXYgPSBkZXY7CiYjNDM7CW5ld2xsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXIgPSBzazsKJiM0MzsJYXRvbWljX3NldCgmYW1wO25ld2xsYy0mZ3Q7aW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bmV3bGxjLSZndDtpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTsKJiM0MzsJc29ja19ob2xkKHNrKTsKIAlkZXZfaG9sZChkZXYpOwogCWxsY19zYXBfYWRkX3NvY2tldChsbGMtJmd0O3NhcCwgbmV3c2spOwogb3V0OgogCXJldHVybiBuZXdzazsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLAomIzQzOwkJCQkJCSAgICBpbmNvbWluZ193b3JrKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtsbGMtJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqbGlzdGVuZXIgPSBsbGMtJmd0O2luY29taW5nX2xpc3RlbmVyOwomIzQzOwomIzQzOwlsb2NrX3NvY2sobGlzdGVuZXIpOwomIzQzOwlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiYjNDM7CWxsY19za19mcmVlKHNrLCBmYWxzZSk7CiYjNDM7CXNvY2tfb3JwaGFuKHNrKTsKJiM0MzsJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7CiYjNDM7CXJlbGVhc2Vfc29jayhsaXN0ZW5lcik7CiYjNDM7CWRldl9wdXQobGxjLSZndDtkZXYpOwomIzQzOwlsbGMtJmd0O2RldiA9IE5VTEw7CiYjNDM7CXNvY2tfcHV0KHNrKTsKJiM0MzsJc29ja19wdXQobGlzdGVuZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwomIzQzOwlpZiAoYXRvbWljX3hjaGcoJmFtcDtsbGMtJmd0O2luY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGxsYy0mZ3Q7c3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpOwomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwlsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLSZndDtzYXAsIHNrKTsKJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2xsYy0mZ3Q7aW5jb21pbmdfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7bGxjLSZndDtpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCwKJiM0MzsJCQkJICBMTENfSU5DT01JTkdfTk9ORSkgIT0gTExDX0lOQ09NSU5HX1FVRVVFRCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc29ja19wdXQobGxjLSZndDtpbmNvbWluZ19saXN0ZW5lcik7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkpIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CiYjNDM7CQlpZiAobmV3c2sgJmFtcDsmYW1wOyBuZXdzayAhPSBzaykgewomIzQzOwkJCWludCBpbmNvbWluZ19zdGF0ZTsKJiM0MzsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpbmNvbWluZ19zdGF0ZSA9CiYjNDM7CQkJCWF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpOwomIzQzOwkJCWlmIChpbmNvbWluZ19zdGF0ZSAhPSBMTENfSU5DT01JTkdfTk9ORSkgewomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQkJaWYgKGluY29taW5nX3N0YXRlID09IExMQ19JTkNPTUlOR19RVUVVRUQpCiYjNDM7CQkJCQlzb2NrX3B1dChuZXdzayk7CiYjNDM7CQkJfQomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCX0KJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwl9CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoaXMgbWlycm9ycyB0aGUgQURNLXN0YXRlIERNIGFjdGlvbnMsIGJ1dCBhIGxpc3RlbmVyIGhhcyBubyBwZWVyCiYjNDM7ICogYWRkcmVzcyBpbiBsbGMtJmd0O2RhZGRyIHlldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgc3RydWN0IGxsY19hZGRyICpzYWRkciwgdTggZl9iaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi0mZ3Q7ZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7CiYjNDM7CWlmICghbnNrYikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLSZndDtsYWRkci5sc2FwLAomIzQzOwkJCSAgICBzYWRkci0mZ3Q7bHNhcCwgTExDX1BEVV9SU1ApOwomIzQzOwlsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTsKJiM0MzsJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi0mZ3Q7ZGV2LSZndDtkZXZfYWRkciwgc2FkZHItJmd0O21hYyk7CiYjNDM7CWlmICh1bmxpa2VseShyYykpCiYjNDM7CQlrZnJlZV9za2IobnNrYik7CiYjNDM7CWVsc2UKJiM0MzsJCWRldl9xdWV1ZV94bWl0KG5za2IpOwomIzQzO30KJiM0MzsKIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7Ci0Jc3RydWN0IHNvY2sgKnNrOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2ssICpuZXdzayA9IE5VTEw7CiYjNDM7CWJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlib29sIG5ld3NrX2xvY2tlZCA9IGZhbHNlOwogCiAJbGxjX3BkdV9kZWNvZGVfc2Eoc2tiLCBzYWRkci5tYWMpOwogCWxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCAmYW1wO3NhZGRyLmxzYXApOwogCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTsKIAlsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgJmFtcDtkYWRkci5sc2FwKTsKIAomIzQzO2xvb2t1cDoKIAlzayA9IF9fbGxjX2xvb2t1cChzYXAsICZhbXA7c2FkZHIsICZhbXA7ZGFkZHIsIGRldl9uZXQoc2tiLSZndDtkZXYpKTsKIAlpZiAoIXNrKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKHNrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJbmV3c2sgPSBzazsKJiM0MzsJCWJoX2xvY2tfc29jayhuZXdzayk7CiYjNDM7CQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgIT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlzb2NrX3B1dChuZXdzayk7CiYjNDM7CQkJbmV3c2sgPSBOVUxMOwomIzQzOwkJCWdvdG8gbG9va3VwOwomIzQzOwkJfQomIzQzOwkJc2sgPSBsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19saXN0ZW5lcjsKJiM0MzsJCXNvY2tfaG9sZChzayk7CiYjNDM7CQluZXdza19sb29rdXBfcmVmID0gdHJ1ZTsKJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJfQomIzQzOwogCWJoX2xvY2tfc29jayhzayk7CiYjNDM7CWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpCiYjNDM7CQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwlpZiAobmV3c2tfbG9va3VwX3JlZikgewomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQluZXdza19sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJZ290byByZXRyeV91bmxvY2s7CiYjNDM7CQlpZiAodW5saWtlbHkoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gfHwKJiM0MzsJCQkgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHsKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJfQomIzQzOwl9CiAJLyoKIAkgKiBUaGlzIGhhcyB0byBiZSBkb25lIGhlcmUgYW5kIG5vdCBhdCB0aGUgdXBwZXIgbGF5ZXIgLSZndDthY2NlcHQKIAkgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczoKQEAgLTc5NSwxMCAmIzQzOzkzOSwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkgKiBpbiB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBwcml2YXRlIGFyZWEuIC1hY21lCiAJICovCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkgewotCQlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi0mZ3Q7ZGV2LAotCQkJCQkJCSAgICAgICZhbXA7c2FkZHIsICZhbXA7ZGFkZHIpOwotCQlpZiAoIW5ld3NrKQotCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCWlmICghbmV3c2spIHsKJiM0MzsJCQlpZiAobGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHsKJiM0MzsJCQkJaWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7CiYjNDM7CQkJCQl1OCBmX2JpdDsKJiM0MzsKJiM0MzsJCQkJCWxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsICZhbXA7Zl9iaXQpOwomIzQzOwkJCQkJbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsICZhbXA7c2FkZHIsIGZfYml0KTsKJiM0MzsJCQkJfSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7CiYjNDM7CQkJCQlsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgJmFtcDtzYWRkciwgMSk7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCQl9CiYjNDM7CQkJbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi0mZ3Q7ZGV2LCAmYW1wO3NhZGRyLAomIzQzOwkJCQkJCQkgJmFtcDtkYWRkcik7CiYjNDM7CQkJaWYgKCFuZXdzaykKJiM0MzsJCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQluZXdza19sb2NrZWQgPSB0cnVlOwomIzQzOwkJfQogCQlza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTgxMywxOCAmIzQzOzk3Miw0OSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJc2tiLSZndDtzayA9IHNrOwogCQlza2ItJmd0O2Rlc3RydWN0b3IgPSBzb2NrX2VmcmVlOwogCX0KLQlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpCiYjNDM7CWlmICh1bmxpa2VseShsbGNfc2soc2tiLSZndDtzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSkgewomIzQzOwkJaWYgKG5ld3NrKSB7CiYjNDM7CQkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2soc2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spOwomIzQzOwkJfQomIzQzOwkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKIAkJbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwotCWVsc2UgewomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwl9IGVsc2UgewogCQlkcHJpbnRrKCYjMzQ7JXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXG4mIzM0OywgX19mdW5jX18pOwogCQlsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpOwotCQlpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSkKJiM0MzsJCWlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKSB7CiYjNDM7CQkJaWYgKG5ld3NrKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQl9CiAJfQogb3V0OgomIzQzOwlpZiAobmV3c2tfbG9ja2VkKQomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlzb2NrX3B1dChzayk7CiYjNDM7CWlmIChuZXdza19sb29rdXBfcmVmKQomIzQzOwkJc29ja19wdXQobmV3c2spOwogCXJldHVybjsKJiM0MztyZXRyeV91bmxvY2s6CiYjNDM7CWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJbmV3c2tfbG9ja2VkID0gZmFsc2U7CiYjNDM7CWJoX3VubG9ja19zb2NrKHNrKTsKJiM0MzsJc29ja19wdXQoc2spOwomIzQzOwlzb2NrX3B1dChuZXdzayk7CiYjNDM7CW5ld3NrID0gTlVMTDsKJiM0MzsJbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlnb3RvIGxvb2t1cDsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuOwpAQCAtODUyLDEyICYjNDM7MTA0Miw1MiBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiYjNDM7CXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiAKIAlpZiAobGlrZWx5KGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfUEFDS0VUKSkgewotCQlpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgLyogbm90IGNsb3NlZCAqLwomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIHJldHJ5OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8CiYjNDM7CQkJICAgIHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8CiYjNDM7CQkJICAgIGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSB7CiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQkJfQogCQkJcmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7Ci0JCWVsc2UKJiM0MzsJCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCX0gZWxzZSBpZiAobmV3c2sgJmFtcDsmYW1wOwomIzQzOwkJCSAgIGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmx0OyBMTENfQ09OTl9TVEFURV9BRE0pIHsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJCX0KJiM0MzsJCQlyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQl9IGVsc2UgaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpIHsKJiM0MzsJCQlyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTsKJiM0MzsJCX0gZWxzZSB7CiAJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQl9CiAJfSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7CiAJCS8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi8KIAkJaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpICAvKiBub3QgY2xvc2VkICovCkBAIC04NzAsNiAmIzQzOzExMDAsMjMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIG91dDoKIAlyZXR1cm4gcmM7CiYjNDM7cmV0cnk6CiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmd0Oz0gTExDX0NPTk5fU1RBVEVfQURNKQomIzQzOwkJCXJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKJiM0MzsJCX0KJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfa2ZyZWVfc2tiOwogb3V0X2tmcmVlX3NrYjoKIAlrZnJlZV9za2Ioc2tiKTsKIAlnb3RvIG91dDsKQEAgLTk2MCwxNiAmIzQzOzEyMDcsMTcgQEAgdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogLyoqCiAgKglsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldAogICoJQHNrOiAtIHNvY2tldCB0byBmcmVlCiYjNDM7ICoJQHN5bmM6IHdoZXRoZXIgdG8gc3luY2hyb25vdXNseSBzdG9wIHRpbWVycwogICoKICAqCUZyZWVzIGEgTExDIHNvY2tldAogICovCi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogewogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAogCWxsYy0mZ3Q7c3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDOwogCS8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi8KLQlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgc3luYyk7CiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0MKIAlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXM6IHVuYWNrcT0lZCwgdHhxPSVkXG4mIzM0OywgX19mdW5jX18sCiAJCXNrYl9xdWV1ZV9sZW4oJmFtcDtsbGMtJmd0O3BkdV91bmFja19xKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9sbGMvYWZfbGxjLmNgLCBgbmV0L2xsYy9sbGNfY29ubi5jYCwgYW5kIGBpbmNsdWRlL25ldC9sbGNfY29ubi5oYCBpbW1lZGlhdGVseSBzaWduYWxzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHRoZSBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBzdGF0ZSBtYWNoaW5lIChgaW5jb21pbmdfc3RhdGVgKSwgYSB3b3JrcXVldWUgKGBpbmNvbWluZ193b3JrYCksIGFuZCBtb2RpZmljYXRpb25zIHRvIGNvbm5lY3Rpb24gaGFuZGxpbmcgZnVuY3Rpb25zIChgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBgbGxjX3VpX2FjY2VwdGAsIGBsbGNfdWlfcmVsZWFzZWApIHN0cm9uZ2x5IHN1Z2dlc3RzIHJhY2UgY29uZGl0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMgYXJlIGJlaW5nIGFkZHJlc3NlZCBpbiB0aGUgaGFuZGxpbmcgb2YgaW5jb21pbmcgY29ubmVjdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldHMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgTExDIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gb3VyIHRhcmdldCBlbnZpcm9ubWVudHMuIFRoYW5rZnVsbHksIHNpbmNlIExMQyBpcyBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgcHJvdG9jb2wgKDgwMi4yKSwgYW5kIGNhbiBiZSB1c2VkIG92ZXIgc3RhbmRhcmQgdmlydHVhbCBFdGhlcm5ldCBpbnRlcmZhY2VzIGxpa2UgYHZldGhgLCBgZHVtbXlgLCBhbmQgYGxvb3BiYWNrYCwgSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIGluY2x1ZGUgaXQgaW4gb3VyIGZ1enppbmcgc2NvcGUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBuZXQvbGxjL0tjb25maWdgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGJldHRpbmcgd2UmIzM5O2xsIGZpbmQgYENPTkZJR19MTENgIG9yIHBvc3NpYmx5IGBDT05GSUdfTExDMmAgaW4gdGhlcmUuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGNvbmZpcm0gdGhvc2UgYW5kIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgc28gd2UgY2FuIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBlbmFibGVkIGZvciBvdXIgZnV6emluZyBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTExDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2xsYy9LY29uZmlnOjI6Y29uZmlnIExMQ1xubmV0L2xsYy9LY29uZmlnLTMtXHR0cmlzdGF0ZVxubmV0L2xsYy9LY29uZmlnLTQtXG5uZXQvbGxjL0tjb25maWc6NTpjb25maWcgTExDMlxubmV0L2xsYy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgc3RhY2sgY29uZmlndXJhdGlvbjoKCioqTExDMiBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBDT05GSUdfTExDMmAgaGVyZS4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBzd2l0Y2gsIHRoZSBiaWcgb25lLCB0aGUgb25lIHRoYXQgKmVuYWJsZXMqIExMQyB0eXBlIDIgc3VwcG9ydC4gQW5kLCBhcyBJIHJlY2FsbCwgdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIGluIGBhZl9sbGMuY2AsIHNwZWNpZmljYWxseSB0aGUgc29ja2V0LXJlbGF0ZWQgY29kZS4gR2l2ZW4gdGhhdCwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9sbGMvTWFrZWZpbGVgLiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgYnVpbHQgYXMgZXhwZWN0ZWQuIE1ha2luZyBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJpZ2h0LCBhbmQgdGhhdCB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlcyBnZXQgbGlua2VkIGNvcnJlY3RseS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCBpcyBhbGwgZ29pbmcgYXMgcGxhbm5lZCwgYW5kIHRoYXQgdGhlIGJ1aWxkIGlzIHNldCB1cCBhcHByb3ByaWF0ZWx5LiBJdCYjMzk7cyBhIGtleSBwaWVjZSB0byBtYWtlIHN1cmUgTExDdjIgc29ja2V0cyBhcmUgY29ycmVjdGx5IGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfbGxjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbGxjL01ha2VmaWxlPTE1PWxsYzIteSA6PSBsbGNfaWYubyBsbGNfY19ldi5vIGxsY19jX2FjLm8gbGxjX2Nvbm4ubyBsbGNfY19zdC5vIGxsY19wZHUubyBcXFxubmV0L2xsYy9NYWtlZmlsZToxNjpcdCAgbGxjX3NhcC5vIGxsY19zX2FjLm8gbGxjX3NfZXYubyBsbGNfc19zdC5vIGFmX2xsYy5vIGxsY19zdGF0aW9uLm9cbm5ldC9sbGMvTWFrZWZpbGUtMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExMQzIgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGBsbGMyLXlgIGRlZmluaXRlbHkgaW1wbGllcyB0aGF0IGBhZl9sbGMub2AgaXMgaW52b2x2ZWQsIHdoaWNoIGNvbmZpcm1zIHRoYXQgYENPTkZJR19MTEMyYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEdvb2QsIHdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2suIE5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmdXp6LgoKRnJvbSB0aGUgcGF0Y2ggYW5hbHlzaXMsIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZDogYGxsY191aV9yZWxlYXNlYCwgYGxsY191aV9hY2NlcHRgLCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AsIGBsbGNfY29ubl9zZXJ2aWNlYCwgYGxsY19jcmVhdGVfaW5jb21pbmdfc29ja2AsIGBsbGNfaW5jb21pbmdfc29ja193b3JrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYGxsY19jb25uX3NlbmRfZG1fcnNwYCwgYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX2JhY2tsb2dfcmN2YCwgYW5kIGBsbGNfc2tfZnJlZWAuCgpCYXNlZCBvbiB0aG9zZSBtb2RpZmljYXRpb25zLCBteSBpbml0aWFsIGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gYGxsY191aV9hY2NlcHRgLCBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBhbmQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgZGF0YSBoYW5kbGluZy4KCkkgc3VzcGVjdCB0aGF0IGBsbGNfY29ubl9oYW5kbGVyYCBpcyBsaWtlbHkgY2FsbGVkIGZyb20gYGxsY19yY3ZgLCBzbyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdCBpbiBgbmV0L2xsYy9sbGNfaW5wdXQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX2Nvbm5faGFuZGxlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvYWZfbGxjLmM9MTI2OD1zdGF0aWMgaW50IF9faW5pdCBsbGMyX2luaXQodm9pZClcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTEyOTMtXHRsbGNfYWRkX3BhY2soTExDX0RFU1RfU0FQLCBsbGNfc2FwX2hhbmRsZXIpO1xubmV0L2xsYy9hZl9sbGMuYzoxMjk0Olx0bGxjX2FkZF9wYWNrKExMQ19ERVNUX0NPTk4sIGxsY19jb25uX2hhbmRsZXIpO1xubmV0L2xsYy9hZl9sbGMuYy0xMjk1LW91dDpcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9NTc9aW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04OS1cdFx0ICogc2tiLVx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXG5uZXQvbGxjL2xsY19jb25uLmM6OTA6XHRcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXG5uZXQvbGxjL2xsY19jb25uLmMtOTEtXHRcdCAqL1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz04NjM9c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtODgyLVxubmV0L2xsYy9sbGNfY29ubi5jOjg4Mzp2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9sbGMvbGxjX2Nvbm4uYy04ODQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQ3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTExDIENvbm5lY3Rpb24gSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBMTEMgY29ubmVjdGlvbiBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBlbnRyeSBwb2ludHMuIGBsbGNfY29ubl9oYW5kbGVyYCBpcyB3aGVyZSBldmVyeXRoaW5nIHN0YXJ0cywgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIGNvbm5lY3Rpb24gcGFja2V0cyDigJMgdGhhdCYjMzk7cyBjZW50cmFsLiBUaGVuIHdlIGhhdmUgYGxsY191aV9hY2NlcHRgLCB0aGUgYWNjZXB0IHN5c2NhbGwgaGFuZGxlcjsgaXQgbWFuYWdlcyBjb25uZWN0aW9ucyB0aGF0IGFyZSBiZWluZyBlc3RhYmxpc2hlZCBsb2NhbGx5LiAgYGxsY191aV9yZWxlYXNlYCBoYW5kbGVzIHRoZSBjbG9zdXJlIG9mIHRoZXNlIGNvbm5lY3Rpb25zLCB3aGljaCBpcyBhbm90aGVyIGNyaXRpY2FsIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQuIEFuZCBmaW5hbGx5LCBgbGxjX2JhY2tsb2dfcmN2YCwgdGhlIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIHRoZSBjb25uZWN0aW9uIGJhY2tsb2csIGlzIHRoZSBsYXN0IHBvaW50IEkgd2FudCB0byBmdWxseSB1bmRlcnN0YW5kLgoKTXkgaW5pdGlhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmb3VyIGZ1bmN0aW9uczogYGxsY191aV9hY2NlcHRgLCBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGFuZCBgbGxjX2JhY2tsb2dfcmN2YC4gVGhleSByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgb2YgdGhlIExMQyBjb25uZWN0aW9uIG1hbmFnZW1lbnQuCgpBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYGxsY19jb25uX2hhbmRsZXJgIGlzbiYjMzk7dCBzdGF0aWMsIHNvIGl04oCZcyBsaWtlbHkgZXhwb3NlZCBpbiB0aGUgc3ltYm9sIHRhYmxlOyBidXQgYmVmb3JlIEkgZGVsdmUgaW50byBpdCBmdWxseSBJIHdhbnQgdG8gc2VlIGlmIGBsbGNfYmFja2xvZ19yY3ZgIGlzIHN0YXRpYy4gRnJvbSB3aGF0IEkgcmVtZW1iZXIgaXQgaXMgc3RhdGljIGluIGBuZXQvbGxjL2xsY19jb25uLmNgLCBzbyBJJiMzOTtsbCBnbyBjaGVjayB0aGF0IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY19iYWNrbG9nX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2Nvbm4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbGxjL2xsY19jb25uLmM9MTAyOD1zdGF0aWMgYXRvbWljX3QgbGxjX3NvY2tfbnI7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTEwMzEtLyoqXG5uZXQvbGxjL2xsY19jb25uLmM6MTAzMjogKlx0bGxjX2JhY2tsb2dfcmN2IC0gUHJvY2Vzc2VzIHJ4IGZyYW1lcyBhbmQgZXhwaXJlZCB0aW1lcnMuXG5uZXQvbGxjL2xsY19jb25uLmMtMTAzMy0gKlx0QHNrOiBMTEMgc29jayAocDgwMjIgY29ubmVjdGlvbilcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtMTA0MC0gKi9cbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMDQxOnN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDQyLXtcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9MTEzMT1zdGF0aWMgdm9pZCBsbGNfc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTExNTUtXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmxsYy1cdTAwM2VwZHVfdW5hY2tfcSk7XG5uZXQvbGxjL2xsY19jb25uLmM6MTE1NjpcdHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2ID0gbGxjX2JhY2tsb2dfcmN2O1xubmV0L2xsYy9sbGNfY29ubi5jLTExNTctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBMTEMgQmFja2xvZyBhbmQgQ29ubmVjdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBgbGxjX2JhY2tsb2dfcmN2YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGFsc28gYXNzaWduZWQgdG8gYHNrLSZndDtza19iYWNrbG9nX3JjdmAuIEhtbSwgSSYjMzk7bSB0aGlua2luZyBpdCBtaWdodCBiZSBjbGVhbmVyIHRvIGxldmVyYWdlIHRoZSBleGlzdGluZyBoYW5kbGVycywgYGxsY19jb25uX2hhbmRsZXJgLCBgbGxjX3VpX2FjY2VwdGAsIGFuZCBgbGxjX3VpX3JlbGVhc2VgIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIHN0YXRpYyBmdW5jdGlvbi4gSXQgZmVlbHMgbGlrZSB0aGVyZSYjMzk7cyBwcm9iYWJseSBhIG1vcmUgZWxlZ2FudCB3YXkgdG8gYWNjb21wbGlzaCB0aGUgc2FtZSB0aGluZywgbGV2ZXJhZ2luZyBleGlzdGluZyBjb25uZWN0aW9uIG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gTm93LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBMZXQgbWUgc2VlLi4uIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYCBpcyAqbm90KiBzdGF0aWMsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1vZGlmaWVkLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIG1ha2Ugc3VyZSBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYWNjdXJhdGUgYmVmb3JlIEkgbWFrZSBhbnkgZGVjaXNpb25zIGFib3V0IHJlZmFjdG9yaW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IG9uZSBpcyBiZWluZyB1c2Vk4oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY19jb25uX3N0YXRlX3Byb2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbGxjL2xsY19jb25uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2xsYy9sbGNfY29ubi5jPTQzPWludCBzeXNjdGxfbGxjMl9idXN5X3RpbWVvdXQgPSBMTEMyX0JVU1lfVElNRSAqIEhaO1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy00NS0vKipcbm5ldC9sbGMvbGxjX2Nvbm4uYzo0NjogKlx0bGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyAtIHNlbmRzIGV2ZW50IHRvIGNvbm5lY3Rpb24gc3RhdGUgbWFjaGluZVxubmV0L2xsYy9sbGNfY29ubi5jLTQ3LSAqXHRAc2s6IGNvbm5lY3Rpb25cbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtNTYtICovXG5uZXQvbGxjL2xsY19jb25uLmM6NTc6aW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2xsYy9sbGNfY29ubi5jLTU4LXtcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9MTgwPXZvaWQgbGxjX2Nvbm5fc2VuZF9wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTMtICpcdFByZXBhcmVzIHNlcnZpY2UgcGFyYW1ldGVycyAocHJpbSBhbmQgcHJpbV9kYXRhKS4gY2FsbGluZyBpbmRpY2F0aW9uXG5uZXQvbGxjL2xsY19jb25uLmM6MTk0OiAqXHRmdW5jdGlvbiB3aWxsIGJlIGRvbmUgaW4gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcy5cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTUtICovXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTc1Mz1zdGF0aWMgaW50IGxsY19jb25uX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTc1OC1cdGV2LVx1MDAzZXJlYXNvbiA9IDA7XG5uZXQvbGxjL2xsY19jb25uLmM6NzU5Olx0cmV0dXJuIGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jb25uLmMtNzYwLX1cbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05NjQtXHRcdCAqIENhbiYjMzk7dCBiZSBza2Jfc2V0X293bmVyX3IsIHRoaXMgd2lsbCBiZSBkb25lIGF0IHRoZVxubmV0L2xsYy9sbGNfY29ubi5jOjk2NTpcdFx0ICogbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyBmdW5jdGlvbiwgbGF0ZXIgb24sIHdoZW4gd2Ugd2lsbCB1c2Vcbm5ldC9sbGMvbGxjX2Nvbm4uYy05NjYtXHRcdCAqIHNrYl9xdWV1ZV9yY3Zfc2tiIHRvIHNlbmQgaXQgdG8gdXBwZXIgbGF5ZXJzLCB0aGlzIGlzXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTEwNDE9c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDkzLVx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXG5uZXQvbGxjL2xsY19jb25uLmM6MTA5NDpcdFx0XHRyYyA9IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG5uZXQvbGxjL2xsY19jb25uLmMtMTA5NS1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBMTEMgQ29ubmVjdGlvbiBTdGF0ZSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlLCBteSBpbml0aWFsIGluc3RpbmN0IHNheXMgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgIGlzIGEgc3Ryb25nIGNvbnRlbmRlciBmb3IgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIHN0YXRlIHRyYW5zaXRpb25zLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0LiBOb3csIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29ubmVjdGlvbiYjMzk7cyBzdGF0ZSB0cmFuc2l0aW9ucywgSSB0aGluayBpdCYjMzk7cyBjcnVjaWFsIHRvIGNoZWNrIHRoZSB1c2VyIGludGVyZmFjZSBzaWRlIGFzIHdlbGwuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBpbiBgbmV0L2xsYy9hZl9sbGMuY2AuIFRoZXNlIHNob3VsZCBpbGx1bWluYXRlIGhvdyB0aGUgdXBwZXIgbGF5ZXJzIGFyZSBpbnRlcmFjdGluZyB3aXRoIGFuZCBtYW5pcHVsYXRpbmcgY29ubmVjdGlvbiBzdGF0ZXMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGxpa2VseSBjbGFyaWZ5IGEgbG90IGFib3V0IHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gZmxvdyBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHN0YXRlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY191aV9hY2NlcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbGxjL2FmX2xsYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvYWZfbGxjLmM9Njc3PXN0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9hZl9sbGMuYy02OTItLyoqXG5uZXQvbGxjL2FmX2xsYy5jOjY5MzogKlx0bGxjX3VpX2FjY2VwdCAtIGFjY2VwdCBhIG5ldyBpbmNvbWluZyBjb25uZWN0aW9uLlxubmV0L2xsYy9hZl9sbGMuYy02OTQtICpcdEBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLlxuLS1cbm5ldC9sbGMvYWZfbGxjLmMtNzAwLSAqL1xubmV0L2xsYy9hZl9sbGMuYzo3MDE6c3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG5uZXQvbGxjL2FmX2xsYy5jLTcwMi1cdFx0XHQgc3RydWN0IHByb3RvX2FjY2VwdF9hcmcgKmFyZylcbi0tXG5uZXQvbGxjL2FmX2xsYy5jPTEyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTEyNDctXHQuc29ja2V0cGFpciAgPSBzb2NrX25vX3NvY2tldHBhaXIsXG5uZXQvbGxjL2FmX2xsYy5jOjEyNDg6XHQuYWNjZXB0ICAgICAgPSBsbGNfdWlfYWNjZXB0LFxubmV0L2xsYy9hZl9sbGMuYy0xMjQ5LVx0LmdldG5hbWUgICAgID0gbGxjX3VpX2dldG5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGZyYW1lZCBhcyB5b3VyIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqU3RhdGljIEZ1bmN0aW9uIENoZWNrIGFuZCBGb2xsb3ctVXAqKgoKT2theSwgc28gYGxsY191aV9hY2NlcHRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQsIHdoaWNoIGNhbiBpbXBhY3QgaXRzIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgcmV1c2UgYWNyb3NzIGRpZmZlcmVudCBtb2R1bGVzLiBHaXZlbiB0aGlzLCBJIHNob3VsZCBpbW1lZGlhdGVseSBjaGVjayB3aGF0IHRoYXQgaW1wbGllcy4gTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBsbGNfdWlfcmVsZWFzZWAuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHByb2JhYmx5IGltcG9ydGFudCwgaWYgb25lIGlzIHN0YXRpYyB0aGVuIHdoeSwgYW5kIGlmIHRoZXkgYXJlIHJlbGF0ZWQsIGhvdy4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHJlbGVhc2luZyBzb21ldGhpbmcgdGhhdCB3YXMgYWNjZXB0ZWQsIG9yIGhhbmRsZWQgZGlmZmVyZW50bHkgaW4gYSBzdGF0aWMgY29udGV4dCwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBwb3RlbnRpYWwgZGVzaWduIGltcGxpY2F0aW9ucyBvciBjb25zdHJhaW50cy4gSSB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGNhbGxzIGl0IG1ha2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY191aV9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy9hZl9sbGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbGxjL2FmX2xsYy5jPTE2Nz1zdGF0aWMgaW50IGxsY191aV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4tLVxubmV0L2xsYy9hZl9sbGMuYy0xOTAtLyoqXG5uZXQvbGxjL2FmX2xsYy5jOjE5MTogKlx0bGxjX3VpX3JlbGVhc2UgLSBzaHV0ZG93biBzb2NrZXRcbm5ldC9sbGMvYWZfbGxjLmMtMTkyLSAqXHRAc29jazogU29ja2V0IHRvIHJlbGVhc2UuXG4tLVxubmV0L2xsYy9hZl9sbGMuYy0xOTUtICovXG5uZXQvbGxjL2FmX2xsYy5jOjE5NjpzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5uZXQvbGxjL2FmX2xsYy5jLTE5Ny17XG4tLVxubmV0L2xsYy9hZl9sbGMuYz0xMjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGxsY191aV9vcHMgPSB7XG4tLVxubmV0L2xsYy9hZl9sbGMuYy0xMjQzLVx0Lm93bmVyICAgICAgID0gVEhJU19NT0RVTEUsXG5uZXQvbGxjL2FmX2xsYy5jOjEyNDQ6XHQucmVsZWFzZSAgICAgPSBsbGNfdWlfcmVsZWFzZSxcbm5ldC9sbGMvYWZfbGxjLmMtMTI0NS1cdC5iaW5kXHQgICAgID0gbGxjX3VpX2JpbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTU4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIEFQSSBFbnRyeXBvaW50cyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhpcyBmdXp6aW5nIHNldHVwLiBUaGUgcHJvbXB0IGlzIHByZXR0eSBjbGVhcjogaXQgd2FudHMgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2U7IGlubGluaW5nIHdvdWxkIG9ic2N1cmUgdGhlIGZ1bmN0aW9uJiMzOTtzIGRpc3RpbmN0IGFkZHJlc3MsIG1ha2luZyBpdCBoYXJkZXIgZm9yIHRoZSBmdXp6ZXIgdG8gdGFyZ2V0IHRoZW0gZWZmZWN0aXZlbHkuCgpSaWdodCBvZmYgdGhlIGJhdCwgYGxsY191aV9yZWxlYXNlYCBpcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgbWVhbnMgaXQgd29uJiMzOTt0IGhhdmUgYSB1bmlxdWUgc3ltYm9sIGFkZHJlc3MgaW4gdGhlIGZ1enplciB1bmxlc3MgaXQgc29tZWhvdyAqaXNuJiMzOTt0KiBpbmxpbmVkLiBHcmFudGVkLCB0aGVzZSBgcHJvdG9fb3BzYCBmdW5jdGlvbnMgKnNob3VsZG4mIzM5O3QqIGJlIGlubGluZWQgYmVjYXVzZSB0aGVpciBhZGRyZXNzZXMgYXJlIHVzdWFsbHkgdGFrZW4sIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYSByaXNrLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIGV4cGxvcmUgd2hldGhlciBvciBub3QgaXQmIzM5O3MgYWN0dWFsbHkgaW5saW5lZC4KCkhvd2V2ZXIsIHNpbmNlIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBhcmUgaG9va2VkIGludG8gYHByb3RvX29wc2AsIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCBhdCBhbGwuIEkgd2lsbCB0YWtlIHRoaXMgaW50byBhY2NvdW50LgoKVG8gYmUgZXh0cmEgc2FmZSwgSSBzaG91bGQgY29uc2lkZXIgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlc2Ugb3BlcmF0aW9ucy4gSSBjYW4gYWxzbyBpbmNsdWRlIGBsbGNfY29ubl9oYW5kbGVyYCBhbmQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AgYW5kIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgIGFyZSAqbm9uLXN0YXRpYyogYW5kICpuZXcqIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2guIEJpbmdvISBUaG9zZSBhcmUgZGVmaW5pdGVseSBwcmltZSBjYW5kaWRhdGVzIHRvIGluY2x1ZGUuIEkgd2lsbCBuZWVkIHRvIHByaW9yaXRpemUgdGhvc2UgdHdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2xsYy9sbGNfY29ubi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2Nvbm4uYz03ODc9c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTgwNi1cbm5ldC9sbGMvbGxjX2Nvbm4uYzo4MDc6dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9sbGMvbGxjX2Nvbm4uYy04MDgte1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz04MzM9dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTg0Ny1cdFx0XHRpZiAoaW5jb21pbmdfc3RhdGUgIT0gTExDX0lOQ09NSU5HX05PTkUpIHtcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4NDg6XHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NDktXHRcdFx0XHRpZiAoaW5jb21pbmdfc3RhdGUgPT0gTExDX0lOQ09NSU5HX1FVRVVFRClcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05MjgtXHRcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XG5uZXQvbGxjL2xsY19jb25uLmM6OTI5Olx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xubmV0L2xsYy9sbGNfY29ubi5jLTkzMC1cdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05NzgtXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxubmV0L2xsYy9sbGNfY29ubi5jOjk3OTpcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xubmV0L2xsYy9sbGNfY29ubi5jLTk4MC1cdFx0fSBlbHNlIGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxubmV0L2xsYy9sbGNfY29ubi5jLTk4MS1cdFx0XHQgICBMTENfSU5DT01JTkdfUEVORElORykge1xubmV0L2xsYy9sbGNfY29ubi5jOjk4MjpcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTtcbm5ldC9sbGMvbGxjX2Nvbm4uYy05ODMtXHRcdH1cbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtOTkwLVx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG5uZXQvbGxjL2xsY19jb25uLmM6OTkxOlx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xubmV0L2xsYy9sbGNfY29ubi5jLTk5Mi1cdH0gZWxzZSB7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTk5Ni1cdFx0XHRpZiAobmV3c2spXG5uZXQvbGxjL2xsY19jb25uLmM6OTk3Olx0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG5uZXQvbGxjL2xsY19jb25uLmMtOTk4LVx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTEwNDE9c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDYxLVx0XHRcdCAgICBsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pIHtcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMDYyOlx0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG5uZXQvbGxjL2xsY19jb25uLmMtMTA2My1cdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtMTA2OS1cdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG5uZXQvbGxjL2xsY19jb25uLmM6MTA3MDpcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xubmV0L2xsYy9sbGNfY29ubi5jLTEwNzEtXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA2NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBhbmQgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCBhcmUgaW5kZWVkIHRoZSBuZXcsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50cm9kdWNlcy4gQW5kLCBJIHNlZSBgbGxjX2Nvbm5faGFuZGxlcmAgaXMgYWxzbyBub24tc3RhdGljOyB0aGVzZSBhcmUgYWxsIHByaW1lIGZvY3VzIHBvaW50cy4gVGhleSYjMzk7cmUgY2xlYXJseSBpbnRlbmRlZCB0byBiZSBhY2Nlc3NpYmxlIG91dHNpZGUgb2YgdGhlaXIgb3JpZ2luYWwgc2NvcGUsIHdoaWNoIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4KCk5vdywgSSBuZWVkIHRvIHJldmlzaXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gVGhlIGNvcmUgY29uZmlnIG9wdGlvbiBpcyBgQ09ORklHX0xMQzJgLCB0aGF0JiMzOTtzIGNsZWFyLiBCdXQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbXBhY3RlZD8gSSYjMzk7bGwgcmUtZXhhbWluZSBgbmV0L2xsYy9LY29uZmlnYCB0aG9yb3VnaGx5IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYENPTkZJR19MTEMyYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYENPTkZJR19MTEMyYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIG1vZHVsZXMsIG9yIGNvbmZpZ3VyYXRpb25zIHJlbHkgb24gdGhpcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byBncmFzcCB0aGUgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMgb3IgY29uc2lkZXJpbmcgaXRzIHJlbW92YWwuIFRoaXMgaW52b2x2ZXMgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBjcm9zcy1yZWZlcmVuY2luZyB3aXRoIG90aGVyIHJlbGV2YW50IEtjb25maWdzLCBhbmQgcG9zc2libHkgZXZlbiBnbGFuY2luZyBhdCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgZmlsZXMgdGhhdCBtaWdodCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHVzZSB0aGlzIG9wdGlvbi4gSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGFueSBkZWZhdWx0IHZhbHVlcyBpdCBpbmZsdWVuY2VzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEEgaG9saXN0aWMgdmlldyBpcyBrZXkg4oCTIEkgbmVlZCB0byBlbnN1cmUgbm90aGluZyBicmVha3MgaWYgSSBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBhYm91dCBgQ09ORklHX0xMQzJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTExDMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbGxjL0tjb25maWc9Mj1jb25maWcgTExDXG4tLVxubmV0L2xsYy9LY29uZmlnLTQtXG5uZXQvbGxjL0tjb25maWc6NTpjb25maWcgTExDMlxubmV0L2xsYy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqRGl2aW5nIGludG8gdGhlIEtjb25maWcgb2YgbmV0L2xsYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuICYjMzQ7bmV0L2xsYy9LY29uZmlnJiMzNDsuLi4gKnRoYXQqIHN1Z2dlc3RzIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTG9naWNhbCBMaW5rIENvbnRyb2wgKExMQykgc3VibGF5ZXIgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBtYXAgb3V0IHRoZSBwb3RlbnRpYWwgYXJlYXMgd2UmIzM5O2xsIGJlIGRlYWxpbmcgd2l0aC4gV2UmIzM5O3JlIGxpa2VseSB0byBzZWUgc2V0dGluZ3MgcmVsYXRlZCB0bzoKCiogICAqKkxMQyBwcm90b2NvbCBzdXBwb3J0OioqIEFyZSB3ZSBjb25maWd1cmluZyBzcGVjaWZpYyBMTEMgcHJvdG9jb2xzIChlLmcuLCBJRUVFIDgwMi4yIFR5cGUgMSwgVHlwZSAyLCBvciBtYXliZSBldmVuIHByb3ByaWV0YXJ5IG9uZXMpPyBBcmUgdGhlcmUgb3B0aW9ucyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGRpZmZlcmVudCBMTEMgaW1wbGVtZW50YXRpb25zPwoqICAgKipFbmNhcHN1bGF0aW9uL0ZyYW1pbmc6KiogVGhlcmUmIzM5O3MgYSBoaWdoIHByb2JhYmlsaXR5IHdlJiMzOTtsbCBzZWUgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBob3cgTExDIGZyYW1lcyBhcmUgZW5jYXBzdWxhdGVkIHdpdGhpbiBvdGhlciBuZXR3b3JrIHByb3RvY29scy4gVGhpbmsgYWJvdXQgU05BUCAoU3ViLU5ldHdvcmsgQWNjZXNzIFByb3RvY29sKSwgTExDL1NOQVAgYnJpZGdpbmcsIG1heWJlIGV2ZW4gc29tZSBvYnNjdXJlIHR1bm5lbGluZyBtZXRob2RzLgoqICAgKipIYXJkd2FyZSBEZXBlbmRlbmNpZXM6KiogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB3ZSBtaWdodCBmaW5kIG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gY2VydGFpbiBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVycyAoTklDcykgb3IgaGFyZHdhcmUuCiogICAqKlBlcmZvcm1hbmNlIFR1bmluZzoqKiBMTEMgaXMgYSBsYXllciB3aXRoIHRoZSBwb3RlbnRpYWwgdG8gYmUgYSBib3R0bGVuZWNrLCBzbyBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0aGVyZSYjMzk7bGwgYmUgc2V0dGluZ3MgZm9yIG9wdGltaXppbmcgYnVmZmVyaW5nLCB3aW5kb3dpbmcsIGFuZCBtYXliZSBldmVuIGludGVycnVwdCBoYW5kbGluZyByZWxhdGVkIHRvIExMQyB0cmFmZmljLgoqICAgKipEZWJ1Z2dpbmcvVHJhY2luZzoqKiBBIGNydWNpYWwgcGFydCBvZiBhbnkgd2VsbC1kZXNpZ25lZCBLY29uZmlnIGZpbGUgaXMgdGhlIGluY2x1c2lvbiBvZiBvcHRpb25zIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgYW5kIHRyYWNpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBgREVCVUdfTExDYCBvciBgVFJBQ0VfTExDYCBmbGFncyB0byBoZWxwIHRyb3VibGVzaG9vdCBhbnkgTExDLXJlbGF0ZWQgaXNzdWVzIHRoYXQgbWlnaHQgY29tZSB1cC4KCk15IGdvYWwgaW4gcmVhZGluZyB0aGlzIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBzZWUgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgYm9vbGAsIGB0cmlzdGF0ZWAsIGBpbnRgLCBhbmQgYHN0cmluZ2Agb3B0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBuYXR1cmUgb2YgZWFjaCBzZXR0aW5nLiBJJiMzOTtsbCBhbHNvIGNoZWNrIG91dCBhbnkgaGVscCB0ZXh0LCB0aGlzIGdpdmVzIG1lIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgYXMgdG8gd2hhdCBpcyBhdmFpbGFibGUgYW5kIHdoeS4gVGhpcyBjb3VsZCBpbmZsdWVuY2Ugb3VyIG92ZXJhbGwgbmV0d29yayBjb25maWd1cmF0aW9ucyBhbmQgcGVyZm9ybWFuY2UuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2xsYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIExMQ1xuICAgMzpcdFx0dHJpc3RhdGVcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTExDMlxuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QU5TSS9JRUVFIDgwMi4yIExMQyB0eXBlIDIgU3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0c2VsZWN0IExMQ1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBUaGlzIGlzIGEgTG9naWNhbCBMaW5rIExheWVyIHR5cGUgMiwgY29ubmVjdGlvbiBvcmllbnRlZCBzdXBwb3J0LlxuICAxMDpcdFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIFBGX0xMQyBzb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM3OQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTExDMiBDb25maWd1cmF0aW9uIFN1bW1hcnkqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgTExDMmAgaXMgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMuIExldCBtZSBzb2xpZGlmeSBteSByZWFzb25pbmcgaGVyZSwgYXMgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhpcyB1cCBmb3IgZnV6emluZy4KCkZpcnN0LCB0aGUgY29yZSBpZGVhOiB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IGludHJvZHVjaW5nIGEgbmV3IHN0YXRlIG1hY2hpbmUgYW5kIHdvcmtxdWV1ZS4gVGhpcyBpcyByaWdodCBpbiB0aGUgY29yZSBvZiB0aGUgTExDIG5ldHdvcmtpbmcgY29kZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhvc2UgUEZfTExDIHNvY2tldHMgYW5kIG9idmlvdXNseSBuZXR3b3JrIHRyYWZmaWMuIFNvLCB3b3J0aCBmdXp6aW5nLCB0aGF0JiMzOTtzIGNsZWFyLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYW5kIGBsbGNfY29ubl9oYW5kbGVyYCBhcyB0aGUgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBjb25maXJtIGBsbGNfY29ubl9oYW5kbGVyYCBtYWtlcyBzZW5zZTogSXQmIzM5O3MgdGhlIHByaW1hcnkgaGFuZGxlciBmb3IgKmluY29taW5nKiBwYWNrZXRzIG9uIExMQyBjb25uZWN0aW9ucywgc28gc3BvdCBvbi4gSSBhbHNvIGNvbnNpZGVyZWQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLCBhcyBpdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzIG5vbi1zdGF0aWMuCgpBY3R1YWxseSwgbGV0JiMzOTtzIHJldmlzaXQgYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLiBJdCYjMzk7cyBub3QgKmV4cG9ydGVkKiBhcyBJIGluaXRpYWxseSB0aG91Z2h0LCBidXQgaXQmIzM5O3Mgbm90IHN0YXRpYyBlaXRoZXIsIGFuZCB0aGF0IG1ha2VzIGl0IHBlcmZlY3RseSB2YWxpZCBhcyBhIGZvY3VzIHN5bWJvbC4KCk5vdywgYWJvdXQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLiBJdCYjMzk7cyBiZWVuIHRvdWNoZWQsIGJ1dCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbWluaW1hbC4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBhcHBlYXJzIHRvIHJlc2lkZSBpbiBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGFuZCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLgoKU3BlY2lmaWNhbGx5LCBgbGxjX2Nvbm5faGFuZGxlcmAgaGFzIGEgc3Vic3RhbnRpYWwgbnVtYmVyIG9mIGNoYW5nZXMsIGFuZCB0aGVzZSBzeW1ib2xzLCBjb21iaW5lZCwgc2VlbSB0byByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHBhdGNoLgoKSSBhbHNvIGNvbnNpZGVyZWQgYWRkaW5nIHRoZSBzeXNjYWxsIGhhbmRsZXJzIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYC4gQWx0aG91Z2ggdGhleSBhcmUgc3RhdGljLCB0aGV5IGFyZSB0aGUgbWFpbiBzeXNjYWxsIGhhbmRsZXJzIG1vZGlmaWVkLCBhbmQgSSBjb3VsZCBhZGQgdGhlbSBqdXN0IGluIGNhc2UuIEJ1dCB0byBiZSBzYWZlLCBJJiMzOTtsbCBzdGljayB0byBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBhbmQgYGxsY19jb25uX2hhbmRsZXJgLgoKRmluYWxseSwgYW55IG90aGVyIGNvbmZpZ3M/IGBDT05GSUdfTkVUYCBpcyBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUsIGJ1dCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE9rYXksIEkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TExDMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xsY19yZWxlYXNlX2luY29taW5nX3NvY2smIzM0OywKICAgICYjMzQ7bGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrJiMzNDssCiAgICAmIzM0O2xsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuJiMzNDssCiAgICAmIzM0O2xsY19jb25uX2hhbmRsZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lIGFuZCB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGluY29taW5nIExMQyBjb25uZWN0aW9ucyB0byBmaXggcmFjZSBjb25kaXRpb25zIGFuZCBsaWZlY3ljbGUgaXNzdWVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiB0aGUgY29yZSBMTEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHRyYWZmaWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xMQzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrJiMzNDssCiAgICAmIzM0O2xsY19hY2NlcHRfaW5jb21pbmdfc29jayYjMzQ7LAogICAgJiMzNDtsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDtsbGNfY29ubl9oYW5kbGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgTExDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cyBhbmQgbmV0d29yayB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBpbiB0aGUgTExDIHByb3RvY29sIGJ5IGludHJvZHVjaW5nIHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBgaW5jb21pbmdfd29ya2ApIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGlzdGVuZXIgc29ja2V0IHRlYXJkb3duLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIGZ1bmN0aW9uIHRvIHNlbmQgYSBETSByZXNwb25zZSAoYGxsY19jb25uX3NlbmRfZG1fcnNwYCksIHdoaWNoIGFsbG9jYXRlcyBhIG5ldyBza2IgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGl0cyBieXRlcyAoTExDIGhlYWRlciBhbmQgTUFDIGhlYWRlcikgYmVmb3JlIHRyYW5zbWlzc2lvbiwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkIHRvIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwMzI5ZDUzYWNjNzA1NmJlNjM0MDdmZGNlMmI4NGVmZjQ3NjEzY2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwOToxMzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCmluZGV4IGUxYTMwMjY5NjcyMzQuLmU4MDAzZGIxMTBhZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaApAQCAtNiw2ICYjNDM7Niw3IEBACiAgKiAJCSAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyAmbHQ7YWNtZUBjb25lY3RpdmEuY29tLmJyJmd0OwogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2xsY19pZi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGxjLmgmZ3Q7CkBAIC0xMyw2ICYjNDM7MTQsMTAgQEAKICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDIKIAomIzQzOyNkZWZpbmUgTExDX0lOQ09NSU5HX05PTkUgICAgICAgIDAKJiM0MzsjZGVmaW5lIExMQ19JTkNPTUlOR19QRU5ESU5HICAgICAxCiYjNDM7I2RlZmluZSBMTENfSU5DT01JTkdfUVVFVUVEICAgICAgMgomIzQzOwogI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDIKICNkZWZpbmUgTExDMl9BQ0tfVElNRSAgICAgICAgICAgICAxCiAjZGVmaW5lIExMQzJfUkVKX1RJTUUgICAgICAgICAgICAgMwpAQCAtNzIsNiAmIzQzOzc3LDkgQEAgc3RydWN0IGxsY19zb2NrIHsKIAkJCQkJICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuCiAJCQkJCSAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovCiAJdTMyCQkgICAgY21zZ19mbGFnczsKJiM0MzsJYXRvbWljX3QJICAgIGluY29taW5nX3N0YXRlOwomIzQzOwlzdHJ1Y3Qgc29jawkgICAgKmluY29taW5nX2xpc3RlbmVyOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5jb21pbmdfd29yazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7CiB9OwogCkBAIC05Myw3ICYjNDM7MTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LAogCQkJICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTsKIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7Ci12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7dm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7CiYjNDM7dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7CiYjNDM7Ym9vbCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzayk7CiAKIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IGIwNDQ3YzMzZGJmMDkuLmU4MDU0ODA5Y2YwY2YgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvbGxjX3NhcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9sbGNfcGR1LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2xsY19jb25uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9sbGNfY19zdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3Bfc3RhdGVzLmgmZ3Q7CiAKIC8qIHJlbWVtYmVyOiB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIGlzIHplcm9lZCBiZWNhdXNlIGl0cyBpbiAuYnNzICovCkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLSZndDtzazsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYzsKJiM0MzsJYm9vbCBsaXN0ZW5lcjsKIAogCWlmICh1bmxpa2VseShzayA9PSBOVUxMKSkKIAkJZ290byBvdXQ7CkBAIC0yMDYsNiAmIzQzOzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAkJbGxjLSZndDtsYWRkci5sc2FwLCBsbGMtJmd0O2RhZGRyLmxzYXApOwogCWlmICghbGxjX3NlbmRfZGlzYyhzaykpCiAJCWxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdnRpbWVvKSk7CiYjNDM7CWxpc3RlbmVyID0gc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU47CiYjNDM7CWlmIChsaXN0ZW5lcikKJiM0MzsJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkgewogCQlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLSZndDtzYXA7CiAKQEAgLTIxNCwxNiAmIzQzOzIxOSwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJCSAqLwogCQlsbGNfc2FwX2hvbGQoc2FwKTsKIAkJbGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy0mZ3Q7c2FwLCBzayk7CiYjNDM7CQlsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCWxsY19zYXBfcHV0KHNhcCk7CiAJfSBlbHNlIHsKJiM0MzsJCWxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAl9CiAJbmV0ZGV2X3B1dChsbGMtJmd0O2RldiwgJmFtcDtsbGMtJmd0O2Rldl90cmFja2VyKTsKIAlzb2NrX3B1dChzayk7CiAJc29ja19vcnBoYW4oc2spOwogCXNvY2stJmd0O3NrID0gTlVMTDsKLQlsbGNfc2tfZnJlZShzayk7CiYjNDM7CWxsY19za19mcmVlKHNrLCB0cnVlKTsKIG91dDoKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMiw2ICYjNDM7NzI5LDE3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCQlnb3RvIGZyZWVzOwogCXJjID0gMDsKIAluZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CWxvY2tfc29ja19uZXN0ZWQobmV3c2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJaWYgKGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICAhbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKSkgewomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX05PTkUpCiYjNDM7CQkJbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7CiYjNDM7CQlyZWxlYXNlX3NvY2sobmV3c2spOwomIzQzOwkJc29ja19wdXQobmV3c2spOwomIzQzOwkJcmMgPSAtRUNPTk5BQk9SVEVEOwomIzQzOwkJZ290byBmcmVlczsKJiM0MzsJfQogCS8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi8KIAlsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7CiAJc29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7CkBAIC03MzcsNiAmIzQzOzc1NSw4IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCXNrX2FjY2VwdHFfcmVtb3ZlZChzayk7CiAJZHByaW50aygmIzM0OyVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXG4mIzM0OywgX19mdW5jX18sCiAJCWxsY19zayhzayktJmd0O2FkZHIuc2xsY19zYXAsIG5ld2xsYy0mZ3Q7ZGFkZHIubHNhcCk7CiYjNDM7CXJlbGVhc2Vfc29jayhuZXdzayk7CiYjNDM7CXNvY2tfcHV0KG5ld3NrKTsKIGZyZWVzOgogCWtmcmVlX3NrYihza2IpOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jCmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjRhMzRmMjQwYWQyY2MgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2Nvbm4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbGxjL2xsY19jb25uLmMKQEAgLTMyLDYgJiM0MzszMiw3IEBAIHN0YXRpYyBpbnQgbGxjX2V4ZWNfY29ubl90cmFuc19hY3Rpb25zKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKmV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgKmxsY19xdWFsaWZ5X2Nvbm5fZXYoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqLwogc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdOwpAQCAtODgsNiAmIzQzOzg5LDEzIEBAIGludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJICogc2tiLSZndDtzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpbgogCQkgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZQogCQkgKi8KJiM0MzsJCWlmIChzayAhPSBza2ItJmd0O3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHsKJiM0MzsJCQlzb2NrX2hvbGQoc2tiLSZndDtzayk7CiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO2xsY19zayhza2ItJmd0O3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUsCiYjNDM7CQkJCSAgIExMQ19JTkNPTUlOR19RVUVVRUQpOwomIzQzOwkJfQogCQlza2JfZ2V0KHNrYik7CiAJCXNrYl9xdWV1ZV90YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwpAQCAtMzU0LDcgJiM0MzszNjIsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAlpbnQgcmMgPSAxOwogCi0JaWYgKGxsYy0mZ3Q7c3RhdGUgJmd0OyBOQlJfQ09OTl9TVEFURVMpCiYjNDM7CWlmIChsbGMtJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNIHx8CiYjNDM7CSAgICBsbGMtJmd0O3N0YXRlICZndDsgTkJSX0NPTk5fU1RBVEVTKQogCQlnb3RvIG91dDsKIAlyYyA9IDA7CiAJdHJhbnMgPSBsbGNfcXVhbGlmeV9jb25uX2V2KHNrLCBza2IpOwpAQCAtNzY1LDI3ICYjNDM7Nzc0LDE2MiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssCiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtJmd0O2xhZGRyKSk7CiAJbWVtY3B5KCZhbXA7bmV3bGxjLSZndDtkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtJmd0O2RhZGRyKSk7CiAJbmV3bGxjLSZndDtkZXYgPSBkZXY7CiYjNDM7CW5ld2xsYy0mZ3Q7aW5jb21pbmdfbGlzdGVuZXIgPSBzazsKJiM0MzsJYXRvbWljX3NldCgmYW1wO25ld2xsYy0mZ3Q7aW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bmV3bGxjLSZndDtpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTsKJiM0MzsJc29ja19ob2xkKHNrKTsKIAlkZXZfaG9sZChkZXYpOwogCWxsY19zYXBfYWRkX3NvY2tldChsbGMtJmd0O3NhcCwgbmV3c2spOwogb3V0OgogCXJldHVybiBuZXdzazsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxsY19zb2NrLAomIzQzOwkJCQkJCSAgICBpbmNvbWluZ193b3JrKTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtsbGMtJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqbGlzdGVuZXIgPSBsbGMtJmd0O2luY29taW5nX2xpc3RlbmVyOwomIzQzOwomIzQzOwlsb2NrX3NvY2sobGlzdGVuZXIpOwomIzQzOwlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiYjNDM7CWxsY19za19mcmVlKHNrLCBmYWxzZSk7CiYjNDM7CXNvY2tfb3JwaGFuKHNrKTsKJiM0MzsJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7CiYjNDM7CXJlbGVhc2Vfc29jayhsaXN0ZW5lcik7CiYjNDM7CWRldl9wdXQobGxjLSZndDtkZXYpOwomIzQzOwlsbGMtJmd0O2RldiA9IE5VTEw7CiYjNDM7CXNvY2tfcHV0KHNrKTsKJiM0MzsJc29ja19wdXQobGlzdGVuZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOwomIzQzOwomIzQzOwlpZiAoYXRvbWljX3hjaGcoJmFtcDtsbGMtJmd0O2luY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT0KJiM0MzsJICAgIExMQ19JTkNPTUlOR19OT05FKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGxsYy0mZ3Q7c3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpOwomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwlsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLSZndDtzYXAsIHNrKTsKJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2xsYy0mZ3Q7aW5jb21pbmdfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7bGxjLSZndDtpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCwKJiM0MzsJCQkJICBMTENfSU5DT01JTkdfTk9ORSkgIT0gTExDX0lOQ09NSU5HX1FVRVVFRCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc29ja19wdXQobGxjLSZndDtpbmNvbWluZ19saXN0ZW5lcik7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkpIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CiYjNDM7CQlpZiAobmV3c2sgJmFtcDsmYW1wOyBuZXdzayAhPSBzaykgewomIzQzOwkJCWludCBpbmNvbWluZ19zdGF0ZTsKJiM0MzsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpbmNvbWluZ19zdGF0ZSA9CiYjNDM7CQkJCWF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpOwomIzQzOwkJCWlmIChpbmNvbWluZ19zdGF0ZSAhPSBMTENfSU5DT01JTkdfTk9ORSkgewomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQkJaWYgKGluY29taW5nX3N0YXRlID09IExMQ19JTkNPTUlOR19RVUVVRUQpCiYjNDM7CQkJCQlzb2NrX3B1dChuZXdzayk7CiYjNDM7CQkJfQomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCX0KJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwl9CiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoaXMgbWlycm9ycyB0aGUgQURNLXN0YXRlIERNIGFjdGlvbnMsIGJ1dCBhIGxpc3RlbmVyIGhhcyBubyBwZWVyCiYjNDM7ICogYWRkcmVzcyBpbiBsbGMtJmd0O2RhZGRyIHlldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgc3RydWN0IGxsY19hZGRyICpzYWRkciwgdTggZl9iaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwluc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi0mZ3Q7ZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7CiYjNDM7CWlmICghbnNrYikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLSZndDtsYWRkci5sc2FwLAomIzQzOwkJCSAgICBzYWRkci0mZ3Q7bHNhcCwgTExDX1BEVV9SU1ApOwomIzQzOwlsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTsKJiM0MzsJcmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi0mZ3Q7ZGV2LSZndDtkZXZfYWRkciwgc2FkZHItJmd0O21hYyk7CiYjNDM7CWlmICh1bmxpa2VseShyYykpCiYjNDM7CQlrZnJlZV9za2IobnNrYik7CiYjNDM7CWVsc2UKJiM0MzsJCWRldl9xdWV1ZV94bWl0KG5za2IpOwomIzQzO30KJiM0MzsKIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7Ci0Jc3RydWN0IHNvY2sgKnNrOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2ssICpuZXdzayA9IE5VTEw7CiYjNDM7CWJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlib29sIG5ld3NrX2xvY2tlZCA9IGZhbHNlOwogCiAJbGxjX3BkdV9kZWNvZGVfc2Eoc2tiLCBzYWRkci5tYWMpOwogCWxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCAmYW1wO3NhZGRyLmxzYXApOwogCWxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTsKIAlsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgJmFtcDtkYWRkci5sc2FwKTsKIAomIzQzO2xvb2t1cDoKIAlzayA9IF9fbGxjX2xvb2t1cChzYXAsICZhbXA7c2FkZHIsICZhbXA7ZGFkZHIsIGRldl9uZXQoc2tiLSZndDtkZXYpKTsKIAlpZiAoIXNrKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKHNrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJbmV3c2sgPSBzazsKJiM0MzsJCWJoX2xvY2tfc29jayhuZXdzayk7CiYjNDM7CQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgIT0KJiM0MzsJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlzb2NrX3B1dChuZXdzayk7CiYjNDM7CQkJbmV3c2sgPSBOVUxMOwomIzQzOwkJCWdvdG8gbG9va3VwOwomIzQzOwkJfQomIzQzOwkJc2sgPSBsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19saXN0ZW5lcjsKJiM0MzsJCXNvY2tfaG9sZChzayk7CiYjNDM7CQluZXdza19sb29rdXBfcmVmID0gdHJ1ZTsKJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJfQomIzQzOwogCWJoX2xvY2tfc29jayhzayk7CiYjNDM7CWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpCiYjNDM7CQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwlpZiAobmV3c2tfbG9va3VwX3JlZikgewomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQluZXdza19sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpICE9CiYjNDM7CQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJZ290byByZXRyeV91bmxvY2s7CiYjNDM7CQlpZiAodW5saWtlbHkoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gfHwKJiM0MzsJCQkgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHsKJiM0MzsJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCQlnb3RvIGRyb3BfdW5sb2NrOwomIzQzOwkJfQomIzQzOwl9CiAJLyoKIAkgKiBUaGlzIGhhcyB0byBiZSBkb25lIGhlcmUgYW5kIG5vdCBhdCB0aGUgdXBwZXIgbGF5ZXIgLSZndDthY2NlcHQKIAkgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczoKQEAgLTc5NSwxMCAmIzQzOzkzOSwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkgKiBpbiB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBwcml2YXRlIGFyZWEuIC1hY21lCiAJICovCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkgewotCQlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi0mZ3Q7ZGV2LAotCQkJCQkJCSAgICAgICZhbXA7c2FkZHIsICZhbXA7ZGFkZHIpOwotCQlpZiAoIW5ld3NrKQotCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCWlmICghbmV3c2spIHsKJiM0MzsJCQlpZiAobGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHsKJiM0MzsJCQkJaWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7CiYjNDM7CQkJCQl1OCBmX2JpdDsKJiM0MzsKJiM0MzsJCQkJCWxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsICZhbXA7Zl9iaXQpOwomIzQzOwkJCQkJbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsICZhbXA7c2FkZHIsIGZfYml0KTsKJiM0MzsJCQkJfSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7CiYjNDM7CQkJCQlsbGNfY29ubl9zZW5kX2RtX3JzcChzYXAsIHNrYiwgJmFtcDtzYWRkciwgMSk7CiYjNDM7CQkJCX0KJiM0MzsJCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCQl9CiYjNDM7CQkJbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi0mZ3Q7ZGV2LCAmYW1wO3NhZGRyLAomIzQzOwkJCQkJCQkgJmFtcDtkYWRkcik7CiYjNDM7CQkJaWYgKCFuZXdzaykKJiM0MzsJCQkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQluZXdza19sb2NrZWQgPSB0cnVlOwomIzQzOwkJfQogCQlza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTgxMywxOCAmIzQzOzk3Miw0OSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJc2tiLSZndDtzayA9IHNrOwogCQlza2ItJmd0O2Rlc3RydWN0b3IgPSBzb2NrX2VmcmVlOwogCX0KLQlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpCiYjNDM7CWlmICh1bmxpa2VseShsbGNfc2soc2tiLSZndDtzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSkgewomIzQzOwkJaWYgKG5ld3NrKSB7CiYjNDM7CQkJaWYgKGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKJiM0MzsJCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2soc2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spOwomIzQzOwkJfQomIzQzOwkJZ290byBkcm9wX3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKIAkJbGxjX2Nvbm5fcmN2KHNrLCBza2IpOwotCWVsc2UgewomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKQomIzQzOwkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwl9IGVsc2UgewogCQlkcHJpbnRrKCYjMzQ7JXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXG4mIzM0OywgX19mdW5jX18pOwogCQlsbGNfc2V0X2JhY2tsb2dfdHlwZShza2IsIExMQ19QQUNLRVQpOwotCQlpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSkKJiM0MzsJCWlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKSB7CiYjNDM7CQkJaWYgKG5ld3NrKQomIzQzOwkJCQlsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTsKIAkJCWdvdG8gZHJvcF91bmxvY2s7CiYjNDM7CQl9CiAJfQogb3V0OgomIzQzOwlpZiAobmV3c2tfbG9ja2VkKQomIzQzOwkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlzb2NrX3B1dChzayk7CiYjNDM7CWlmIChuZXdza19sb29rdXBfcmVmKQomIzQzOwkJc29ja19wdXQobmV3c2spOwogCXJldHVybjsKJiM0MztyZXRyeV91bmxvY2s6CiYjNDM7CWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJbmV3c2tfbG9ja2VkID0gZmFsc2U7CiYjNDM7CWJoX3VubG9ja19zb2NrKHNrKTsKJiM0MzsJc29ja19wdXQoc2spOwomIzQzOwlzb2NrX3B1dChuZXdzayk7CiYjNDM7CW5ld3NrID0gTlVMTDsKJiM0MzsJbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlOwomIzQzOwlnb3RvIGxvb2t1cDsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuOwpAQCAtODUyLDEyICYjNDM7MTA0Miw1MiBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiYjNDM7CXN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi0mZ3Q7c2s7CiAKIAlpZiAobGlrZWx5KGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfUEFDS0VUKSkgewotCQlpZiAobGlrZWx5KGxsYy0mZ3Q7c3RhdGUgJmd0OyAxKSkgLyogbm90IGNsb3NlZCAqLwomIzQzOwkJaWYgKG5ld3NrICZhbXA7JmFtcDsKJiM0MzsJCSAgICBhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkJICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7CiYjNDM7CQkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJCWJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spOwomIzQzOwkJCWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSAhPQomIzQzOwkJCSAgICBMTENfSU5DT01JTkdfUEVORElORykgewomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIHJldHJ5OwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8CiYjNDM7CQkJICAgIHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8CiYjNDM7CQkJICAgIGxsY19zayhuZXdzayktJmd0O3N0YXRlICZsdDsgTExDX0NPTk5fU1RBVEVfQURNKSB7CiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQkJfQogCQkJcmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7Ci0JCWVsc2UKJiM0MzsJCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtsbGNfc2sobmV3c2spLSZndDtpbmNvbWluZ19zdGF0ZSkgPT0KJiM0MzsJCQkgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpCiYjNDM7CQkJCWxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spOwomIzQzOwkJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCX0gZWxzZSBpZiAobmV3c2sgJmFtcDsmYW1wOwomIzQzOwkJCSAgIGF0b21pY19yZWFkKCZhbXA7bGxjX3NrKG5ld3NrKS0mZ3Q7aW5jb21pbmdfc3RhdGUpID09CiYjNDM7CQkJICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCQliaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTsKJiM0MzsJCQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmx0OyBMTENfQ09OTl9TVEFURV9BRE0pIHsKJiM0MzsJCQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCQlsb2NhbF9iaF9lbmFibGUoKTsKJiM0MzsJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwomIzQzOwkJCX0KJiM0MzsJCQlyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTsKJiM0MzsJCQliaF91bmxvY2tfc29jayhuZXdzayk7CiYjNDM7CQkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQl9IGVsc2UgaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpIHsKJiM0MzsJCQlyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTsKJiM0MzsJCX0gZWxzZSB7CiAJCQlnb3RvIG91dF9rZnJlZV9za2I7CiYjNDM7CQl9CiAJfSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7CiAJCS8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi8KIAkJaWYgKGxpa2VseShsbGMtJmd0O3N0YXRlICZndDsgMSkpICAvKiBub3QgY2xvc2VkICovCkBAIC04NzAsNiAmIzQzOzExMDAsMjMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIG91dDoKIAlyZXR1cm4gcmM7CiYjNDM7cmV0cnk6CiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO2xsY19zayhuZXdzayktJmd0O2luY29taW5nX3N0YXRlKSA9PQomIzQzOwkgICAgTExDX0lOQ09NSU5HX1FVRVVFRCkgewomIzQzOwkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJYmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7CiYjNDM7CQlpZiAobGxjX3NrKG5ld3NrKS0mZ3Q7c3RhdGUgJmd0Oz0gTExDX0NPTk5fU1RBVEVfQURNKQomIzQzOwkJCXJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJYmhfdW5sb2NrX3NvY2sobmV3c2spOwomIzQzOwkJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJCWdvdG8gb3V0X2tmcmVlX3NrYjsKJiM0MzsJCX0KJiM0MzsJCWJoX3VubG9ja19zb2NrKG5ld3NrKTsKJiM0MzsJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfa2ZyZWVfc2tiOwogb3V0X2tmcmVlX3NrYjoKIAlrZnJlZV9za2Ioc2tiKTsKIAlnb3RvIG91dDsKQEAgLTk2MCwxNiAmIzQzOzEyMDcsMTcgQEAgdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogLyoqCiAgKglsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldAogICoJQHNrOiAtIHNvY2tldCB0byBmcmVlCiYjNDM7ICoJQHN5bmM6IHdoZXRoZXIgdG8gc3luY2hyb25vdXNseSBzdG9wIHRpbWVycwogICoKICAqCUZyZWVzIGEgTExDIHNvY2tldAogICovCi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKQogewogCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKIAogCWxsYy0mZ3Q7c3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDOwogCS8qIFN0b3AgYWxsIChwb3NzaWJseSkgcnVubmluZyB0aW1lcnMgKi8KLQlsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTsKJiM0MzsJbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgc3luYyk7CiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0MKIAlwcmludGsoS0VSTl9JTkZPICYjMzQ7JXM6IHVuYWNrcT0lZCwgdHhxPSVkXG4mIzM0OywgX19mdW5jX18sCiAJCXNrYl9xdWV1ZV9sZW4oJmFtcDtsbGMtJmd0O3BkdV91bmFja19xKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQgZm9yIExMQyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggc2VyaWVzIHRvdWNoaW5nIGBuZXQvbGxjL2FmX2xsYy5jYCwgYG5ldC9sbGMvbGxjX2Nvbm4uY2AsIGFuZCBgaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaGAsIGFuZCB0aGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBzb2NrZXQgbGlmZXRpbWUgYW5kIGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBMTEMgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBwb2ludGluZyB0b3dhcmRzIHBvdGVudGlhbCBVQUYgb3IgcmFjZSBjb25kaXRpb24gZml4ZXMg4oCTIGEgZGVmaW5pdGUgcG9pbnQgb2YgaW50ZXJlc3QuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSB0cmFja2luZyBmb3IgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHZpYSBgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBhbmQgYGluY29taW5nX3dvcmtgLiAgT2theSwgc28gd2UgaGF2ZSB0aGVzZSBuZXcgc3RhdGUgdmFyaWFibGVzIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9uczogYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYW5kIHRoZSB3b3JrIGZ1bmN0aW9uIGBsbGNfaW5jb21pbmdfc29ja193b3JrYC4gQWxzbyBhZmZlY3RlZCBhcmUgYGxsY191aV9yZWxlYXNlYCwgYGxsY191aV9hY2NlcHRgLCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AsIGBsbGNfY29ubl9zZXJ2aWNlYCwgYGxsY19jb25uX2hhbmRsZXJgLCBhbmQgYGxsY19iYWNrbG9nX3JjdmAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBzZXQgb2YgY2hhbmdlcywgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgbmVjZXNzYXJ5LgoKRmlyc3QsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIG1vZGlmaWVkIG9yIGludHJvZHVjZWQgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlPyBObywgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSBjb25jZW50cmF0ZWQgaW50ZXJuYWxseSwgZm9jdXNlZCBvbiBzb2NrZXQgc3RhdGUgdHJhY2tpbmcgYW5kIGxvY2tpbmcsIHdoaWNoIGlzIGdvb2QuIFRoYXQgcmVkdWNlcyBzb21lIGluaXRpYWwgcmlzay4KCk5leHQsIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyAgVGhlIG5ldyB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGluIGBsbGNfY3JlYXRlX2luY29taW5nX3NvY2tgOiBgaW5jb21pbmdfbGlzdGVuZXJgIGlzIGFzc2lnbmVkLCBgaW5jb21pbmdfc3RhdGVgIGlzIHNldCB0byBgTExDX0lOQ09NSU5HX1BFTkRJTkdgLCBhbmQgYGluY29taW5nX3dvcmtgIGlzIGluaXRpYWxpemVkLiBMb29rcyBzb2xpZCBvbiB0aGF0IGZyb250LgoKVGhlbiwgZG8gd2UgaGF2ZSBhbnkgbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0ICpjb3VsZCogZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzPyAgVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBzb2NrZXQgbGlmZWN5Y2xlLCBsb2NraW5nLCBhbmQgcHJldmVudGluZyBVQUYvZG91YmxlLWZyZWUgaXNzdWVzLiBJdCBzZWVtcyB0byBiZSBzYWZlIGZyb20gdGhpcyBwZXJzcGVjdGl2ZS4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBsbGNfY29ubl9zZW5kX2RtX3JzcGAgYXMgYSBzYW5pdHkgY2hlY2ssIGp1c3QgdG8gbWFrZSBzdXJlIHdlIGRpZG4mIzM5O3QgbWlzcyBhbnl0aGluZyBzdWJ0bGUuIEl0IGFsbG9jYXRlcyBhIG5ldyBgc2tiYCwgcG9wdWxhdGVzIGl0IHdpdGggaGVhZGVycywgYW5kIHRyYW5zbWl0cyBpdC4gYGxsY19hbGxvY19mcmFtZWAsIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLCBhbmQgYGxsY19tYWNfaGRyX2luaXRgIGFsbCBoYW5kbGUgd3JpdGluZyB0byB0aGUgYHNrYmAuIFdoaWxlIHRoZSBjb2RlIHBhdGggKmxvb2tzKiBjbGVhbiwgaXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gcGVyZm9ybSBhIGRlZXBlciBkaXZlIGludG8gYGxsY19hbGxvY19mcmFtZWAgYW5kIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgdXNpbmcgdG9vbHMgdG8gZW5zdXJlIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGluIHRoZXJlLiBMZXQmIzM5O3MgZG8gdGhhdCBiZWZvcmUgZGVjaWRpbmcgdG8gc2tpcCBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX2FsbG9jX2ZyYW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19zYXAuaD0xNz12b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9sbGNfc2FwLmgtMTgtXHRcdFx0dW5zaWduZWQgY2hhciBwcmltKTtcbmluY2x1ZGUvbmV0L2xsY19zYXAuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0yMC1cdFx0XHRcdHU4IHR5cGUsIHUzMiBkYXRhX3NpemUpO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTE5NS1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzoxOTY6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTE5Ny1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjIwLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjIyMTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMjIyLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yNDYtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjQ3Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNDgtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTI2Nz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9mcm1yX3JzcF9mX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjc5LVx0XHRmX2JpdCA9IDA7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjgwOlx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19jX2FjLmMtMjgxLVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY19mcm1yX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MzAxPWludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTMwNC1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzozMDU6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19jX2FjLmMtMzA2LVx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfZnJtcl9pbmZvKSk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTMyOD1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zMzUtXHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcdTAwMjZmX2JpdCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MzM2Olx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXG5uZXQvbGxjL2xsY19jX2FjLmMtMzM3LVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY19mcm1yX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NDIxPWludCBsbGNfY29ubl9hY19yZXNlbmRfaV94eHhfeF9zZXRfMF9vcl9zZW5kX3JyKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDI3LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjQyODpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNDI5LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDYyLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjQ2MzpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNDY0LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00ODM9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDg2LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjQ4NzpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNDg4LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01MDc9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTEwLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjUxMTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTEyLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTM0LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjUzNTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTM2LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01NTU9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTU4LVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjU1OTpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTYwLVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01Nzk9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTgyLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjU4MzpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTg0LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTYxOC1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo2MTk6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTYyMC1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NjM5PWludCBsbGNfY29ubl9hY19zZW5kX3JyX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNjQyLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjY0MzpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNjQ0LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02NjM9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02NjYtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NjY3Olx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy02NjgtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTY4OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02OTEtXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6NjkyOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy02OTMtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTcxMj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTcxNS1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo3MTY6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTcxNy1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzM2PWludCBsbGNfY29ubl9hY19zZW5kX2Fja194eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTczOS1cdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo3NDA6XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xubmV0L2xsYy9sbGNfY19hYy5jLTc0MS1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzcwPWludCBsbGNfY29ubl9hY19zZW5kX3NhYm1lX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzczLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjc3NDpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzc1LVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03OTg9aW50IGxsY19jb25uX2FjX3NlbmRfdWFfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy04MDItXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG5uZXQvbGxjL2xsY19jX2FjLmM6ODAzOlx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy04MDQtXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTk1OT1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfcnJfcnNwX2Zfc2V0X2Fja3BmKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtOTYzLVx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xubmV0L2xsYy9sbGNfY19hYy5jOjk2NDpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XG5uZXQvbGxjL2xsY19jX2FjLmMtOTY1LVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz04NjM9c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtODY4LVxubmV0L2xsYy9sbGNfY29ubi5jOjg2OTpcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xubmV0L2xsYy9sbGNfY29ubi5jLTg3MC1cdGlmICghbnNrYilcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmM9MTA1PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3hpZF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTExMy1cdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcdTAwMjZkc2FwKTtcbm5ldC9sbGMvbGxjX3NfYWMuYzoxMTQ6XHRuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxubmV0L2xsYy9sbGNfc19hYy5jLTExNS1cdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmM9MTQ4PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3Rlc3RfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYy0xNjMtXHRkYXRhX3NpemUgPSBudG9ocyhldGhfaGRyKHNrYiktXHUwMDNlaF9wcm90bykgLSAzO1xubmV0L2xsYy9sbGNfc19hYy5jOjE2NDpcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XG5uZXQvbGxjL2xsY19zX2FjLmMtMTY1LVx0aWYgKCFuc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3NhcC5jPTIyPXN0YXRpYyBpbnQgbGxjX21hY19oZWFkZXJfbGVuKHVuc2lnbmVkIHNob3J0IGRldnR5cGUpXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtMzItLyoqXG5uZXQvbGxjL2xsY19zYXAuYzozMzogKlx0bGxjX2FsbG9jX2ZyYW1lIC0gYWxsb2NhdGVzIHNrX2J1ZmYgZm9yIGZyYW1lXG5uZXQvbGxjL2xsY19zYXAuYy0zNC0gKlx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXG5uZXQvbGxjL2xsY19zYXAuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9sbGMvbGxjX3NhcC5jLTQzLVx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM9NDI9c3RhdGljIGludCBsbGNfc3RhdGlvbl9hY19zZW5kX3hpZF9yKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTQ1LVx0aW50IHJjID0gMTtcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo0NjpcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTQ3LVx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTtcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM9NjY9c3RhdGljIGludCBsbGNfc3RhdGlvbl9hY19zZW5kX3Rlc3RfcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYy03Ny1cdGRhdGFfc2l6ZSA9IG50b2hzKGV0aF9oZHIoc2tiKS1cdTAwM2VoX3Byb3RvKSAtIDM7XG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6Nzg6XHRuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKE5VTEwsIHNrYi1cdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCBkYXRhX3NpemUpO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTc5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIExMQyBGcmFtZSBBbGxvY2F0aW9uKioKCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtpbmcgaW50byB0aGUgbmV0d29yayB2aWEgdGhlIExMQyBwcm90b2NvbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgbGxjX2FsbG9jX2ZyYW1lYCBpbiBgbmV0L2xsYy9sbGNfc2FwLmNgIGlzIGhhbmRsaW5nIG1lbW9yeSBhbGxvY2F0aW9uIGNvcnJlY3RseSwgc3BlY2lmaWNhbGx5IHRoZSAqaW5pdGlhbGl6YXRpb24qIG9mIHRoZSBTb2NrZXQgQnVmZmVyIChza2IpLiBJJiMzOTt2ZSBnb3QgdG8gY29uZmlybSBpZiBpdCYjMzk7cyB6ZXJvaW5nIG91dCB0aGUgYWxsb2NhdGVkIGBza2JgIGJlZm9yZSB1c2UuIElmIGl0ICpkb2VzbiYjMzk7dCosIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY2xhc3NpYyBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHZ1bG5lcmFiaWxpdHksIGFsYmVpdCB3aXRoaW4gYSBmYWlybHkgbmljaGUgcHJvdG9jb2wgc3RhY2suIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJiMzOTt0IG1ha2luZyBpdHMgd2F5IG9udG8gdGhlIHdpcmUuIExldCYjMzk7cyBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xsY19hbGxvY19mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX3NhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX3NhcC5jPTIyPXN0YXRpYyBpbnQgbGxjX21hY19oZWFkZXJfbGVuKHVuc2lnbmVkIHNob3J0IGRldnR5cGUpXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtMzItLyoqXG5uZXQvbGxjL2xsY19zYXAuYzozMzogKlx0bGxjX2FsbG9jX2ZyYW1lIC0gYWxsb2NhdGVzIHNrX2J1ZmYgZm9yIGZyYW1lXG5uZXQvbGxjL2xsY19zYXAuYy0zNC0gKlx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXG4tLVxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXG5uZXQvbGxjL2xsY19zYXAuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9sbGMvbGxjX3NhcC5jLTQzLVx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBsbGNfc2FwLmNgIC0gTGluZSA0MioqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBuZXQvbGxjL2xsY19zYXAuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgNDIuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBwYXJ0aWN1bGFyIHBvaW50IGluIHRoZSBmaWxlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCB0aGUgU2VydmljZSBBY2Nlc3MgUG9pbnQgKFNBUCkgY29uZmlndXJhdGlvbiBvciBoYW5kbGluZy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBtYXliZSByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIExMQyBTQVAgdGFibGUgb3IgcmVnaXN0ZXJpbmcgYSBuZXcgU0FQLiBJdCBjb3VsZCBhbHNvIGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBvciBmdW5jdGlvbiBjYWxsIHJlbGV2YW50IHRvIFNBUCBtYW5hZ2VtZW50LiBMaW5lIDQyLi4uIGhtbSwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLiBNeSBmYW1pbGlhcml0eSB3aXRoIHRoZSBMTEMgcHJvdG9jb2wgYW5kIExpbnV4IG5ldHdvcmtpbmcgc3RhY2sgc2hvdWxkIGhlbHAgbWUgY29udGV4dHVhbGl6ZSBpdCByYXBpZGx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUmIzM5O3MgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX3NhcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMzpcdCAqXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcbiAgMzQ6XHQgKlx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXG4gIDM1Olx0ICpcdEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRoaXMgc2tiIHdpbGwgYmUgc2VudCBvdmVyXG4gIDM2Olx0ICpcdEB0eXBlOiBwZHUgdHlwZSB0byBhbGxvY2F0ZVxuICAzNzpcdCAqXHRAZGF0YV9zaXplOiBkYXRhIHNpemUgdG8gYWxsb2NhdGVcbiAgMzg6XHQgKlxuICAzOTpcdCAqXHRBbGxvY2F0ZXMgYW4gc2tfYnVmZiBmb3IgZnJhbWUgYW5kIGluaXRpYWxpemVzIHNrX2J1ZmYgZmllbGRzLlxuICA0MDpcdCAqXHRSZXR1cm5zIGFsbG9jYXRlZCBza2Igb3IgJU5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LlxuICA0MTpcdCAqL1xuICA0MjpcdHN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICA0MzpcdFx0XHRcdFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcbiAgNDQ6XHR7XG4gIDQ1Olx0XHRpbnQgaGxlbiA9IHR5cGUgPT0gTExDX1BEVV9UWVBFX1UgPyAzIDogNDtcbiAgNDY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDQ3Olx0XG4gIDQ4Olx0XHRobGVuICYjNDM7PSBsbGNfbWFjX2hlYWRlcl9sZW4oZGV2LVx1MDAzZXR5cGUpO1xuICA0OTpcdFx0c2tiID0gYWxsb2Nfc2tiKGhsZW4gJiM0MzsgZGF0YV9zaXplLCBHRlBfQVRPTUlDKTtcbiAgNTA6XHRcbiAgNTE6XHRcdGlmIChza2IpIHtcbiAgNTI6XHRcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiAgNTM6XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBobGVuKTtcbiAgNTQ6XHRcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gIDU1Olx0XHRcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gIDU2Olx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTtcbiAgNTc6XHRcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gZGV2O1xuICA1ODpcdFx0XHRpZiAoc2sgIT0gTlVMTClcbiAgNTk6XHRcdFx0XHRza2Jfc2V0X293bmVyX3coc2tiLCBzayk7XG4gIDYwOlx0XHR9XG4gIDYxOlx0XHRyZXR1cm4gc2tiO1xuICA2MjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MDcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTExDIEZyYW1lIEFsbG9jYXRpb24qKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoaXMgYGxsY19hbGxvY19mcmFtZWAgZnVuY3Rpb24sIGFzIGZhciBhcyBJIGNhbiBzZWUuIEl0IHVzZXMgYGFsbG9jX3NrYmAsIHdoaWNoIEkga25vdywgZG9lc24mIzM5O3QgemVybyBvdXQgdGhlIGRhdGEgYnVmZmVyLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCByaWdodCBvZmYgdGhlIGJhdCwgYXMgd2UmIzM5O3JlIHByb2JhYmx5IGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZXRoaW5nIGFib3V0IHRoYXQsIGRlcGVuZGluZyBvbiB0aGUgdXNhZ2UuCgpOb3csIHNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGBsbGNfY29ubl9zZW5kX2RtX3JzcGAgYW5kIGl0IGNhbGxzIGBsbGNfYWxsb2NfZnJhbWVgIHdpdGggYGRhdGFfc2l6ZWAgYXMgMCwgd2hpY2ggc3VnZ2VzdHMgaXQgZXhwZWN0cyBhbiBlbXB0eSBkYXRhIGJ1ZmZlciBpbiB0aGUgU0tCLiBUaGUgaGVhZGVyIHNpemUgaXMgY29tcHV0ZWQgdG8gYmUgMyBieXRlcyAoSSBhc3N1bWUgZm9yIHRoZSBMTEMgaGVhZGVyIGl0c2VsZikgcGx1cyBgbWFjX2hlYWRlcl9sZW5gLiBNYWtlcyBzZW5zZSwgY29uc2lkZXJpbmcgdGhlIExMQyBhbmQgTUFDIGxheWVycy4KCk5leHQsIHdlIGFyZSBjYWxsaW5nIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLCBhbmQgYGxsY19tYWNfaGRyX2luaXRgLiBTaW5jZSBgZGF0YV9zaXplYCBpcyB6ZXJvLCB0aGVzZSBmdW5jdGlvbnMgbmVlZCB0byBiZSBleGFtaW5lZCBjYXJlZnVsbHkuIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGUgaGVhZGVycyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIHRoYXQgbm90aGluZyBpcyBiZWluZyBpbmFkdmVydGVudGx5IHdyaXR0ZW4gKmludG8qIHRoZSBkYXRhIGJ1ZmZlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYGxsY19wZHVfaGVhZGVyX2luaXRgIGFuZCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAuIFRoZXkmIzM5O3JlIHRoZSBjcml0aWNhbCBwb2ludHMgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhleSBkbywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgZW1wdHkgZGF0YSBidWZmZXIuIEFyZSB0aGV5IGluaXRpYWxpemluZyBoZWFkZXJzICpiZWZvcmUqIHRoZSBkYXRhIGJ1ZmZlcj8gQXJlIHRoZXkgd3JpdGluZyB0byB0aGUgcmlnaHQgb2Zmc2V0IGluIHRoZSBTS0I/IE9yIGFyZSB3ZSBnb2luZyB0byBzZWUgc29tZSBnYXJiYWdlIGRhdGE/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlIGRlZXBseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX3BkdV9oZWFkZXJfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGNfcGR1Lmg9MjEyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIxNy0vKipcbmluY2x1ZGUvbmV0L2xsY19wZHUuaDoyMTg6ICpcdGxsY19wZHVfaGVhZGVyX2luaXQgLSBpbml0aWFsaXplcyBwZHUgaGVhZGVyXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjE5LSAqXHRAc2tiOiBpbnB1dCBza2IgdGhhdCBoZWFkZXIgbXVzdCBiZSBzZXQgaW50byBpdC5cbi0tXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtMjI2LSAqL1xuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjIyNzpzdGF0aWMgaW5saW5lIHZvaWQgbGxjX3BkdV9oZWFkZXJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIyOC1cdFx0XHRcdCAgICAgICB1OCBzc2FwLCB1OCBkc2FwLCB1OCBjcilcbi0tXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg9MzcwPXN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2luaXRfYXNfeGlkX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0zODMtXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg6Mzg0Olx0Lyogbm8gbmVlZCB0byBwdXNoL3B1dCBzaW5jZSBsbGNfcGR1X2hlYWRlcl9pbml0KCkgaGFzIGFscmVhZHlcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0zODUtXHQgKiBwdXNoZWQgMyAmIzQzOyAzIGJ5dGVzXG4tLVxubmV0LzgwMi9nYXJwLmM9MjUwPXN0YXRpYyB2b2lkIGdhcnBfcGR1X3F1ZXVlKHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwKVxuLS1cbm5ldC84MDIvZ2FycC5jLTI1Ny1cbm5ldC84MDIvZ2FycC5jOjI1ODpcdGxsY19wZHVfaGVhZGVyX2luaXQoYXBwLVx1MDAzZXBkdSwgTExDX1BEVV9UWVBFX1UsIExMQ19TQVBfQlNQQU4sXG5uZXQvODAyL2dhcnAuYy0yNTktXHRcdFx0ICAgIExMQ19TQVBfQlNQQU4sIExMQ19QRFVfQ01EKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmM9MzU9c3RhdGljIHZvaWQgYnJfc2VuZF9icGR1KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jLTUwLVxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jOjUxOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VLCBMTENfU0FQX0JTUEFOLFxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jLTUyLVx0XHRcdCAgICBMTENfU0FQX0JTUEFOLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTE5Mj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kaXNjX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjAwLVxubmV0L2xsYy9sbGNfY19hYy5jOjIwMTpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtMjAyLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTIxNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTIyNy1cdFx0bGxjX3BkdV9kZWNvZGVfcGZfYml0KHNrYiwgXHUwMDI2Zl9iaXQpO1xubmV0L2xsYy9sbGNfY19hYy5jOjIyODpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtMjI5LVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTI0Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTI1MS1cbm5ldC9sbGMvbGxjX2NfYWMuYzoyNTI6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTI1My1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yNjc9aW50IGxsY19jb25uX2FjX3NlbmRfZnJtcl9yc3BfZl9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTI4NC1cbm5ldC9sbGMvbGxjX2NfYWMuYzoyODU6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTI4Ni1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0zMDE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9mcm1yX3JzcF9mX3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMzExLVxubmV0L2xsYy9sbGNfY19hYy5jOjMxMjpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtMzEzLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTMyOD1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zNDEtXG5uZXQvbGxjL2xsY19jX2FjLmM6MzQyOlx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNDMtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MzU4PWludCBsbGNfY29ubl9hY19zZW5kX2lfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zNjMtXG5uZXQvbGxjL2xsY19jX2FjLmM6MzY0Olx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9JLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNjUtXHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTM3Nj1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfaV9jbWRfcF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTM4MS1cbm5ldC9sbGMvbGxjX2NfYWMuYzozODI6XHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX0ksIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTM4My1cdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9Mzk0PWludCBsbGNfY29ubl9hY19zZW5kX2lfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zOTktXG5uZXQvbGxjL2xsY19jX2FjLmM6NDAwOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9JLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy00MDEtXHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQyMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2lfeHh4X3hfc2V0XzBfb3Jfc2VuZF9ycihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTQzMi1cbm5ldC9sbGMvbGxjX2NfYWMuYzo0MzM6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTQzNC1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDY3LVxubmV0L2xsYy9sbGNfY19hYy5jOjQ2ODpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNDY5LVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQ4Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00OTEtXG5uZXQvbGxjL2xsY19jX2FjLmM6NDkyOlx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy00OTMtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NTA3PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTUxNS1cbm5ldC9sbGMvbGxjX2NfYWMuYzo1MTY6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTUxNy1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTM5LVxubmV0L2xsYy9sbGNfY19hYy5jOjU0MDpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNTQxLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTU1NT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01NjMtXG5uZXQvbGxjL2xsY19jX2FjLmM6NTY0Olx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjUtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NTc5PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTU4Ny1cbm5ldC9sbGMvbGxjX2NfYWMuYzo1ODg6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTU4OS1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTYyMy1cbm5ldC9sbGMvbGxjX2NfYWMuYzo2MjQ6XHRcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfY19hYy5jLTYyNS1cdFx0XHRcdCAgICBsbGMtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02Mzk9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02NDctXG5uZXQvbGxjL2xsY19jX2FjLmM6NjQ4Olx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDktXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NjYzPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNjcyLVxubmV0L2xsYy9sbGNfY19hYy5jOjY3MzpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNjc0LVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTY4OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy02OTYtXG5uZXQvbGxjL2xsY19jX2FjLmM6Njk3Olx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy02OTgtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzEyPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIwLVxubmV0L2xsYy9sbGNfY19hYy5jOjcyMTpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIyLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTczNj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy03NDQtXG5uZXQvbGxjL2xsY19jX2FjLmM6NzQ1Olx0XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy03NDYtXHRcdFx0XHQgICAgbGxjLVx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzcwPWludCBsbGNfY29ubl9hY19zZW5kX3NhYm1lX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzgxLVx0XHRcdGRtYWMgPSBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyO1xubmV0L2xsYy9sbGNfY19hYy5jOjc4MjpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtNzgzLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTc5OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF91YV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTgwOS1cdFx0bnNrYi1cdTAwM2VkZXYgPSBsbGMtXHUwMDNlZGV2O1xubmV0L2xsYy9sbGNfY19hYy5jOjgxMDpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtODExLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTkwND1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfaV9yc3BfZl9zZXRfYWNrcGYoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy05MTAtXG5uZXQvbGxjL2xsY19jX2FjLmM6OTExOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9JLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX2NfYWMuYy05MTItXHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTk1OT1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfcnJfcnNwX2Zfc2V0X2Fja3BmKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtOTY4LVxubmV0L2xsYy9sbGNfY19hYy5jOjk2OTpcdFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jX2FjLmMtOTcwLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzItXG5uZXQvbGxjL2xsY19jb25uLmM6ODczOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsXG5uZXQvbGxjL2xsY19jb25uLmMtODc0LVx0XHRcdCAgICBzYWRkci1cdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfb3V0cHV0LmM9NTg9aW50IGxsY19idWlsZF9hbmRfc2VuZF91aV9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02MS1cdGludCByYztcbm5ldC9sbGMvbGxjX291dHB1dC5jOjYyOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbm5ldC9sbGMvbGxjX291dHB1dC5jLTYzLVx0XHRcdCAgICBkc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfc19hYy5jPTY2PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3VpKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTY5LVxubmV0L2xsYy9sbGNfc19hYy5jOjcwOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VLCBldi1cdTAwM2VzYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfc19hYy5jLTcxLVx0XHRcdCAgICBldi1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XG4tLVxubmV0L2xsYy9sbGNfc19hYy5jPTg2PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3hpZF9jKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTg5LVxubmV0L2xsYy9sbGNfc19hYy5jOjkwOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VX1hJRCwgZXYtXHUwMDNlc2FkZHIubHNhcCxcbm5ldC9sbGMvbGxjX3NfYWMuYy05MS1cdFx0XHQgICAgZXYtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xMDU9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfeGlkX3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmMtMTE3LVx0XHRnb3RvIG91dDtcbm5ldC9sbGMvbGxjX3NfYWMuYzoxMTg6XHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCwgZHNhcCxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xMTktXHRcdFx0ICAgIExMQ19QRFVfUlNQKTtcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmM9MTM3PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3Rlc3RfYyhzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYy0xNDAtXG5uZXQvbGxjL2xsY19zX2FjLmM6MTQxOlx0bGxjX3BkdV9oZWFkZXJfaW5pdChza2IsIExMQ19QRFVfVFlQRV9VLCBldi1cdTAwM2VzYWRkci5sc2FwLFxubmV0L2xsYy9sbGNfc19hYy5jLTE0Mi1cdFx0XHQgICAgZXYtXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTE2Ni1cdFx0Z290byBvdXQ7XG5uZXQvbGxjL2xsY19zX2FjLmM6MTY3Olx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVx1MDAzZWxhZGRyLmxzYXAsIGRzYXAsXG5uZXQvbGxjL2xsY19zX2FjLmMtMTY4LVx0XHRcdCAgICBMTENfUERVX1JTUCk7XG4tLVxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTQyPXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF94aWRfcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYy01Mi1cdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcdTAwMjZkc2FwKTtcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo1MzpcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIDAsIGRzYXAsIExMQ19QRFVfUlNQKTtcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy01NC1cdGxsY19wZHVfaW5pdF9hc194aWRfcnNwKG5za2IsIExMQ19YSURfTlVMTF9DTEFTU18yLCAxMjcpO1xuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYz02Nj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfdGVzdF9yKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTgzLVx0bGxjX3BkdV9kZWNvZGVfc3NhcChza2IsIFx1MDAyNmRzYXApO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jOjg0Olx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgMCwgZHNhcCwgTExDX1BEVV9SU1ApO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTg1LVx0bGxjX3BkdV9pbml0X2FzX3Rlc3RfcnNwKG5za2IsIHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDY4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBMTEMgUERVIEhlYWRlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBpbnRvIHRoZSB3ZWVkcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBsbGNfcGR1X2hlYWRlcl9pbml0YCBmcm9tIGBpbmNsdWRlL25ldC9sbGNfcGR1LmhgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaGVhZGVyIGlzIGluaXRpYWxpemVkOyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIEkmIzM5O2xsIG5lZWQgdG8gcmV2aXNpdCB0aGlzIGNvZGUgcGF0aCBmb3IgW21lbnRpb24gYSBzcGVjaWZpYyB1c2UgY2FzZSByZWxhdGVkIHRvIHRoZSB1c2VyJiMzOTtzIGZpZWxkLCBlLmcuLCAmIzM0O215IHVwY29taW5nIHdvcmsgb24gY29uZ2VzdGlvbiBjb250cm9sIGluIExMQyBmcmFtZXMsJiMzNDsgb3IgJiMzNDtkZWJ1Z2dpbmcgYSByZWNlbnQgaXNzdWUgd2l0aCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb24gdGhpcyBwYXJ0aWN1bGFyIHBsYXRmb3JtJiMzNDtdLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZCwgYXMgaXMgdHlwaWNhbCBmb3IgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc3VidGxldGllcyBpbiB0aGUgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBlc3BlY2lhbGx5IGFueSBiaXRmaWVsZCBtYW5pcHVsYXRpb25zIG9yIHBvaW50ZXIgYXNzaWdubWVudHMgdGhhdCBtaWdodCBiZSBjcml0aWNhbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yLCBldmVuIHdvcnNlLCBidWdzIHRoYXQgY291bGQgYmUgbHVya2luZy4gSSYjMzk7bGwgYWxzbyBiZSBtZW50YWxseSBtYXBwaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdG8gaG93IHRoZSBMTEMgUERVIGlzIHN1YnNlcXVlbnRseSB1c2VkLCBzbyBJIGNhbiBlbnN1cmUgdGhlIGludmFyaWFudHMgSSYjMzk7bSBleHBlY3RpbmcgYXJlIGJlaW5nIHNldCB1cCBjb3JyZWN0bHkgYW5kIG1haW50YWluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbGxjX3BkdS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTg6XHQgKlx0bGxjX3BkdV9oZWFkZXJfaW5pdCAtIGluaXRpYWxpemVzIHBkdSBoZWFkZXJcbiAyMTk6XHQgKlx0QHNrYjogaW5wdXQgc2tiIHRoYXQgaGVhZGVyIG11c3QgYmUgc2V0IGludG8gaXQuXG4gMjIwOlx0ICpcdEB0eXBlOiB0eXBlIG9mIFBEVSAoVSwgSSBvciBTKS5cbiAyMjE6XHQgKlx0QHNzYXA6IHNvdXJjZSBzYXAuXG4gMjIyOlx0ICpcdEBkc2FwOiBkZXN0aW5hdGlvbiBzYXAuXG4gMjIzOlx0ICpcdEBjcjogY29tbWFuZC9yZXNwb25zZSBiaXQgKDAgb3IgMSkuXG4gMjI0Olx0ICpcbiAyMjU6XHQgKlx0VGhpcyBmdW5jdGlvbiBzZXRzIERTQVAsIFNTQVAgYW5kIGNvbW1hbmQvUmVzcG9uc2UgYml0IGluIExMQyBoZWFkZXIuXG4gMjI2Olx0ICovXG4gMjI3Olx0c3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfaGVhZGVyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcbiAyMjg6XHRcdFx0XHRcdCAgICAgICB1OCBzc2FwLCB1OCBkc2FwLCB1OCBjcilcbiAyMjk6XHR7XG4gMjMwOlx0XHRpbnQgaGxlbiA9IDQ7IC8qIGRlZmF1bHQgdmFsdWUgZm9yIEkgYW5kIFMgdHlwZXMgKi9cbiAyMzE6XHRcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHU7XG4gMjMyOlx0XG4gMjMzOlx0XHRzd2l0Y2ggKHR5cGUpIHtcbiAyMzQ6XHRcdGNhc2UgTExDX1BEVV9UWVBFX1U6XG4gMjM1Olx0XHRcdGhsZW4gPSAzO1xuIDIzNjpcdFx0XHRicmVhaztcbiAyMzc6XHRcdGNhc2UgTExDX1BEVV9UWVBFX1VfWElEOlxuIDIzODpcdFx0XHRobGVuID0gNjtcbiAyMzk6XHRcdFx0YnJlYWs7XG4gMjQwOlx0XHR9XG4gMjQxOlx0XG4gMjQyOlx0XHRza2JfcHVzaChza2IsIGhsZW4pO1xuIDI0MzpcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gMjQ0Olx0XHRwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xuIDI0NTpcdFx0cGR1LVx1MDAzZWRzYXAgPSBkc2FwO1xuIDI0NjpcdFx0cGR1LVx1MDAzZXNzYXAgPSBzc2FwO1xuIDI0NzpcdFx0cGR1LVx1MDAzZXNzYXAgfD0gY3I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjg3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqQW5hbHl6aW5nIHRoZSBMTEMgUERVIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gb2YgY29kZS4gRmlyc3QsIGl0JiMzOTtzIHNldHRpbmcgdGhlIGBwZHUtJmd0O2RzYXBgIGFuZCBgcGR1LSZndDtzc2FwYCB2YWx1ZXMuIE1ha2VzIHNlbnNlOyB0aGVzZSBhcmUgdGhlIERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50IGFuZCBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQsIGNydWNpYWwgZm9yIGFkZHJlc3NpbmcgaW4gdGhlIExvZ2ljYWwgTGluayBDb250cm9sIGxheWVyLiBOb3csIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBQRFUgc3RydWN0dXJlIHNwZWNpZmljYWxseSBhcyBhICYjMzQ7RE0gUmVzcG9uc2UsJiMzNDsgbGlrZWx5IGEgJiMzNDtEaXNjb25uZWN0IE1vZGUmIzM0OyByZXNwb25zZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAgZnVuY3Rpb24gY2FsbCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBzaGFwaW5nIHRoZSBQRFUgZm9yIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiByZXNwb25zZS4gSXMgaXQgc2V0dGluZyBmbGFncz8gRmlsbGluZyBpbiBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIHRoZSBQRFU/IEkgbmVlZCB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX3BkdV9pbml0X2FzX2RtX3JzcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGNfcGR1Lmg9NDMwPXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdCk7XG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg6NDMxOnZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmX2JpdCk7XG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtNDMyLXZvaWQgbGxjX3BkdV9pbml0X2FzX2ZybXJfcnNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsbGNfcGR1X3NuICpwcmV2X3BkdSxcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjI5LVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjMwOlx0XHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMzEtXHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MjQzPWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMjUzLVx0XHRcdFx0ICAgIGxsYy1cdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjU0Olx0XHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIDEpO1xubmV0L2xsYy9sbGNfY19hYy5jLTI1NS1cdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz04NjM9c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19jb25uLmMtODc0LVx0XHRcdCAgICBzYWRkci1cdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XG5uZXQvbGxjL2xsY19jb25uLmM6ODc1Olx0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XG5uZXQvbGxjL2xsY19jb25uLmMtODc2LVx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHNhZGRyLVx1MDAzZW1hYyk7XG4tLVxubmV0L2xsYy9sbGNfcGR1LmM9MTc4PXZvaWQgbGxjX3BkdV9pbml0X2FzX3NhYm1lX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwX2JpdClcbi0tXG5uZXQvbGxjL2xsY19wZHUuYy0xODctLyoqXG5uZXQvbGxjL2xsY19wZHUuYzoxODg6ICpcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AgLSBidWlsZHMgRE0gcmVzcG9uc2UgcGR1XG5uZXQvbGxjL2xsY19wZHUuYy0xODktICpcdEBza2I6IEFkZHJlc3Mgb2YgdGhlIHNrYiB0byBidWlsZFxuLS1cbm5ldC9sbGMvbGxjX3BkdS5jLTE5My0gKi9cbm5ldC9sbGMvbGxjX3BkdS5jOjE5NDp2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpXG5uZXQvbGxjL2xsY19wZHUuYy0xOTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ3MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9sbGMvbGxjX3BkdS5jYCBhbmQgc3BlY2lmaWNhbGx5IGRpc3NlY3QgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLiBUaGlzIGZ1bmN0aW9uJiMzOTtzIG5hbWUgc2NyZWFtcyAmIzM0O2luaXRpYWxpemluZyBhIFByb3RvY29sIERhdGEgVW5pdCAoUERVKSBhcyBhIERpc2Nvbm5lY3QgTW9kZSAoRE0pIHJlc3BvbnNlLiYjMzQ7IFNvLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHNldHVwIGZvciBhIFBEVSB0aGF0JiMzOTtzIGFja25vd2xlZGdpbmcgYSBkaXNjb25uZWN0aW9uIHJlcXVlc3QuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQgZmllbGRzIGl0IHBvcHVsYXRlcywgaG93IGl0IGhhbmRsZXMgdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24gKHNvdXJjZSBhbmQgZGVzdGluYXRpb24gTUFDcyBwcm9iYWJseSksIGFuZCB3aGF0IGZsYWdzIG9yIGNvbnRyb2wgYml0cyBpdCBzZXRzIHRvIHNpZ25hbCB0aGUgRE0gc3RhdHVzLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IHJldXNlcyBhbnkgZXhpc3RpbmcgUERVIGluaXRpYWxpemF0aW9uIG1lY2hhbmlzbXMgb3IgaWYgaXQmIzM5O3MgYSBkZWRpY2F0ZWQgZnVuY3Rpb24gZm9yIHRoaXMgc3BlY2lmaWMgcmVzcG9uc2UgdHlwZS4gSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX3BkdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTQ6XHR2b2lkIGxsY19wZHVfaW5pdF9hc19kbV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZl9iaXQpXG4gMTk1Olx0e1xuIDE5NjpcdFx0c3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7XG4gMTk3Olx0XG4gMTk4Olx0XHRwZHUtXHUwMDNlY3RybF8xICA9IExMQ19QRFVfVFlQRV9VO1xuIDE5OTpcdFx0cGR1LVx1MDAzZWN0cmxfMSB8PSBMTENfMl9QRFVfUlNQX0RNO1xuIDIwMDpcdFx0cGR1LVx1MDAzZWN0cmxfMSB8PSAoKGZfYml0IFx1MDAyNiAxKSBcdTAwM2NcdTAwM2MgNCkgXHUwMDI2IExMQ19VX1BGX0JJVF9NQVNLO1xuIDIwMTpcdH1cbiAyMDI6XHRcbiAyMDM6XHQvKipcbiAyMDQ6XHQgKlx0bGxjX3BkdV9pbml0X2FzX2ZybXJfcnNwIC0gYnVpbGRzIEZSTVIgcmVzcG9uc2UgUERVXG4gMjA1Olx0ICpcdEBza2I6IEFkZHJlc3Mgb2YgdGhlIGZyYW1lIHRvIGJ1aWxkXG4gMjA2Olx0ICpcdEBwcmV2X3BkdTogVGhlIHJlamVjdGVkIFBEVSBmcmFtZVxuIDIwNzpcdCAqXHRAZl9iaXQ6IFRoZSBGIGJpdCB0byBzZXQgaW4gdGhlIFBEVVxuIDIwODpcdCAqXHRAdnM6IHR4IHN0YXRlIHZhcmkgdmFsdWUgZm9yIHRoZSBkYXRhIGxpbmsgY29ubiBhdCB0aGUgcmVqZWN0aW5nIExMQ1xuIDIwOTpcdCAqXHRAdnI6IHJ4IHN0YXRlIHZhciB2YWx1ZSBmb3IgdGhlIGRhdGEgbGluayBjb25uIGF0IHRoZSByZWplY3RpbmcgTExDXG4gMjEwOlx0ICpcdEB2enl4dzogY29tcGxldGVseSBkZXNjcmliZWQgaW4gdGhlIElFRUUgU3RkIDgwMi4yIGRvY3VtZW50IChQZyA1NSlcbiAyMTE6XHQgKlxuIDIxMjpcdCAqXHRCdWlsZHMgYSBwZHUgZnJhbWUgYXMgYSBGUk1SIHJlc3BvbnNlLlxuIDIxMzpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE4NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSBwcm9jZXNzaW5nIHRoaXMgbG9naWM6CgoqKkxMQyBQRFUgSW5pdGlhbGl6YXRpb24gLSBBIFF1aWNrIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgIGZ1bmN0aW9uIHdvcmtzLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGFjdGlvbiBpcyBzZXR0aW5nIHRoZSBgcGR1LSZndDtjdHJsXzFgIGZpZWxkLCB3aGljaCBJIGtub3cgaXMgYSBjcnVjaWFsIGNvbnRyb2wgYnl0ZSBpbiB0aGUgTExDIGZyYW1lLiBUaGlzIG1lYW5zLCBhZnRlciB0aGlzIGZ1bmN0aW9uIGV4ZWN1dGVzLCBJIGNhbiBleHBlY3QgdGhhdCBgcGR1LSZndDtkc2FwYCwgYHBkdS0mZ3Q7c3NhcGAsICphbmQqIGBwZHUtJmd0O2N0cmxfMWAgd2lsbCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIE5pY2UgYW5kIGVmZmljaWVudC4KClNwZWNpZmljYWxseSwgZm9yIHRoZSBgTExDX1BEVV9UWVBFX1VgIHR5cGUgZnJhbWVzLCB0aGlzIGFsc28gc2V0cyB0aGUgaGVhZGVyIGxlbmd0aCwgYGhsZW5gIHRvIDMuIFNvLCBmb3IgdGhpcyB0eXBlIG9mIGZyYW1lLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIHRocmVlIGJ5dGVzIGFyZSBzZXQgdXAgY29ycmVjdGx5OiBgcGR1LSZndDtkc2FwYCwgYHBkdS0mZ3Q7c3NhcGAsIGFuZCBgcGR1LSZndDtjdHJsXzFgLiBUaGVuLCB0aGUgY29kZSBjYWxscyBgbGxjX21hY19oZHJfaW5pdGAgd2hpY2ggSSYjMzk7bGwgbmVlZCB0byBjaGVjaywgYnV0IGxvb2tzIGxpa2UgaXQgaGFuZGxlcyB0aGUgTUFDIGhlYWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX21hY19oZHJfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGMuaD05ND1pbnQgbGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LFxuLS1cbmluY2x1ZGUvbmV0L2xsYy5oLTk2LVxuaW5jbHVkZS9uZXQvbGxjLmg6OTc6aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2EsXG5pbmNsdWRlL25ldC9sbGMuaC05OC1cdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSk7XG4tLVxubmV0LzgwMi9nYXJwLmM9MjUwPXN0YXRpYyB2b2lkIGdhcnBfcGR1X3F1ZXVlKHN0cnVjdCBnYXJwX2FwcGxpY2FudCAqYXBwKVxuLS1cbm5ldC84MDIvZ2FycC5jLTI2MC1cdGxsY19wZHVfaW5pdF9hc191aV9jbWQoYXBwLVx1MDAzZXBkdSk7XG5uZXQvODAyL2dhcnAuYzoyNjE6XHRsbGNfbWFjX2hkcl9pbml0KGFwcC1cdTAwM2VwZHUsIGFwcC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG5uZXQvODAyL2dhcnAuYy0yNjItXHRcdFx0IGFwcC1cdTAwM2VhcHAtXHUwMDNlcHJvdG8uZ3JvdXBfYWRkcmVzcyk7XG4tLVxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jPTM1PXN0YXRpYyB2b2lkIGJyX3NlbmRfYnBkdShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYy01NC1cbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYzo1NTpcdGxsY19tYWNfaGRyX2luaXQoc2tiLCBwLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgcC1cdTAwM2Vici1cdTAwM2Vncm91cF9hZGRyKTtcbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYy01Ni1cbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MTkyPWludCBsbGNfY29ubl9hY19zZW5kX2Rpc2NfY21kX3Bfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yMDMtXHRcdGxsY19wZHVfaW5pdF9hc19kaXNjX2NtZChuc2tiLCAxKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzoyMDQ6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMDUtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTIxNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTIzMC1cdFx0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjMxOlx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMjMyLVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0yNTQtXHRcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgMSk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MjU1Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMjU2LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0yNjc9aW50IGxsY19jb25uX2FjX3NlbmRfZnJtcl9yc3BfZl9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTI4OC1cdFx0XHRcdFx0IGxsYy1cdTAwM2V2UiwgSU5DT1JSRUNUKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzoyODk6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0yOTAtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTMwMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zMTUtXHRcdFx0XHRcdCBsbGMtXHUwMDNldlIsIElOQ09SUkVDVCk7XG5uZXQvbGxjL2xsY19jX2FjLmM6MzE2Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMzE3LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz0zMjg9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9mcm1yX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtMzQ1LVx0XHRcdFx0XHQgbGxjLVx1MDAzZXZSLCBJTkNPUlJFQ1QpO1xubmV0L2xsYy9sbGNfY19hYy5jOjM0NjpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTM0Ny1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9MzU4PWludCBsbGNfY29ubl9hY19zZW5kX2lfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy0zNjYtXHRsbGNfcGR1X2luaXRfYXNfaV9jbWQoc2tiLCAxLCBsbGMtXHUwMDNldlMsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6MzY3Olx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtMzY4LVx0aWYgKGxpa2VseSghcmMpKSB7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTM3Nj1zdGF0aWMgaW50IGxsY19jb25uX2FjX3NlbmRfaV9jbWRfcF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTM4NC1cdGxsY19wZHVfaW5pdF9hc19pX2NtZChza2IsIDAsIGxsYy1cdTAwM2V2UywgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzozODU6XHRyYyA9IGxsY19tYWNfaGRyX2luaXQoc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy0zODYtXHRpZiAobGlrZWx5KCFyYykpIHtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9Mzk0PWludCBsbGNfY29ubl9hY19zZW5kX2lfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy00MDItXHRsbGNfcGR1X2luaXRfYXNfaV9jbWQoc2tiLCAwLCBsbGMtXHUwMDNldlMsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NDAzOlx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNDA0LVx0aWYgKGxpa2VseSghcmMpKSB7XG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTQyMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2lfeHh4X3hfc2V0XzBfb3Jfc2VuZF9ycihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTQzNS1cdFx0bGxjX3BkdV9pbml0X2FzX3JyX3JzcChuc2tiLCAwLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjQzNjpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTQzNy1cdFx0aWYgKGxpa2VseSghcmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNDcwLVx0XHRsbGNfcGR1X2luaXRfYXNfcmVqX2NtZChuc2tiLCAxLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjQ3MTpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTQ3Mi1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NDgzPWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTQ5NC1cdFx0bGxjX3BkdV9pbml0X2FzX3Jlal9yc3AobnNrYiwgMSwgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo0OTU6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy00OTYtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTUwNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01MTgtXHRcdGxsY19wZHVfaW5pdF9hc19yZWpfcnNwKG5za2IsIDAsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTE5Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTIwLVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNTQyLVx0XHRsbGNfcGR1X2luaXRfYXNfcm5yX2NtZChuc2tiLCAxLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjU0MzpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTU0NC1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NTU1PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTU2Ni1cdFx0bGxjX3BkdV9pbml0X2FzX3Jucl9yc3AobnNrYiwgMSwgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo1Njc6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjgtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTU3OT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy01OTAtXHRcdGxsY19wZHVfaW5pdF9hc19ybnJfcnNwKG5za2IsIDAsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NTkxOlx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNTkyLVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTYyNi1cdFx0bGxjX3BkdV9pbml0X2FzX3Jucl9yc3AobnNrYiwgMCwgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Mjc6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy02MjgtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jPTYzOT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTY1MC1cdFx0bGxjX3BkdV9pbml0X2FzX3JyX2NtZChuc2tiLCAxLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjY1MTpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTY1Mi1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NjYzPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNjc1LVx0XHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIGZfYml0LCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjY3NjpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTY3Ny1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9Njg4PWludCBsbGNfY29ubl9hY19zZW5kX2Fja19yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTY5OS1cdFx0bGxjX3BkdV9pbml0X2FzX3JyX3JzcChuc2tiLCAxLCBsbGMtXHUwMDNldlIpO1xubmV0L2xsYy9sbGNfY19hYy5jOjcwMDpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTcwMS1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9NzEyPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIzLVx0XHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIDAsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NzI0Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzI1LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03MzY9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmMtNzQ3LVx0XHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIDAsIGxsYy1cdTAwM2V2Uik7XG5uZXQvbGxjL2xsY19jX2FjLmM6NzQ4Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgbGxjLVx1MDAzZWRhZGRyLm1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzQ5LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03NzA9aW50IGxsY19jb25uX2FjX3NlbmRfc2FibWVfY21kX3Bfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy03ODQtXHRcdGxsY19wZHVfaW5pdF9hc19zYWJtZV9jbWQobnNrYiwgMSk7XG5uZXQvbGxjL2xsY19jX2FjLmM6Nzg1Olx0XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgZG1hYyk7XG5uZXQvbGxjL2xsY19jX2FjLmMtNzg2LVx0XHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYz03OTg9aW50IGxsY19jb25uX2FjX3NlbmRfdWFfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy04MTItXHRcdGxsY19wZHVfaW5pdF9hc191YV9yc3AobnNrYiwgZl9iaXQpO1xubmV0L2xsYy9sbGNfY19hYy5jOjgxMzpcdFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGxsYy1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfY19hYy5jLTgxNC1cdFx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9OTA0PXN0YXRpYyBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9pX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2xsYy9sbGNfY19hYy5jLTkxMy1cdGxsY19wZHVfaW5pdF9hc19pX2NtZChza2IsIGxsYy1cdTAwM2VhY2tfcGYsIGxsYy1cdTAwM2V2UywgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo5MTQ6XHRyYyA9IGxsY19tYWNfaGRyX2luaXQoc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy05MTUtXHRpZiAobGlrZWx5KCFyYykpIHtcbi0tXG5uZXQvbGxjL2xsY19jX2FjLmM9OTU5PXN0YXRpYyBpbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9yc3BfZl9zZXRfYWNrcGYoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2NfYWMuYy05NzEtXHRcdGxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgbGxjLVx1MDAzZWFja19wZiwgbGxjLVx1MDAzZXZSKTtcbm5ldC9sbGMvbGxjX2NfYWMuYzo5NzI6XHRcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBsbGMtXHUwMDNlZGFkZHIubWFjKTtcbm5ldC9sbGMvbGxjX2NfYWMuYy05NzMtXHRcdGlmICh1bmxpa2VseShyYykpXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzUtXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4NzY6XHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzctXHRpZiAodW5saWtlbHkocmMpKVxuLS1cbm5ldC9sbGMvbGxjX291dHB1dC5jLTE2LS8qKlxubmV0L2xsYy9sbGNfb3V0cHV0LmM6MTc6ICpcdGxsY19tYWNfaGRyX2luaXQgLSBmaWxscyBNQUMgaGVhZGVyIGZpZWxkc1xubmV0L2xsYy9sbGNfb3V0cHV0LmMtMTgtICpcdEBza2I6IEFkZHJlc3Mgb2YgdGhlIGZyYW1lIHRvIGluaXRpYWxpemUgaXRzIE1BQyBoZWFkZXJcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNC0gKi9cbm5ldC9sbGMvbGxjX291dHB1dC5jOjI1OmludCBsbGNfbWFjX2hkcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNi1cdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXG4tLVxubmV0L2xsYy9sbGNfb3V0cHV0LmM9NTg9aW50IGxsY19idWlsZF9hbmRfc2VuZF91aV9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02NC1cdGxsY19wZHVfaW5pdF9hc191aV9jbWQoc2tiKTtcbm5ldC9sbGMvbGxjX291dHB1dC5jOjY1Olx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgZG1hYyk7XG5uZXQvbGxjL2xsY19vdXRwdXQuYy02Ni1cdGlmIChsaWtlbHkoIXJjKSlcbi0tXG5uZXQvbGxjL2xsY19vdXRwdXQuYy03Mi1cbm5ldC9sbGMvbGxjX291dHB1dC5jOjczOkVYUE9SVF9TWU1CT0wobGxjX21hY19oZHJfaW5pdCk7XG5uZXQvbGxjL2xsY19vdXRwdXQuYy03NC1FWFBPUlRfU1lNQk9MKGxsY19idWlsZF9hbmRfc2VuZF91aV9wa3QpO1xuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0zNz1zdGF0aWMgaW50IGxsY19wcmVwYXJlX2FuZF94bWl0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTQyLVxubmV0L2xsYy9sbGNfc19hYy5jOjQzOlx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgZXYtXHUwMDNlc2FkZHIubWFjLCBldi1cdTAwM2VkYWRkci5tYWMpO1xubmV0L2xsYy9sbGNfc19hYy5jLTQ0LVx0aWYgKHJjKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xMDU9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfeGlkX3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zX2FjLmMtMTIwLVx0bGxjX3BkdV9pbml0X2FzX3hpZF9yc3AobnNrYiwgTExDX1hJRF9OVUxMX0NMQVNTXzIsIDApO1xubmV0L2xsYy9sbGNfc19hYy5jOjEyMTpcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBtYWNfc2EsIG1hY19kYSk7XG5uZXQvbGxjL2xsY19zX2FjLmMtMTIyLVx0aWYgKGxpa2VseSghcmMpKVxuLS1cbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2xsYy9sbGNfc19hYy5jLTE2OS1cdGxsY19wZHVfaW5pdF9hc190ZXN0X3JzcChuc2tiLCBza2IpO1xubmV0L2xsYy9sbGNfc19hYy5jOjE3MDpcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBtYWNfc2EsIG1hY19kYSk7XG5uZXQvbGxjL2xsY19zX2FjLmMtMTcxLVx0aWYgKGxpa2VseSghcmMpKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYz00Mj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfeGlkX3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNTQtXHRsbGNfcGR1X2luaXRfYXNfeGlkX3JzcChuc2tiLCBMTENfWElEX05VTExfQ0xBU1NfMiwgMTI3KTtcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo1NTpcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBtYWNfZGEpO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTU2LVx0aWYgKHVubGlrZWx5KHJjKSlcbi0tXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM9NjY9c3RhdGljIGludCBsbGNfc3RhdGlvbl9hY19zZW5kX3Rlc3RfcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX3N0YXRpb24uYy04NS1cdGxsY19wZHVfaW5pdF9hc190ZXN0X3JzcChuc2tiLCBza2IpO1xubmV0L2xsYy9sbGNfc3RhdGlvbi5jOjg2Olx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIG1hY19kYSk7XG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtODctXHRpZiAodW5saWtlbHkocmMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc0NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBsbGNfbWFjX2hkcl9pbml0YCBmdW5jdGlvbiBpbiBgbmV0L2xsYy9sbGNfb3V0cHV0LmNgLCB0aGlua2luZyBvdXQgbG91ZC4uLgoKKipEaXZpbmcgaW50byBMTEMgT3V0cHV0IEhlYWRlciBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbGxjX21hY19oZHJfaW5pdGAgaW5zaWRlIGBuZXQvbGxjL2xsY19vdXRwdXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIGF0IGxlYXN0LCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIE1BQyBoZWFkZXIgZm9yIExvZ2ljYWwgTGluayBDb250cm9sIChMTEMpIGZyYW1lcy4gSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyB0byBjcmFmdCB0aGF0IGVzc2VudGlhbCBoZWFkZXIuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IG9mIHRoZSB2YXJpb3VzIHBhcmFtZXRlcnMgaXQmIzM5O3MgcHJvYmFibHkgdXNpbmcsIGxpa2UgdGhlIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzLCBzb3VyY2UgTUFDIGFkZHJlc3MsIEV0aGVyVHlwZSwgYW5kIGFueSBwb3RlbnRpYWwgTExDLXNwZWNpZmljIGZpZWxkcy4gTXkgcGFzdCBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBwcm9iYWJseSBhIGNydWNpYWwgc3RlcCBpbiBlbnN1cmluZyBvdXIgTExDIGZyYW1lcyBhcmUgcHJvcGVybHkgZm9ybWF0dGVkIGJlZm9yZSB0aGV5IGhpdCB0aGUgd2lyZSBhbmQgdGhhdCB0aGV5JiMzOTtyZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXQgdGhlIHJlY2VpdmluZyBlbmQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhhbmRsaW5nIG9mIHNwZWNpZmljIGFkZHJlc3MgZmllbGRzLiBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmU7IGhvdyBpdCBoYW5kbGVzIGFueSBwb3RlbnRpYWxseSBmcmFnbWVudGVkIGZyYW1lcywgYW5kIGFueSBidWZmZXItbWFuYWdlbWVudCBkZXRhaWxzLiBJJiMzOTttIGdvaW5nIHRvIHBhcnNlIHRoZSBjb2RlIGFuZCBsb29rIGZvciBkZXRhaWxzIHJlZ2FyZGluZyBvcHRpbWl6YXRpb25zLCBlc3BlY2lhbGx5IGFueSBpbmxpbmUgbWVtb3J5IG9wZXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhpcyBpbml0IGZ1bmN0aW9uIHdpbGwgb2ZmZXIgaW5zaWdodCBvbiBob3cgTExDIGZyYW1lcyBhcmUgZ2VuZXJhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNzpcdCAqXHRsbGNfbWFjX2hkcl9pbml0IC0gZmlsbHMgTUFDIGhlYWRlciBmaWVsZHNcbiAgMTg6XHQgKlx0QHNrYjogQWRkcmVzcyBvZiB0aGUgZnJhbWUgdG8gaW5pdGlhbGl6ZSBpdHMgTUFDIGhlYWRlclxuICAxOTpcdCAqXHRAc2E6IFRoZSBNQUMgc291cmNlIGFkZHJlc3NcbiAgMjA6XHQgKlx0QGRhOiBUaGUgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgMjE6XHQgKlxuICAyMjpcdCAqXHRGaWxscyBNQUMgaGVhZGVyIGZpZWxkcywgZGVwZW5kaW5nIG9uIE1BQyB0eXBlLiBSZXR1cm5zIDAsIElmIE1BQyB0eXBlXG4gIDIzOlx0ICpcdGlzIGEgdmFsaWQgdHlwZSBhbmQgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzIGNvcnJlY3RseSAxLCBvdGhlcndpc2UuXG4gIDI0Olx0ICovXG4gIDI1Olx0aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgMjY6XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGEpXG4gIDI3Olx0e1xuICAyODpcdFx0aW50IHJjID0gLUVJTlZBTDtcbiAgMjk6XHRcbiAgMzA6XHRcdHN3aXRjaCAoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlKSB7XG4gIDMxOlx0XHRjYXNlIEFSUEhSRF9FVEhFUjpcbiAgMzI6XHRcdGNhc2UgQVJQSFJEX0xPT1BCQUNLOlxuICAzMzpcdFx0XHRyYyA9IGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYsIEVUSF9QXzgwMl8yLCBkYSwgc2EsXG4gIDM0Olx0XHRcdFx0XHQgICAgIHNrYi1cdTAwM2VsZW4pO1xuICAzNTpcdFx0XHRpZiAocmMgXHUwMDNlIDApXG4gIDM2Olx0XHRcdFx0cmMgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDczOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTExDIENvbm5lY3Rpb24gSGFuZGxpbmcqKgoKT2theSwgc28gYGRldl9oYXJkX2hlYWRlcmAgZ2V0cyB0aGUgTUFDIGhlYWRlciBzb3J0ZWQgYW5kIGZ1bGx5IHBvcHVsYXRlcyB0aGUgYHNrYmAuIEdvb2QsIHRoYXQgbWVhbnMgdGhlIGBza2JgIGlzIGluaXRpYWxpemVkLCB3aGljaCBwcmV2ZW50cyB1cyBmcm9tIHNlbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZXNlIGNoYW5nZXMgaW4gYGxsY19jb25uX2hhbmRsZXJgLgoKQWxyaWdodCwgSSBzZWUgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIGBUQ1BfTElTVEVOYCBzdGF0ZS4gQmVmb3JlLCBhIG5ldyBzb2NrZXQgd2FzIGltbWVkaWF0ZWx5IGNyZWF0ZWQgdXNpbmcgYGxsY19jcmVhdGVfaW5jb21pbmdfc29ja2AuIE5vdywgaXQgc2VlbXMgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0IGlzIGNoZWNraW5nIGZvciBzcGVjaWZpYyBMTEMgY29tbWFuZHMgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IHNvY2tldC4KClRoZSBjb2RlIG5vdyBjaGVja3MgZm9yIGBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeGAuIElmIGl0ICpyZXR1cm5zIHRydWUqICh3aGljaCBtZWFucyBub3QgYSBTQUJNRSBjb21tYW5kKSwgYSBETSByZXNwb25zZSBpcyBzZW50LiBIb3dldmVyLCBob2xkIG9uLi4uIHRoZSBsb2dpYyBpcyBpbnZlcnRlZC4gTGV0IG1lIGRvdWJsZS1jaGVjay4KClRoZSBsb2dpYyBpcyBlc3NlbnRpYWxseTogSWYgaXQmIzM5O3MgKm5vdCogYSBTQUJNRSBjb21tYW5kLCB0aGVuIGNoZWNrIGZvciBESVNDIGNvbW1hbmQsIGlmIGl0JiMzOTtzIG5vdCBhIERJU0MgY29tbWFuZCwgZGVjb2RlIHRoZSBQL0YgYml0IGZyb20gdGhlIFBEVSBhbmQgc2VuZCBhIERNIHJlc3BvbnNlLiBJZiBpdCYjMzk7cyBub3QgYSBTQUJNRSBjb21tYW5kIGFuZCBpdCYjMzk7cyBhIERJU0MgY29tbWFuZCB0aGVuIGNoZWNrIGZvciBgeHh4YCBhbmQgaWYgaXQgaXMgbm90IHRoYXQgc2VuZCBhIERNIHJlc3BvbnNlLgoKVGhlIGNvZGUgKnNob3VsZCogc2VuZCBhIERNIHJlc3BvbnNlLiBXYWl0LCB0aGlzIGlzIGludmVydGVkLCBJIG5lZWQgdG8gY2hlY2sgYGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94YCBiZWNhdXNlIEkgdGhpbmsgaXQgcmV0dXJucyAwIGZvciBhIFNBQk1FIGNvbW1hbmQuIFJpZ2h0LCBJIG5lZWQgdG8gZ28gb3ZlciB0aGF0IGZ1bmN0aW9uIGluIG1vcmUgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9sbGNfY19ldi5oPTE0Mj1pbnQgbGxjX2Nvbm5fZXZfcnhfcmVqX3JzcF9mYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9sbGNfY19ldi5oOjE0MzppbnQgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L2xsY19jX2V2LmgtMTQ0LWludCBsbGNfY29ubl9ldl9yeF91YV9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC9sbGMvbGxjX2NfZXYuYz00MTU9aW50IGxsY19jb25uX2V2X3J4X3JyX3JzcF9mYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbGxjL2xsY19jX2V2LmMtNDI0LVxubmV0L2xsYy9sbGNfY19ldi5jOjQyNTppbnQgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2xsYy9sbGNfY19ldi5jLTQyNi17XG4tLVxubmV0L2xsYy9sbGNfY19zdC5jPTc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgbGxjX2NvbW1vbl9zdGF0ZV90cmFuc18zID0ge1xubmV0L2xsYy9sbGNfY19zdC5jOjc3Olx0LmV2XHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcbm5ldC9sbGMvbGxjX2Nfc3QuYy03OC1cdC5uZXh0X3N0YXRlICAgID0gTExDX0NPTk5fU1RBVEVfTk9STUFMLFxuLS1cbm5ldC9sbGMvbGxjX2Nfc3QuYz0zNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfYWRtX3N0YXRlX3RyYW5zXzIgPSB7XG5uZXQvbGxjL2xsY19jX3N0LmM6Mzc2Olx0LmV2XHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcbm5ldC9sbGMvbGxjX2Nfc3QuYy0zNzctXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX05PUk1BTCxcbi0tXG5uZXQvbGxjL2xsY19jX3N0LmM9NDUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgbGxjX3NldHVwX3N0YXRlX3RyYW5zXzEgPSB7XG5uZXQvbGxjL2xsY19jX3N0LmM6NDUxOlx0LmV2XHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcbm5ldC9sbGMvbGxjX2Nfc3QuYy00NTItXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX1NFVFVQLFxuLS1cbm5ldC9sbGMvbGxjX2Nfc3QuYz00MTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgbGxjX2RfY29ubl9zdGF0ZV90cmFuc18xID0ge1xubmV0L2xsYy9sbGNfY19zdC5jOjQxNjk6XHQuZXZcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxubmV0L2xsYy9sbGNfY19zdC5jLTQxNzAtXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX0FETSxcbi0tXG5uZXQvbGxjL2xsY19jX3N0LmM9NDE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19kX2Nvbm5fc3RhdGVfdHJhbnNfMV8xID0ge1xubmV0L2xsYy9sbGNfY19zdC5jOjQxOTI6XHQuZXZcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxubmV0L2xsYy9sbGNfY19zdC5jLTQxOTMtXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX0FETSxcbi0tXG5uZXQvbGxjL2xsY19jX3N0LmM9NDQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19yc3Rfc3RhdGVfdHJhbnNfMSA9IHtcbm5ldC9sbGMvbGxjX2Nfc3QuYzo0NDE3Olx0LmV2XHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcbm5ldC9sbGMvbGxjX2Nfc3QuYy00NDE4LVx0Lm5leHRfc3RhdGUgICAgPSBMTENfQ09OTl9TVEFURV9SRVNFVCxcbi0tXG5uZXQvbGxjL2xsY19jX3N0LmM9NDcwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19lcnJvcl9zdGF0ZV90cmFuc18xID0ge1xubmV0L2xsYy9sbGNfY19zdC5jOjQ3MDg6XHQuZXZcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxubmV0L2xsYy9sbGNfY19zdC5jLTQ3MDktXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX05PUk1BTCxcbi0tXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy05NDItXHRcdGlmICghbmV3c2spIHtcbm5ldC9sbGMvbGxjX2Nvbm4uYzo5NDM6XHRcdFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG5uZXQvbGxjL2xsY19jb25uLmMtOTQ0LVx0XHRcdFx0aWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODg1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIExMQyBTQUJNRSBDb21tYW5kIEhhbmRsaW5nKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvbGxjL2xsY19jX2V2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExMQyBsYXllciBoYW5kbGVzIHRoZSBTQUJNRSBjb21tYW5kLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgd2hlcmUgdGhlIFAtYml0IGlzIHNldCB2aWEgYGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94YC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBzZXF1ZW5jZSwgbGlrZWx5IGRlYWxpbmcgd2l0aCBjb25uZWN0aW9uIGluaXRpYXRpb24gb3IgcmUtZXN0YWJsaXNobWVudC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGlzIGlzIGhhbmRsaW5nIGFuIGV4cGxpY2l0IFNBQk1FIHJlY2VwdGlvbiBvciBpZiBpdCYjMzk7cyB0aWVkIHRvIG90aGVyIHN0YXRlIHRyYW5zaXRpb25zIHdpdGhpbiB0aGUgRlNNLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgaG93IHRoZXkgYXJlIG1hbmFnaW5nIHRoZSBQLWJpdCB3aXRoaW4gdGhlIFNBQk1FIGNvbW1hbmQuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgYWNrbm93bGVkZ21lbnQgcHJvY2VkdXJlcyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGluZy4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLWNvbW1lbnRlZCwgc28gSSBjYW4gZ3Jhc3AgdGhlIG51YW5jZXMgb2YgdGhlIFAtYml0IHNpZ25hbGluZyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2NfZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0aW50IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0MjY6XHR7XG4gNDI3Olx0XHRjb25zdCBzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTtcbiA0Mjg6XHRcbiA0Mjk6XHRcdHJldHVybiBMTENfUERVX0lTX0NNRChwZHUpIFx1MDAyNlx1MDAyNiBMTENfUERVX1RZUEVfSVNfVShwZHUpIFx1MDAyNlx1MDAyNlxuIDQzMDpcdFx0ICAgICAgIExMQ19VX1BEVV9DTUQocGR1KSA9PSBMTENfMl9QRFVfQ01EX1NBQk1FID8gMCA6IDE7XG4gNDMxOlx0fVxuIDQzMjpcdFxuIDQzMzpcdGludCBsbGNfY29ubl9ldl9yeF91YV9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gNDM0Olx0e1xuIDQzNTpcdFx0c3RydWN0IGxsY19wZHVfdW4gKnBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7XG4gNDM2Olx0XG4gNDM3Olx0XHRyZXR1cm4gTExDX1BEVV9JU19SU1AocGR1KSBcdTAwMjZcdTAwMjYgTExDX1BEVV9UWVBFX0lTX1UocGR1KSBcdTAwMjZcdTAwMjZcbiA0Mzg6XHRcdCAgICAgICBMTENfVV9QRFVfUlNQKHBkdSkgPT0gTExDXzJfUERVX1JTUF9VQSA/IDAgOiAxO1xuIDQzOTpcdH1cbiA0NDA6XHRcbiA0NDE6XHRpbnQgbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA0NDI6XHR7XG4gNDQzOlx0XHR1MTYgcmMgPSAxO1xuIDQ0NDpcdFx0Y29uc3Qgc3RydWN0IGxsY19wZHVfc24gKnBkdSA9IGxsY19wZHVfc25faGRyKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjQyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTExDIFBEVSBIYW5kbGluZyBhbmQgU29ja2V0IENyZWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGJyZWFraW5nIGRvd24gdGhlIExMQyBQRFUgaGFuZGxpbmcuICBGaXJzdCwgdGhlIGluaXRpYWwgY2hlY2sgYGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpYCBhY3R1YWxseSAqbmVnYXRlcyogdGhlIG1lYW5pbmc6IGEgcmV0dXJuIG9mIGAwYCBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFja2V0IGlzICpub3QqIGEgU0FCTUUgY29tbWFuZC4gIEdvdCBpdC4gIElmIGl0IGlzbiYjMzk7dCBTQUJNRSwgdGhlbiB3ZSBjaGVjayBmb3IgRElTQyBjb21tYW5kcy4gSWYgaXQgKmlzKiBhIERJU0MsIHdlIHNlbmQgYSBETSAoRGlzY29ubmVjdCBNb2RlKSByZXNwb25zZSB3aXRoIHRoZSBGIGJpdC4gT3RoZXJ3aXNlLCBpZiB0aGUgUCBiaXQgaXMgc2V0LCB3ZSBhbHNvIHNlbmQgYSBETSB3aXRoIHRoZSBGIGJpdCBzZXQsIHRoZW4gZHJvcCB0aGUgcGFja2V0LiAgQWxsIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgbXkgZm9jdXMgaXMgb24gaG93IHRob3NlIERNIHJlc3BvbnNlcyBhcmUgY29uc3RydWN0ZWQgYW5kIHNlbnQuIFNwZWNpZmljYWxseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdoZW4gYGxsY19jb25uX3NlbmRfZG1fcnNwYCBpcyBjYWxsZWQuIEl0IHVzZXMgYGxsY19hbGxvY19mcmFtZWAgdG8gY3JlYXRlIGEgbmV3IGBza2JgLiAgVGhlIHNpemUgY2FsY3VsYXRpb24gb2YgYGhsZW4gJiM0MzsgZGF0YV9zaXplYCBpcyBnb29kOyBpbiB0aGlzIGNhc2UgdGhhdCB3b3JrcyBvdXQgdG8gYDMgJiM0MzsgbWFjX2hlYWRlcl9sZW4gJiM0MzsgMGAgd2l0aCB0aGUgcmVzdWx0IGJlaW5nIHBhc3NlZCB0byBgbGxjX3BkdV9oZWFkZXJfaW5pdGAuICAKCmBsbGNfcGR1X2hlYWRlcl9pbml0YCBwdXNoZXMgMyBieXRlcyBvbnRvIHRoZSBTS0IgYW5kIHNldHMgYGRzYXBgLCBgc3NhcGAsIGFuZCBgY3RybF8xYCBmaWVsZHMuIFRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIGlzIGBsbGNfcGR1X2hlYWRlcl9pbml0YCB3aGljaCBJIHNlZSBkb2VzIHRoZSBgc2tiX3B1c2hgLCBzZXRzIHRoZSBuZXR3b3JrIGhlYWRlciwgdGhlbiBzZXRzIHRoZSBMTEMgVS1mb3JtYXQgaGVhZGVyIGZpZWxkczogYGRzYXBgLCBgc3NhcGAgYW5kIHRoZSBgY3RybF8xYCBieXRlLiBUaGUgYGNyYCBiaXQgaXMgc2V0IGluIHRoZSBgc3NhcGAgYnl0ZS4KCk5leHQsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCBzZXRzIHRoZSBgY3RybF8xYCBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlIERNIHJlc3BvbnNlIGZvcm1hdCwgaW5jbHVkaW5nIHRoZSBGIGJpdC4gVGhhdCBoYW5kbGVzIHRoZSBjb250cm9sIGJ5dGUuIFNvLCB0aG9zZSB0aHJlZSBieXRlcyBhcmUgdGhlIExMQyBoZWFkZXIsIGNsZWFybHkgZGVmaW5lZC4gIFRoZW4gYGxsY19tYWNfaGRyX2luaXRgIGFkZHMgYW5kIHBvcHVsYXRlcyB0aGUgTUFDIGhlYWRlci4gU28gZmFyLCBzbyBnb29kLgoKTm93LCB0byB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgU0tCPyBMZXQmIzM5O3MgdHJhY2UgaXQgY2FyZWZ1bGx5LiBgYWxsb2Nfc2tiYCBhbGxvY2F0ZXMgdGhlIGJ1ZmZlci4gVGhlbiwgYHNrYl9yZXNlcnZlYCBzZXRzIGFzaWRlIHNwYWNlIGZvciBib3RoIHRoZSBNQUMgYW5kIExMQyBoZWFkZXIuIGBza2JfcHVzaGAgcHV0cyBpbiB0aGUgTExDIGhlYWRlciAoMyBieXRlcykuIFRoZW4sIGBkZXZfaGFyZF9oZWFkZXJgIGNvbnN0cnVjdHMgYW5kIGFkZHMgdGhlIE1BQyBoZWFkZXIgKGxldCYjMzk7cyBzYXkgMTQgYnl0ZXMgZm9yIEV0aGVybmV0KSwgYW5kIGZpbGxzIGl0LiBUaGVyZWZvcmUsIHRoZSBvdmVyYWxsIFNLQiBsZW5ndGggaXMgMTQgJiM0MzsgMyA9IDE3IGJ5dGVzLCBhbmQgYWxsIG9mIHRoZXNlIGJ5dGVzIGFyZSB3cml0dGVuIGV4cGxpY2l0bHkuIE5vIG9idmlvdXMgbWVtb3J5IGxlYWsuIEV4Y2VsbGVudC4KCk5vdywgc2hpZnRpbmcgZ2VhcnMuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgYGxsY19jcmVhdGVfaW5jb21pbmdfc29ja2AuIEl0IGxvb2tzIGxpa2UgaXQgY3JlYXRlcyBhIG5ldyBzb2NrZXQgdG8gaGFuZGxlIGluY29taW5nIGNvbm5lY3Rpb25zLCBjb3B5aW5nIGFkZHJlc3NlcyBhbmQgZGV2aWNlIGluZm9ybWF0aW9uLiBUaGlzIHNlZW1zIGZpbmUsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlIGFsbG9jYXRpb24gaXMgc2FmZS4gIExldCYjMzk7cyBkaWcgaW50byBgbGxjX3NrX2FsbG9jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGxjX3NrX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2xsY19jb25uLmg9OTY9c3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaC0xMDAtXG5pbmNsdWRlL25ldC9sbGNfY29ubi5oOjEwMTpzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXG5pbmNsdWRlL25ldC9sbGNfY29ubi5oLTEwMi1cdFx0XHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xuLS1cbm5ldC9sbGMvYWZfbGxjLmM9MTY3PXN0YXRpYyBpbnQgbGxjX3VpX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbi0tXG5uZXQvbGxjL2FmX2xsYy5jLTE4MC1cdFx0cmMgPSAtRU5PTUVNO1xubmV0L2xsYy9hZl9sbGMuYzoxODE6XHRcdHNrID0gbGxjX3NrX2FsbG9jKG5ldCwgUEZfTExDLCBHRlBfS0VSTkVMLCBcdTAwMjZsbGNfcHJvdG8sIGtlcm4pO1xubmV0L2xsYy9hZl9sbGMuYy0xODItXHRcdGlmIChzaykge1xuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYz03NjI9c3RhdGljIHN0cnVjdCBzb2NrICpsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy03NjYte1xubmV0L2xsYy9sbGNfY29ubi5jOjc2NzpcdHN0cnVjdCBzb2NrICpuZXdzayA9IGxsY19za19hbGxvYyhzb2NrX25ldChzayksIHNrLVx1MDAzZXNrX2ZhbWlseSwgR0ZQX0FUT01JQyxcbm5ldC9sbGMvbGxjX2Nvbm4uYy03NjgtXHRcdFx0XHRcdCAgc2stXHUwMDNlc2tfcHJvdCwgMCk7XG4tLVxubmV0L2xsYy9sbGNfY29ubi5jPTExMzE9c3RhdGljIHZvaWQgbGxjX3NrX2luaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMTU5LS8qKlxubmV0L2xsYy9sbGNfY29ubi5jOjExNjA6ICpcdGxsY19za19hbGxvYyAtIEFsbG9jYXRlcyBMTEMgc29ja1xubmV0L2xsYy9sbGNfY29ubi5jLTExNjEtICpcdEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L2xsYy9sbGNfY29ubi5jLTExNjktICovXG5uZXQvbGxjL2xsY19jb25uLmM6MTE3MDpzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXG5uZXQvbGxjL2xsY19jb25uLmMtMTE3MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBMTEMgU29ja2V0IEFsbG9jYXRpb24qKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBsbGNfc2tfYWxsb2NgIHdpdGhpbiBgbmV0L2xsYy9sbGNfY29ubi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlci1sYXllciBjb25uZWN0aW9uLW9yaWVudGVkIExpbmsgTGF5ZXIgQ29udHJvbCAoTExDKSBzb2NrZXRzIGFyZSBhY3R1YWxseSBicm91Z2h0IGludG8gZXhpc3RlbmNlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGF0IHByb2Nlc3MuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgaXRzZWxmLCBidXQgSSYjMzk7bSBhbHNvIGJldHRpbmcgaXQgZGVhbHMgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYXQgbGVhc3Qgc29tZSBvZiB0aGUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgdGllIHRoZSBMTEMgc29ja2V0IGludG8gdGhlIGxhcmdlciBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgYXNzb2NpYXRlZCBjb250cm9sIGJsb2NrcywgbWF5YmUgc29tZSBuZXRsaW5rLXJlbGF0ZWQgc2V0dXAgaWYgdGhpcyBpcyBob3cgTExDIGNvbmZpZ3VyYXRpb24gaGFwcGVucywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbml0aWFsIHN0YXRlIHRyYW5zaXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJcyB0aGlzIHVzaW5nIHRoZSByZWd1bGFyIGtlcm5lbCBhbGxvY2F0b3IsIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgTExDIGxheWVyPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgdG8gb3B0aW1pemUgZm9yIHRoZSBleHBlY3RlZCB0cmFmZmljIHBhdHRlcm5zPyBUaGlzIGNvdWxkIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwOTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sbGMvbGxjX2Nvbm4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3MDpcdHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSwgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2VybilcbjExNzE6XHR7XG4xMTcyOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBza19hbGxvYyhuZXQsIGZhbWlseSwgcHJpb3JpdHksIHByb3QsIGtlcm4pO1xuMTE3MzpcdFxuMTE3NDpcdFx0aWYgKCFzaylcbjExNzU6XHRcdFx0Z290byBvdXQ7XG4xMTc2Olx0XHRsbGNfc2tfaW5pdChzayk7XG4xMTc3Olx0XHRzb2NrX2luaXRfZGF0YShOVUxMLCBzayk7XG4xMTc4Olx0I2lmZGVmIExMQ19SRUZDTlRfREVCVUdcbjExNzk6XHRcdGF0b21pY19pbmMoXHUwMDI2bGxjX3NvY2tfbnIpO1xuMTE4MDpcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7TExDIHNvY2tldCAlcCBjcmVhdGVkIGluICVzLCBub3cgd2UgaGF2ZSAlZCBhbGl2ZVxcblwmIzM0Oywgc2ssXG4xMTgxOlx0XHRcdF9fZnVuY19fLCBhdG9taWNfcmVhZChcdTAwMjZsbGNfc29ja19ucikpO1xuMTE4MjpcdCNlbmRpZlxuMTE4MzpcdG91dDpcbjExODQ6XHRcdHJldHVybiBzaztcbjExODU6XHR9XG4xMTg2Olx0XG4xMTg3Olx0dm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxuMTE4ODpcdHtcbjExODk6XHRcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3OTkKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMTI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBMTEMgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgYnVnIHdpdGhpbiB0aGUgTExDIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBsaWtlbHkgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBpbmNvbWluZ19zdGF0ZWAsIGBpbmNvbWluZ19saXN0ZW5lcmAsIGFuZCBgaW5jb21pbmdfd29ya2Agc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBtYW5hZ2luZyB0aGUgc3RhdGVzIG9mIGluY29taW5nIGNvbm5lY3Rpb25zIGFuZCB0aGVpciBwcm9wZXIgY2xlYW51cC4KCk15IGZpcnN0IGNoZWNrIHdhcyB0byBlbnN1cmUgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy4gYHNrX2FsbG9jYCBkb2VzIGl0cyBqb2Igb2YgYWxsb2NhdGluZyBhbmQgemVyb2luZyB0aGUgc29ja2V0LCB3aGljaCBpcyBnb29kLiBUaGUga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQgaXMgYGxsY19jb25uX3NlbmRfZG1fcnNwYC4gV2hpbGUgaXQgYWxsb2NhdGVzIGFuIGBza2JgLCBpdCBleHBsaWNpdGx5IHBvcHVsYXRlcyBhbGwgdGhlIGJ5dGVzIHdpdGhpbiBpdCwgc28gbm8gY29uY2VybiB0aGVyZS4KCkkgdGhlbiBkaWQgYSBkZWVwZXIgZGl2ZSwgY3Jvc3MtY2hlY2tpbmcgYGxsY19jb25uX3NlbmRfZG1fcnNwYCwgc3BlY2lmaWNhbGx5IHRoZSBzb3VyY2Ugb2YgYHNhZGRyLSZndDttYWNgLiBJIHRyYWNlZCBgc2FkZHJgIGJhY2sgdG8gYGxsY19jb25uX2hhbmRsZXJgLCB3aGljaCBwdWxscyB0aGUgZGF0YSBmcm9tIHRoZSBpbmNvbWluZyBgc2tiYCB1c2luZyBmdW5jdGlvbnMgbGlrZSBgbGxjX3BkdV9kZWNvZGVfc2FgIGFuZCBgbGxjX3BkdV9kZWNvZGVfc3NhcGAuIFRoZSBkYXRhIGlzLCB0aGVyZWZvcmUsIGluaXRpYWxpemVkIGZyb20gdGhlIG5ldHdvcmsgcGFja2V0LCBzbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeS4KCk5leHQsIEkgbG9va2VkIGF0IGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAgYW5kIGBsbGNfdWlfYWNjZXB0YCwgYXMgdGhlc2UgYXJlIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBjbGVhbnVwIGFuZCBhY2NlcHRhbmNlIHByb2Nlc3MuIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcy4gVGhleSYjMzk7cmUgcHJpbWFyaWx5IGludm9sdmVkIGluIHJlbGVhc2luZyBhbmQgbWFuYWdpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIGluY29taW5nIHNvY2tldHMsIGFuZCBhbGwgZGF0YSBhY2Nlc3MgYXBwZWFycyB0byBiZSBwcm9wZXJseSBzeW5jaHJvbml6ZWQgYW5kIGluaXRpYWxpemVkLgoKSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIHN0YW5kYXJkIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgYnVnIGZpeC4gV2hpbGUgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIHJpZ29yb3VzLCBpdCBkb2VzICpub3QqIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mb3JtYXRpb24gbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gS0FTQU4gYW5kIExPQ0tERVAgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGlzIHBhdGNoIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggKFVBRiwgZG91YmxlIGZyZWVzLCBhbmQgbG9ja2luZyBpc3N1ZXMpLiBUaGVyZWZvcmUsIHRoaXMgZG9lcyAqbm90KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAgYW5kIGZvcm11bGF0ZSB0aGUgS01TQU5SZWFzb25pbmcgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBpbiB0aGUgTExDIHByb3RvY29sIGJ5IGludHJvZHVjaW5nIHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBgaW5jb21pbmdfd29ya2ApIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGlzdGVuZXIgc29ja2V0IHRlYXJkb3duLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIGZ1bmN0aW9uIHRvIHNlbmQgYSBETSByZXNwb25zZSAoYGxsY19jb25uX3NlbmRfZG1fcnNwYCksIHdoaWNoIGFsbG9jYXRlcyBhIG5ldyBza2IgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGl0cyBieXRlcyAoTExDIGhlYWRlciBhbmQgTUFDIGhlYWRlcikgYmVmb3JlIHRyYW5zbWlzc2lvbiwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkIHRvIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBidWcgaW4gdGhlIExMQyBwcm90b2NvbCBieSBpbnRyb2R1Y2luZyBzdGF0ZSB0cmFja2luZyAoYGluY29taW5nX3N0YXRlYCwgYGluY29taW5nX2xpc3RlbmVyYCwgYGluY29taW5nX3dvcmtgKSBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpc3RlbmVyIHNvY2tldCB0ZWFyZG93bi4gQWxsIG5ld2x5IGludHJvZHVjZWQgc3RydWN0IGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBmdW5jdGlvbiB0byBzZW5kIGEgRE0gcmVzcG9uc2UgKGBsbGNfY29ubl9zZW5kX2RtX3JzcGApLCB3aGljaCBhbGxvY2F0ZXMgYSBuZXcgc2tiIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBpdHMgYnl0ZXMgKExMQyBoZWFkZXIgYW5kIE1BQyBoZWFkZXIpIGJlZm9yZSB0cmFuc21pc3Npb24sIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZCB0byB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToxMzoyOS4yMDMxMzYwNzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyMjE2MTU4MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBidWcgaW4gdGhlIExMQyBwcm90b2NvbCBieSBpbnRyb2R1Y2luZyBzdGF0ZSB0cmFja2luZyAoYGluY29taW5nX3N0YXRlYCwgYGluY29taW5nX2xpc3RlbmVyYCwgYGluY29taW5nX3dvcmtgKSBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpc3RlbmVyIHNvY2tldCB0ZWFyZG93bi4gQWxsIG5ld2x5IGludHJvZHVjZWQgc3RydWN0IGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBmdW5jdGlvbiB0byBzZW5kIGEgRE0gcmVzcG9uc2UgKGBsbGNfY29ubl9zZW5kX2RtX3JzcGApLCB3aGljaCBhbGxvY2F0ZXMgYSBuZXcgc2tiIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBpdHMgYnl0ZXMgKExMQyBoZWFkZXIgYW5kIE1BQyBoZWFkZXIpIGJlZm9yZSB0cmFuc21pc3Npb24sIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZCB0byB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgTExDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cyBhbmQgbmV0d29yayB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToxMzoyOS4yMDMxNDEwMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTI0ODc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUwMzI5ZDUzYWNjNzA1NmJlNjM0MDdmZGNlMmI4NGVmZjQ3NjEzY2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMDk6MTM6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaCBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcXG5pbmRleCBlMWEzMDI2OTY3MjM0Li5lODAwM2RiMTEwYWQ2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcXG4rKysgYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXFxuQEAgLTYsNiArNiw3IEBAXFxuICAqIFxcdFxcdCAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyBcXHUwMDNjYWNtZUBjb25lY3RpdmEuY29tLmJyXFx1MDAzZVxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9sbGNfaWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGMuaFxcdTAwM2VcXG5AQCAtMTMsNiArMTQsMTAgQEBcXG4gI2RlZmluZSBMTENfRVZFTlQgICAgICAgICAgICAgICAgMVxcbiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyXFxuIFxcbisjZGVmaW5lIExMQ19JTkNPTUlOR19OT05FICAgICAgICAwXFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX1BFTkRJTkcgICAgIDFcXG4rI2RlZmluZSBMTENfSU5DT01JTkdfUVVFVUVEICAgICAgMlxcbitcXG4gI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDJcXG4gI2RlZmluZSBMTEMyX0FDS19USU1FICAgICAgICAgICAgIDFcXG4gI2RlZmluZSBMTEMyX1JFSl9USU1FICAgICAgICAgICAgIDNcXG5AQCAtNzIsNiArNzcsOSBAQCBzdHJ1Y3QgbGxjX3NvY2sge1xcbiBcXHRcXHRcXHRcXHRcXHQgICAgICByZWNlaXZlZCBhbmQgY2F1c2VkIHNlbmRpbmcgRlJNUi5cXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgVXNlZCBmb3IgcmVzZW5kaW5nIEZSTVIgKi9cXG4gXFx0dTMyXFx0XFx0ICAgIGNtc2dfZmxhZ3M7XFxuK1xcdGF0b21pY190XFx0ICAgIGluY29taW5nX3N0YXRlO1xcbitcXHRzdHJ1Y3Qgc29ja1xcdCAgICAqaW5jb21pbmdfbGlzdGVuZXI7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCBpbmNvbWluZ193b3JrO1xcbiBcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7XFxuIH07XFxuIFxcbkBAIC05Myw3ICsxMDEsMTAgQEAgc3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXFxuIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTtcXG4gdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcXG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XFxuK2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XFxuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc3RydWN0IHNvY2sgKnNrKTtcXG4gXFxuIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuY1xcbmluZGV4IGIwNDQ3YzMzZGJmMDkuLmU4MDU0ODA5Y2YwY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2xsYy9hZl9sbGMuY1xcbisrKyBiL25ldC9sbGMvYWZfbGxjLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2xsY19zYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9sbGNfcGR1LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbGxjX2Nvbm4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9sbGNfY19zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFxcdTAwM2VcXG4gXFxuIC8qIHJlbWVtYmVyOiB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIGlzIHplcm9lZCBiZWNhdXNlIGl0cyBpbiAuYnNzICovXFxuQEAgLTE5Niw2ICsxOTcsNyBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIHtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjO1xcbitcXHRib29sIGxpc3RlbmVyO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrID09IE5VTEwpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMjA2LDYgKzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFx0XFx0bGxjLVxcdTAwM2VsYWRkci5sc2FwLCBsbGMtXFx1MDAzZWRhZGRyLmxzYXApO1xcbiBcXHRpZiAoIWxsY19zZW5kX2Rpc2Moc2spKVxcbiBcXHRcXHRsbGNfdWlfd2FpdF9mb3JfZGlzYyhzaywgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3Z0aW1lbykpO1xcbitcXHRsaXN0ZW5lciA9IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOO1xcbitcXHRpZiAobGlzdGVuZXIpXFxuK1xcdFxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XFxuIFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHtcXG4gXFx0XFx0c3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy1cXHUwMDNlc2FwO1xcbiBcXG5AQCAtMjE0LDE2ICsyMTksMTggQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0bGxjX3NhcF9ob2xkKHNhcCk7XFxuIFxcdFxcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXFx1MDAzZXNhcCwgc2spO1xcbitcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzayk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdFxcdGxsY19zYXBfcHV0KHNhcCk7XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcXG4gXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gXFx0fVxcbiBcXHRuZXRkZXZfcHV0KGxsYy1cXHUwMDNlZGV2LCBcXHUwMDI2bGxjLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuIFxcdHNvY2tfcHV0KHNrKTtcXG4gXFx0c29ja19vcnBoYW4oc2spO1xcbiBcXHRzb2NrLVxcdTAwM2VzayA9IE5VTEw7XFxuLVxcdGxsY19za19mcmVlKHNrKTtcXG4rXFx0bGxjX3NrX2ZyZWUoc2ssIHRydWUpO1xcbiBvdXQ6XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTcyMiw2ICs3MjksMTcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdFxcdGdvdG8gZnJlZXM7XFxuIFxcdHJjID0gMDtcXG4gXFx0bmV3c2sgPSBza2ItXFx1MDAzZXNrO1xcbitcXHRsb2NrX3NvY2tfbmVzdGVkKG5ld3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcdGlmIChsbGNfc2sobmV3c2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSB8fFxcbitcXHQgICAgIWxsY19hY2NlcHRfaW5jb21pbmdfc29jayhuZXdzaykpIHtcXG4rXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19OT05FKVxcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0cmVsZWFzZV9zb2NrKG5ld3NrKTtcXG4rXFx0XFx0c29ja19wdXQobmV3c2spO1xcbitcXHRcXHRyYyA9IC1FQ09OTkFCT1JURUQ7XFxuK1xcdFxcdGdvdG8gZnJlZXM7XFxuK1xcdH1cXG4gXFx0LyogYXR0YWNoIGNvbm5lY3Rpb24gdG8gYSBuZXcgc29ja2V0LiAqL1xcbiBcXHRsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7XFxuIFxcdHNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpO1xcbkBAIC03MzcsNiArNzU1LDggQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdHNrX2FjY2VwdHFfcmVtb3ZlZChzayk7XFxuIFxcdGRwcmludGsoXFxcIiVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4gXFx0XFx0bGxjX3NrKHNrKS1cXHUwMDNlYWRkci5zbGxjX3NhcCwgbmV3bGxjLVxcdTAwM2VkYWRkci5sc2FwKTtcXG4rXFx0cmVsZWFzZV9zb2NrKG5ld3NrKTtcXG4rXFx0c29ja19wdXQobmV3c2spO1xcbiBmcmVlczpcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIG91dDpcXG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jXFxuaW5kZXggMjYwNDYwZDUwZjU0Yy4uNGEzNGYyNDBhZDJjYyAxMDA2NDRcXG4tLS0gYS9uZXQvbGxjL2xsY19jb25uLmNcXG4rKysgYi9uZXQvbGxjL2xsY19jb25uLmNcXG5AQCAtMzIsNiArMzIsNyBAQCBzdGF0aWMgaW50IGxsY19leGVjX2Nvbm5fdHJhbnNfYWN0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqZXYpO1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zICpsbGNfcXVhbGlmeV9jb25uX2V2KHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gXFxuIC8qIE9mZnNldCB0YWJsZSBvbiBjb25uZWN0aW9uIHN0YXRlcyB0cmFuc2l0aW9uIGRpYWdyYW0gKi9cXG4gc3RhdGljIGludCBsbGNfb2Zmc2V0X3RhYmxlW05CUl9DT05OX1NUQVRFU11bTkJSX0NPTk5fRVZdO1xcbkBAIC04OCw2ICs4OSwxMyBAQCBpbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdCAqIHNrYi1cXHUwMDNlc2sgcG9pbnRpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgaW5cXG4gXFx0XFx0ICogbGxjX2Nvbm5faGFuZGxlci4gLWFjbWVcXG4gXFx0XFx0ICovXFxuK1xcdFxcdGlmIChzayAhPSBza2ItXFx1MDAzZXNrIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdHNvY2tfaG9sZChza2ItXFx1MDAzZXNrKTtcXG4rXFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2bGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSxcXG4rXFx0XFx0XFx0XFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c2tiX2dldChza2IpO1xcbiBcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XFxuIFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbkBAIC0zNTQsNyArMzYyLDggQEAgc3RhdGljIGludCBsbGNfY29ubl9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbiBcXHRpbnQgcmMgPSAxO1xcbiBcXG4tXFx0aWYgKGxsYy1cXHUwMDNlc3RhdGUgXFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXFxuK1xcdGlmIChsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNIHx8XFxuK1xcdCAgICBsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0cmMgPSAwO1xcbiBcXHR0cmFucyA9IGxsY19xdWFsaWZ5X2Nvbm5fZXYoc2ssIHNrYik7XFxuQEAgLTc2NSwyNyArNzc0LDE2MiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdG1lbWNweShcXHUwMDI2bmV3bGxjLVxcdTAwM2VsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtXFx1MDAzZWxhZGRyKSk7XFxuIFxcdG1lbWNweShcXHUwMDI2bmV3bGxjLVxcdTAwM2VkYWRkciwgc2FkZHIsIHNpemVvZihuZXdsbGMtXFx1MDAzZWRhZGRyKSk7XFxuIFxcdG5ld2xsYy1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRuZXdsbGMtXFx1MDAzZWluY29taW5nX2xpc3RlbmVyID0gc2s7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNm5ld2xsYy1cXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZuZXdsbGMtXFx1MDAzZWluY29taW5nX3dvcmssIGxsY19pbmNvbWluZ19zb2NrX3dvcmspO1xcbitcXHRzb2NrX2hvbGQoc2spO1xcbiBcXHRkZXZfaG9sZChkZXYpO1xcbiBcXHRsbGNfc2FwX2FkZF9zb2NrZXQobGxjLVxcdTAwM2VzYXAsIG5ld3NrKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gbmV3c2s7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsbGNfc29jayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGluY29taW5nX3dvcmspO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2bGxjLVxcdTAwM2VzaztcXG4rXFx0c3RydWN0IHNvY2sgKmxpc3RlbmVyID0gbGxjLVxcdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcXG4rXFxuK1xcdGxvY2tfc29jayhsaXN0ZW5lcik7XFxuK1xcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4rXFx0bGxjX3NrX2ZyZWUoc2ssIGZhbHNlKTtcXG4rXFx0c29ja19vcnBoYW4oc2spO1xcbitcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcXG4rXFx0cmVsZWFzZV9zb2NrKGxpc3RlbmVyKTtcXG4rXFx0ZGV2X3B1dChsbGMtXFx1MDAzZWRldik7XFxuK1xcdGxsYy1cXHUwMDNlZGV2ID0gTlVMTDtcXG4rXFx0c29ja19wdXQoc2spO1xcbitcXHRzb2NrX3B1dChsaXN0ZW5lcik7XFxuK31cXG4rXFxuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbitcXG4rXFx0aWYgKGF0b21pY194Y2hnKFxcdTAwMjZsbGMtXFx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfTk9ORSkgPT1cXG4rXFx0ICAgIExMQ19JTkNPTUlOR19OT05FKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRXUklURV9PTkNFKGxsYy1cXHUwMDNlc3RhdGUsIExMQ19DT05OX09VVF9PRl9TVkMpO1xcbitcXHRzb2NrX2hvbGQoc2spO1xcbitcXHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVxcdTAwM2VzYXAsIHNrKTtcXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bGxjLVxcdTAwM2VpbmNvbWluZ193b3JrKTtcXG4rfVxcbitcXG4rYm9vbCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4rXFxuK1xcdGlmIChhdG9taWNfY21weGNoZyhcXHUwMDI2bGxjLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCxcXG4rXFx0XFx0XFx0XFx0ICBMTENfSU5DT01JTkdfTk9ORSkgIT0gTExDX0lOQ09NSU5HX1FVRVVFRClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0c29ja19wdXQobGxjLVxcdTAwM2VpbmNvbWluZ19saXN0ZW5lcik7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpKSB7XFxuK1xcdFxcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcbitcXHRcXHRpZiAobmV3c2sgXFx1MDAyNlxcdTAwMjYgbmV3c2sgIT0gc2spIHtcXG4rXFx0XFx0XFx0aW50IGluY29taW5nX3N0YXRlO1xcbitcXG4rXFx0XFx0XFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XFxuK1xcdFxcdFxcdGluY29taW5nX3N0YXRlID1cXG4rXFx0XFx0XFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKTtcXG4rXFx0XFx0XFx0aWYgKGluY29taW5nX3N0YXRlICE9IExMQ19JTkNPTUlOR19OT05FKSB7XFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRcXHRpZiAoaW5jb21pbmdfc3RhdGUgPT0gTExDX0lOQ09NSU5HX1FVRVVFRClcXG4rXFx0XFx0XFx0XFx0XFx0c29ja19wdXQobmV3c2spO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0fVxcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXJcXG4rICogYWRkcmVzcyBpbiBsbGMtXFx1MDAzZWRhZGRyIHlldC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbitcXHRpZiAoIW5za2IpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG4rXFx0XFx0XFx0ICAgIHNhZGRyLVxcdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XFxuK1xcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgZl9iaXQpO1xcbitcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBzYWRkci1cXHUwMDNlbWFjKTtcXG4rXFx0aWYgKHVubGlrZWx5KHJjKSlcXG4rXFx0XFx0a2ZyZWVfc2tiKG5za2IpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGRldl9xdWV1ZV94bWl0KG5za2IpO1xcbit9XFxuK1xcbiB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgbGxjX2FkZHIgc2FkZHIsIGRhZGRyO1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDtcXG4rXFx0Ym9vbCBuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XFxuK1xcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XFxuIFxcbiBcXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XFxuIFxcdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcXHUwMDI2c2FkZHIubHNhcCk7XFxuIFxcdGxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTtcXG4gXFx0bGxjX3BkdV9kZWNvZGVfZHNhcChza2IsIFxcdTAwMjZkYWRkci5sc2FwKTtcXG4gXFxuK2xvb2t1cDpcXG4gXFx0c2sgPSBfX2xsY19sb29rdXAoc2FwLCBcXHUwMDI2c2FkZHIsIFxcdTAwMjZkYWRkciwgZGV2X25ldChza2ItXFx1MDAzZWRldikpO1xcbiBcXHRpZiAoIXNrKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG4rXFx0XFx0bmV3c2sgPSBzaztcXG4rXFx0XFx0YmhfbG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0c29ja19wdXQobmV3c2spO1xcbitcXHRcXHRcXHRuZXdzayA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gbG9va3VwO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNrID0gbGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XFxuK1xcdFxcdHNvY2tfaG9sZChzayk7XFxuK1xcdFxcdG5ld3NrX2xvb2t1cF9yZWYgPSB0cnVlO1xcbitcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdH1cXG4rXFxuIFxcdGJoX2xvY2tfc29jayhzayk7XFxuK1xcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXFxuK1xcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdGlmIChuZXdza19sb29rdXBfcmVmKSB7XFxuK1xcdFxcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xcbitcXHRcXHRuZXdza19sb2NrZWQgPSB0cnVlO1xcbitcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxcbitcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnlfdW5sb2NrO1xcbitcXHRcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4rXFx0XFx0XFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XFxuK1xcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0LypcXG4gXFx0ICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC1cXHUwMDNlYWNjZXB0XFxuIFxcdCAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOlxcbkBAIC03OTUsMTAgKzkzOSwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0ICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZVxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2FkZHIsIFxcdTAwMjZkYWRkcik7XFxuLVxcdFxcdGlmICghbmV3c2spXFxuLVxcdFxcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdFxcdGlmICghbmV3c2spIHtcXG4rXFx0XFx0XFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xcbitcXHRcXHRcXHRcXHRcXHR1OCBmX2JpdDtcXG4rXFxuK1xcdFxcdFxcdFxcdFxcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFxcdTAwMjZmX2JpdCk7XFxuK1xcdFxcdFxcdFxcdFxcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcXHUwMDI2c2FkZHIsIGZfYml0KTtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcXHUwMDI2c2FkZHIsIDEpO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGdvdG8gZHJvcF91bmxvY2s7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bmV3c2sgPSBsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc2ssIHNrYi1cXHUwMDNlZGV2LCBcXHUwMDI2c2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZGFkZHIpO1xcbitcXHRcXHRcXHRpZiAoIW5ld3NrKVxcbitcXHRcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuQEAgLTgxMywxOCArOTcyLDQ5IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRza2ItXFx1MDAzZXNrID0gc2s7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfZWZyZWU7XFxuIFxcdH1cXG4tXFx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxcbitcXHRpZiAodW5saWtlbHkobGxjX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkpIHtcXG4rXFx0XFx0aWYgKG5ld3NrKSB7XFxuK1xcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdFxcdFxcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcXG4rXFx0XFx0XFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHRcXHRcXHQgICBMTENfSU5DT01JTkdfUEVORElORykge1xcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbiBcXHRcXHRsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuLVxcdGVsc2Uge1xcbitcXHRcXHRpZiAobmV3c2sgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxcbitcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZHByaW50ayhcXFwiJXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGxsY19zZXRfYmFja2xvZ190eXBlKHNrYiwgTExDX1BBQ0tFVCk7XFxuLVxcdFxcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3JjdmJ1ZikpKVxcbitcXHRcXHRpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSkge1xcbitcXHRcXHRcXHRpZiAobmV3c2spXFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbiBcXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gb3V0OlxcbitcXHRpZiAobmV3c2tfbG9ja2VkKVxcbitcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuIFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4gXFx0c29ja19wdXQoc2spO1xcbitcXHRpZiAobmV3c2tfbG9va3VwX3JlZilcXG4rXFx0XFx0c29ja19wdXQobmV3c2spO1xcbiBcXHRyZXR1cm47XFxuK3JldHJ5X3VubG9jazpcXG4rXFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRuZXdza19sb2NrZWQgPSBmYWxzZTtcXG4rXFx0YmhfdW5sb2NrX3NvY2soc2spO1xcbitcXHRzb2NrX3B1dChzayk7XFxuK1xcdHNvY2tfcHV0KG5ld3NrKTtcXG4rXFx0bmV3c2sgPSBOVUxMO1xcbitcXHRuZXdza19sb29rdXBfcmVmID0gZmFsc2U7XFxuK1xcdGdvdG8gbG9va3VwO1xcbiBkcm9wOlxcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuO1xcbkBAIC04NTIsMTIgKzEwNDIsNTIgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdGludCByYyA9IDA7XFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4rXFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVxcdTAwM2VzaztcXG4gXFxuIFxcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XFxuLVxcdFxcdGlmIChsaWtlbHkobGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIDEpKSAvKiBub3QgY2xvc2VkICovXFxuK1xcdFxcdGlmIChuZXdzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhuZXdzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbitcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG4rXFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cXG4rXFx0XFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fFxcbitcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcXG4rXFx0XFx0XFx0ICAgIGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XFxuK1xcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuK1xcdFxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9rZnJlZV9za2I7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XFxuLVxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc2sobmV3c2spLVxcdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cXG4rXFx0XFx0XFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxcbitcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChuZXdzayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICBhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdFxcdFxcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcXG4rXFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbitcXHRcXHRcXHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcXG4rXFx0XFx0XFx0aWYgKGxsY19zayhuZXdzayktXFx1MDAzZXN0YXRlIFxcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XFxuK1xcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0X2tmcmVlX3NrYjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyYyA9IGxsY19jb25uX3JjdihuZXdzaywgc2tiKTtcXG4rXFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChsaWtlbHkobGxjLVxcdTAwM2VzdGF0ZSBcXHUwMDNlIDEpKSB7XFxuK1xcdFxcdFxcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xcbitcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRnb3RvIG91dF9rZnJlZV9za2I7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7XFxuIFxcdFxcdC8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi9cXG4gXFx0XFx0aWYgKGxpa2VseShsbGMtXFx1MDAzZXN0YXRlIFxcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXFxuQEAgLTg3MCw2ICsxMTAwLDIzIEBAIHN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0fVxcbiBvdXQ6XFxuIFxcdHJldHVybiByYztcXG4rcmV0cnk6XFxuK1xcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bGxjX3NrKG5ld3NrKS1cXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XFxuK1xcdCAgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7XFxuK1xcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0XFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XFxuK1xcdFxcdGlmIChsbGNfc2sobmV3c2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNlPSBMTENfQ09OTl9TVEFURV9BRE0pXFxuK1xcdFxcdFxcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xcbitcXHRcXHRlbHNlIHtcXG4rXFx0XFx0XFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xcbitcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfa2ZyZWVfc2tiO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4rXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGdvdG8gb3V0X2tmcmVlX3NrYjtcXG4gb3V0X2tmcmVlX3NrYjpcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdGdvdG8gb3V0O1xcbkBAIC05NjAsMTYgKzEyMDcsMTcgQEAgdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxcbiAvKipcXG4gICpcXHRsbGNfc2tfZnJlZSAtIEZyZWVzIGEgTExDIHNvY2tldFxcbiAgKlxcdEBzazogLSBzb2NrZXQgdG8gZnJlZVxcbisgKlxcdEBzeW5jOiB3aGV0aGVyIHRvIHN5bmNocm9ub3VzbHkgc3RvcCB0aW1lcnNcXG4gICpcXG4gICpcXHRGcmVlcyBhIExMQyBzb2NrZXRcXG4gICovXFxuLXZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxcbiB7XFxuIFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG4gXFxuIFxcdGxsYy1cXHUwMDNlc3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDO1xcbiBcXHQvKiBTdG9wIGFsbCAocG9zc2libHkpIHJ1bm5pbmcgdGltZXJzICovXFxuLVxcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHRydWUpO1xcbitcXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCBzeW5jKTtcXG4gI2lmZGVmIERFQlVHX0xMQ19DT05OX0FMTE9DXFxuIFxcdHByaW50ayhLRVJOX0lORk8gXFxcIiVzOiB1bmFja3E9JWQsIHR4cT0lZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdHNrYl9xdWV1ZV9sZW4oXFx1MDAyNmxsYy1cXHUwMDNlcGR1X3VuYWNrX3EpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToxMzoyOS41NzkwNDM5NTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg0Mjk2MDc4ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxMQzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfYWNjZXB0X2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuXCIsXG4gICAgXCJsbGNfY29ubl9oYW5kbGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBtYWNoaW5lIGFuZCB3b3JrcXVldWUgZm9yIGhhbmRsaW5nIGluY29taW5nIExMQyBjb25uZWN0aW9ucyB0byBmaXggcmFjZSBjb25kaXRpb25zIGFuZCBsaWZlY3ljbGUgaXNzdWVzLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiB0aGUgY29yZSBMTEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFBGX0xMQyBzb2NrZXRzIGFuZCBuZXR3b3JrIHRyYWZmaWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwMzI5ZDUzYWNjNzA1NmJlNjM0MDdmZGNlMmI4NGVmZjQ3NjEzY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwOToxMzoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5pbmRleCBlMWEzMDI2OTY3MjM0Li5lODAwM2RiMTEwYWQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuKysrIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaFxuQEAgLTYsNiArNiw3IEBAXG4gICogXHRcdCAyMDAxLCAyMDAyIGJ5IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyBcdTAwM2NhY21lQGNvbmVjdGl2YS5jb20uYnJcdTAwM2VcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2lmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGxjLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCwxMCBAQFxuICNkZWZpbmUgTExDX0VWRU5UICAgICAgICAgICAgICAgIDFcbiAjZGVmaW5lIExMQ19QQUNLRVQgICAgICAgICAgICAgICAyXG4gXG4rI2RlZmluZSBMTENfSU5DT01JTkdfTk9ORSAgICAgICAgMFxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX1BFTkRJTkcgICAgIDFcbisjZGVmaW5lIExMQ19JTkNPTUlOR19RVUVVRUQgICAgICAyXG4rXG4gI2RlZmluZSBMTEMyX1BfVElNRSAgICAgICAgICAgICAgIDJcbiAjZGVmaW5lIExMQzJfQUNLX1RJTUUgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDMl9SRUpfVElNRSAgICAgICAgICAgICAzXG5AQCAtNzIsNiArNzcsOSBAQCBzdHJ1Y3QgbGxjX3NvY2sge1xuIFx0XHRcdFx0XHQgICAgICByZWNlaXZlZCBhbmQgY2F1c2VkIHNlbmRpbmcgRlJNUi5cbiBcdFx0XHRcdFx0ICAgICAgVXNlZCBmb3IgcmVzZW5kaW5nIEZSTVIgKi9cbiBcdHUzMlx0XHQgICAgY21zZ19mbGFncztcbitcdGF0b21pY190XHQgICAgaW5jb21pbmdfc3RhdGU7XG4rXHRzdHJ1Y3Qgc29ja1x0ICAgICppbmNvbWluZ19saXN0ZW5lcjtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCBpbmNvbWluZ193b3JrO1xuIFx0c3RydWN0IGhsaXN0X25vZGUgICBkZXZfaGFzaF9ub2RlO1xuIH07XG4gXG5AQCAtOTMsNyArMTAxLDEwIEBAIHN0YXRpYyBfX2lubGluZV9fIGNoYXIgbGxjX2JhY2tsb2dfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0cnVjdCBzb2NrICpsbGNfc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0XHQgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pO1xuIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7XG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuK3ZvaWQgbGxjX3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpO1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuK2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHZvaWQgbGxjX3NrX3Jlc2V0KHN0cnVjdCBzb2NrICpzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmNcbmluZGV4IGIwNDQ3YzMzZGJmMDkuLmU4MDU0ODA5Y2YwY2YgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2FmX2xsYy5jXG4rKysgYi9uZXQvbGxjL2FmX2xsYy5jXG5AQCAtMjcsNiArMjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfc2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX3BkdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19jb25uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2Nfc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2VcbiBcbiAvKiByZW1lbWJlcjogdW5pbml0aWFsaXplZCBnbG9iYWwgZGF0YSBpcyB6ZXJvZWQgYmVjYXVzZSBpdHMgaW4gLmJzcyAqL1xuQEAgLTE5Niw2ICsxOTcsNyBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjO1xuK1x0Ym9vbCBsaXN0ZW5lcjtcbiBcbiBcdGlmICh1bmxpa2VseShzayA9PSBOVUxMKSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtMjA2LDYgKzIwOCw5IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdFx0bGxjLVx1MDAzZWxhZGRyLmxzYXAsIGxsYy1cdTAwM2VkYWRkci5sc2FwKTtcbiBcdGlmICghbGxjX3NlbmRfZGlzYyhzaykpXG4gXHRcdGxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2dGltZW8pKTtcbitcdGxpc3RlbmVyID0gc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTjtcbitcdGlmIChsaXN0ZW5lcilcbitcdFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbiBcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHtcbiBcdFx0c3RydWN0IGxsY19zYXAgKnNhcCA9IGxsYy1cdTAwM2VzYXA7XG4gXG5AQCAtMjE0LDE2ICsyMTksMTggQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHQgKi9cbiBcdFx0bGxjX3NhcF9ob2xkKHNhcCk7XG4gXHRcdGxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtXHUwMDNlc2FwLCBzayk7XG4rXHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0bGxjX3NhcF9wdXQoc2FwKTtcbiBcdH0gZWxzZSB7XG4rXHRcdGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHNrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdH1cbiBcdG5ldGRldl9wdXQobGxjLVx1MDAzZWRldiwgXHUwMDI2bGxjLVx1MDAzZWRldl90cmFja2VyKTtcbiBcdHNvY2tfcHV0KHNrKTtcbiBcdHNvY2tfb3JwaGFuKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0bGxjX3NrX2ZyZWUoc2spO1xuK1x0bGxjX3NrX2ZyZWUoc2ssIHRydWUpO1xuIG91dDpcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MjIsNiArNzI5LDE3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0XHRnb3RvIGZyZWVzO1xuIFx0cmMgPSAwO1xuIFx0bmV3c2sgPSBza2ItXHUwMDNlc2s7XG4rXHRsb2NrX3NvY2tfbmVzdGVkKG5ld3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4rXHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNIHx8XG4rXHQgICAgIWxsY19hY2NlcHRfaW5jb21pbmdfc29jayhuZXdzaykpIHtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfTk9ORSlcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0cmVsZWFzZV9zb2NrKG5ld3NrKTtcbitcdFx0c29ja19wdXQobmV3c2spO1xuK1x0XHRyYyA9IC1FQ09OTkFCT1JURUQ7XG4rXHRcdGdvdG8gZnJlZXM7XG4rXHR9XG4gXHQvKiBhdHRhY2ggY29ubmVjdGlvbiB0byBhIG5ldyBzb2NrZXQuICovXG4gXHRsbGNfdWlfc2tfaW5pdChuZXdzb2NrLCBuZXdzayk7XG4gXHRzb2NrX3Jlc2V0X2ZsYWcobmV3c2ssIFNPQ0tfWkFQUEVEKTtcbkBAIC03MzcsNiArNzU1LDggQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRza19hY2NlcHRxX3JlbW92ZWQoc2spO1xuIFx0ZHByaW50ayhcIiVzOiBvayBzdWNjZXNzIG9uICUwMlgsIGNsaWVudCBvbiAlMDJYXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRsbGNfc2soc2spLVx1MDAzZWFkZHIuc2xsY19zYXAsIG5ld2xsYy1cdTAwM2VkYWRkci5sc2FwKTtcbitcdHJlbGVhc2Vfc29jayhuZXdzayk7XG4rXHRzb2NrX3B1dChuZXdzayk7XG4gZnJlZXM6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY29ubi5jIGIvbmV0L2xsYy9sbGNfY29ubi5jXG5pbmRleCAyNjA0NjBkNTBmNTRjLi40YTM0ZjI0MGFkMmNjIDEwMDY0NFxuLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jXG4rKysgYi9uZXQvbGxjL2xsY19jb25uLmNcbkBAIC0zMiw2ICszMiw3IEBAIHN0YXRpYyBpbnQgbGxjX2V4ZWNfY29ubl90cmFuc19hY3Rpb25zKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqZXYpO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgKmxsY19xdWFsaWZ5X2Nvbm5fZXYoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuIC8qIE9mZnNldCB0YWJsZSBvbiBjb25uZWN0aW9uIHN0YXRlcyB0cmFuc2l0aW9uIGRpYWdyYW0gKi9cbiBzdGF0aWMgaW50IGxsY19vZmZzZXRfdGFibGVbTkJSX0NPTk5fU1RBVEVTXVtOQlJfQ09OTl9FVl07XG5AQCAtODgsNiArODksMTMgQEAgaW50IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQgKiBza2ItXHUwMDNlc2sgcG9pbnRpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgaW5cbiBcdFx0ICogbGxjX2Nvbm5faGFuZGxlci4gLWFjbWVcbiBcdFx0ICovXG4rXHRcdGlmIChzayAhPSBza2ItXHUwMDNlc2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0c29ja19ob2xkKHNrYi1cdTAwM2Vzayk7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSxcbitcdFx0XHRcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpO1xuK1x0XHR9XG4gXHRcdHNrYl9nZXQoc2tiKTtcbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbkBAIC0zNTQsNyArMzYyLDggQEAgc3RhdGljIGludCBsbGNfY29ubl9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcdGludCByYyA9IDE7XG4gXG4tXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSBOQlJfQ09OTl9TVEFURVMpXG4rXHRpZiAobGxjLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0gfHxcbitcdCAgICBsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcbiBcdFx0Z290byBvdXQ7XG4gXHRyYyA9IDA7XG4gXHR0cmFucyA9IGxsY19xdWFsaWZ5X2Nvbm5fZXYoc2ssIHNrYik7XG5AQCAtNzY1LDI3ICs3NzQsMTYyIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayxcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlbGFkZHIsIGRhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWxhZGRyKSk7XG4gXHRtZW1jcHkoXHUwMDI2bmV3bGxjLVx1MDAzZWRhZGRyLCBzYWRkciwgc2l6ZW9mKG5ld2xsYy1cdTAwM2VkYWRkcikpO1xuIFx0bmV3bGxjLVx1MDAzZWRldiA9IGRldjtcbitcdG5ld2xsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lciA9IHNrO1xuK1x0YXRvbWljX3NldChcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19QRU5ESU5HKTtcbitcdElOSVRfV09SSyhcdTAwMjZuZXdsbGMtXHUwMDNlaW5jb21pbmdfd29yaywgbGxjX2luY29taW5nX3NvY2tfd29yayk7XG4rXHRzb2NrX2hvbGQoc2spO1xuIFx0ZGV2X2hvbGQoZGV2KTtcbiBcdGxsY19zYXBfYWRkX3NvY2tldChsbGMtXHUwMDNlc2FwLCBuZXdzayk7XG4gb3V0OlxuIFx0cmV0dXJuIG5ld3NrO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGxjX3NvY2ssXG4rXHRcdFx0XHRcdFx0ICAgIGluY29taW5nX3dvcmspO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2bGxjLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNvY2sgKmxpc3RlbmVyID0gbGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuK1xuK1x0bG9ja19zb2NrKGxpc3RlbmVyKTtcbitcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcdGxsY19za19mcmVlKHNrLCBmYWxzZSk7XG4rXHRzb2NrX29ycGhhbihzayk7XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1x0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XG4rXHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xuK1x0ZGV2X3B1dChsbGMtXHUwMDNlZGV2KTtcbitcdGxsYy1cdTAwM2VkZXYgPSBOVUxMO1xuK1x0c29ja19wdXQoc2spO1xuK1x0c29ja19wdXQobGlzdGVuZXIpO1xuK31cbitcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfc3RhdGUsIExMQ19JTkNPTUlOR19OT05FKSA9PVxuK1x0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRXUklURV9PTkNFKGxsYy1cdTAwM2VzdGF0ZSwgTExDX0NPTk5fT1VUX09GX1NWQyk7XG4rXHRzb2NrX2hvbGQoc2spO1xuK1x0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cdTAwM2VzYXAsIHNrKTtcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3dvcmspO1xuK31cbitcbitib29sIGxsY19hY2NlcHRfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuK1xuK1x0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1FVRVVFRCxcbitcdFx0XHRcdCAgTExDX0lOQ09NSU5HX05PTkUpICE9IExMQ19JTkNPTUlOR19RVUVVRUQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHNvY2tfcHV0KGxsYy1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcik7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpKSB7XG4rXHRcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cdTAwM2VzaztcbitcbitcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNiBuZXdzayAhPSBzaykge1xuK1x0XHRcdGludCBpbmNvbWluZ19zdGF0ZTtcbitcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpbmNvbWluZ19zdGF0ZSA9XG4rXHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKTtcbitcdFx0XHRpZiAoaW5jb21pbmdfc3RhdGUgIT0gTExDX0lOQ09NSU5HX05PTkUpIHtcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0aWYgKGluY29taW5nX3N0YXRlID09IExMQ19JTkNPTUlOR19RVUVVRUQpXG4rXHRcdFx0XHRcdHNvY2tfcHV0KG5ld3NrKTtcbitcdFx0XHR9XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHR9XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0fVxuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rfVxuK1xuKy8qXG4rICogVGhpcyBtaXJyb3JzIHRoZSBBRE0tc3RhdGUgRE0gYWN0aW9ucywgYnV0IGEgbGlzdGVuZXIgaGFzIG5vIHBlZXJcbisgKiBhZGRyZXNzIGluIGxsYy1cdTAwM2VkYWRkciB5ZXQuXG4rICovXG4rc3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCBzdHJ1Y3QgbGxjX2FkZHIgKnNhZGRyLCB1OCBmX2JpdClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbitcdGludCByYztcbitcbitcdG5za2IgPSBsbGNfYWxsb2NfZnJhbWUoTlVMTCwgc2tiLVx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xuK1x0aWYgKCFuc2tiKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXHUwMDNlbGFkZHIubHNhcCxcbitcdFx0XHQgICAgc2FkZHItXHUwMDNlbHNhcCwgTExDX1BEVV9SU1ApO1xuK1x0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XG4rXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgc2FkZHItXHUwMDNlbWFjKTtcbitcdGlmICh1bmxpa2VseShyYykpXG4rXHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdGVsc2VcbitcdFx0ZGV2X3F1ZXVlX3htaXQobnNrYik7XG4rfVxuK1xuIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCBsbGNfYWRkciBzYWRkciwgZGFkZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4rXHRzdHJ1Y3Qgc29jayAqc2ssICpuZXdzayA9IE5VTEw7XG4rXHRib29sIG5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTtcbitcdGJvb2wgbmV3c2tfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHRsbGNfcGR1X2RlY29kZV9zYShza2IsIHNhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXHUwMDI2c2FkZHIubHNhcCk7XG4gXHRsbGNfcGR1X2RlY29kZV9kYShza2IsIGRhZGRyLm1hYyk7XG4gXHRsbGNfcGR1X2RlY29kZV9kc2FwKHNrYiwgXHUwMDI2ZGFkZHIubHNhcCk7XG4gXG4rbG9va3VwOlxuIFx0c2sgPSBfX2xsY19sb29rdXAoc2FwLCBcdTAwMjZzYWRkciwgXHUwMDI2ZGFkZHIsIGRldl9uZXQoc2tiLVx1MDAzZWRldikpO1xuIFx0aWYgKCFzaylcbiBcdFx0Z290byBkcm9wO1xuIFxuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0bmV3c2sgPSBzaztcbitcdFx0YmhfbG9ja19zb2NrKG5ld3NrKTtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRzb2NrX3B1dChuZXdzayk7XG4rXHRcdFx0bmV3c2sgPSBOVUxMO1xuK1x0XHRcdGdvdG8gbG9va3VwO1xuK1x0XHR9XG4rXHRcdHNrID0gbGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19saXN0ZW5lcjtcbitcdFx0c29ja19ob2xkKHNrKTtcbitcdFx0bmV3c2tfbG9va3VwX3JlZiA9IHRydWU7XG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdH1cbitcbiBcdGJoX2xvY2tfc29jayhzayk7XG4rXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKVxuK1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0aWYgKG5ld3NrX2xvb2t1cF9yZWYpIHtcbitcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4rXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0Z290byByZXRyeV91bmxvY2s7XG4rXHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIHx8XG4rXHRcdFx0ICAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpKSB7XG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0fVxuK1x0fVxuIFx0LypcbiBcdCAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGF0IHRoZSB1cHBlciBsYXllciAtXHUwMDNlYWNjZXB0XG4gXHQgKiBtZXRob2QgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBQUk9DT00gc3RhdGUgbWFjaGluZSB3b3JrczpcbkBAIC03OTUsMTAgKzkzOSwyNSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdCAqIGluIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIHByaXZhdGUgYXJlYS4gLWFjbWVcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLVx1MDAzZWRldixcbi1cdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNnNhZGRyLCBcdTAwMjZkYWRkcik7XG4tXHRcdGlmICghbmV3c2spXG4tXHRcdFx0Z290byBkcm9wX3VubG9jaztcbitcdFx0aWYgKCFuZXdzaykge1xuK1x0XHRcdGlmIChsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xuK1x0XHRcdFx0aWYgKCFsbGNfY29ubl9ldl9yeF9kaXNjX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4rXHRcdFx0XHRcdHU4IGZfYml0O1xuK1xuK1x0XHRcdFx0XHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcdTAwMjZmX2JpdCk7XG4rXHRcdFx0XHRcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcdTAwMjZzYWRkciwgZl9iaXQpO1xuK1x0XHRcdFx0fSBlbHNlIGlmICghbGxjX2Nvbm5fZXZfcnhfeHh4X2NtZF9wYml0X3NldF8xKHNrLCBza2IpKSB7XG4rXHRcdFx0XHRcdGxsY19jb25uX3NlbmRfZG1fcnNwKHNhcCwgc2tiLCBcdTAwMjZzYWRkciwgMSk7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRcdH1cbitcdFx0XHRuZXdzayA9IGxsY19jcmVhdGVfaW5jb21pbmdfc29jayhzaywgc2tiLVx1MDAzZWRldiwgXHUwMDI2c2FkZHIsXG4rXHRcdFx0XHRcdFx0XHQgXHUwMDI2ZGFkZHIpO1xuK1x0XHRcdGlmICghbmV3c2spXG4rXHRcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdG5ld3NrX2xvY2tlZCA9IHRydWU7XG4rXHRcdH1cbiBcdFx0c2tiX3NldF9vd25lcl9yKHNrYiwgbmV3c2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0LypcbkBAIC04MTMsMTggKzk3Miw0OSBAQCB2b2lkIGxsY19jb25uX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZXNrID0gc2s7XG4gXHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja19lZnJlZTtcbiBcdH1cbi1cdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSlcbitcdGlmICh1bmxpa2VseShsbGNfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSkge1xuK1x0XHRpZiAobmV3c2spIHtcbitcdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0fSBlbHNlIGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2soc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHRcdCAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzayk7XG4rXHRcdH1cbitcdFx0Z290byBkcm9wX3VubG9jaztcbitcdH1cbitcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xuIFx0XHRsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4tXHRlbHNlIHtcbitcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuK1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0fSBlbHNlIHtcbiBcdFx0ZHByaW50ayhcIiVzOiBhZGRpbmcgdG8gYmFja2xvZy4uLlxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGxsY19zZXRfYmFja2xvZ190eXBlKHNrYiwgTExDX1BBQ0tFVCk7XG4tXHRcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpXG4rXHRcdGlmIChza19hZGRfYmFja2xvZyhzaywgc2tiLCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpIHtcbitcdFx0XHRpZiAobmV3c2spXG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbiBcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHR9XG4gXHR9XG4gb3V0OlxuK1x0aWYgKG5ld3NrX2xvY2tlZClcbitcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuIFx0YmhfdW5sb2NrX3NvY2soc2spO1xuIFx0c29ja19wdXQoc2spO1xuK1x0aWYgKG5ld3NrX2xvb2t1cF9yZWYpXG4rXHRcdHNvY2tfcHV0KG5ld3NrKTtcbiBcdHJldHVybjtcbityZXRyeV91bmxvY2s6XG4rXHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRuZXdza19sb2NrZWQgPSBmYWxzZTtcbitcdGJoX3VubG9ja19zb2NrKHNrKTtcbitcdHNvY2tfcHV0KHNrKTtcbitcdHNvY2tfcHV0KG5ld3NrKTtcbitcdG5ld3NrID0gTlVMTDtcbitcdG5ld3NrX2xvb2t1cF9yZWYgPSBmYWxzZTtcbitcdGdvdG8gbG9va3VwO1xuIGRyb3A6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybjtcbkBAIC04NTIsMTIgKzEwNDIsNTIgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdGludCByYyA9IDA7XG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4rXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza2ItXHUwMDNlc2s7XG4gXG4gXHRpZiAobGlrZWx5KGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfUEFDS0VUKSkge1xuLVx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpIC8qIG5vdCBjbG9zZWQgKi9cbitcdFx0aWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSAhPVxuK1x0XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8XG4rXHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcbitcdFx0XHQgICAgbGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XG4rXHRcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHRcdH1cbiBcdFx0XHRyYyA9IGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdFx0ZWxzZVxuK1x0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0fSBlbHNlIGlmIChuZXdzayBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHRcdCAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbitcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkge1xuK1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdFx0fVxuK1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0fSBlbHNlIGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkge1xuK1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuK1x0XHR9IGVsc2Uge1xuIFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0fVxuIFx0fSBlbHNlIGlmIChsbGNfYmFja2xvZ190eXBlKHNrYikgPT0gTExDX0VWRU5UKSB7XG4gXHRcdC8qIHRpbWVyIGV4cGlyYXRpb24gZXZlbnQgKi9cbiBcdFx0aWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSAgLyogbm90IGNsb3NlZCAqL1xuQEAgLTg3MCw2ICsxMTAwLDIzIEBAIHN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiBvdXQ6XG4gXHRyZXR1cm4gcmM7XG4rcmV0cnk6XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdCAgICBMTENfSU5DT01JTkdfUVVFVUVEKSB7XG4rXHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdGlmIChsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzZT0gTExDX0NPTk5fU1RBVEVfQURNKVxuK1x0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KG5ld3NrLCBza2IpO1xuK1x0XHRlbHNlIHtcbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHR9XG4rXHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0Z290byBvdXRfa2ZyZWVfc2tiO1xuIG91dF9rZnJlZV9za2I6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdGdvdG8gb3V0O1xuQEAgLTk2MCwxNiArMTIwNywxNyBAQCB2b2lkIGxsY19za19zdG9wX2FsbF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLCBib29sIHN5bmMpXG4gLyoqXG4gICpcdGxsY19za19mcmVlIC0gRnJlZXMgYSBMTEMgc29ja2V0XG4gICpcdEBzazogLSBzb2NrZXQgdG8gZnJlZVxuKyAqXHRAc3luYzogd2hldGhlciB0byBzeW5jaHJvbm91c2x5IHN0b3AgdGltZXJzXG4gICpcbiAgKlx0RnJlZXMgYSBMTEMgc29ja2V0XG4gICovXG4tdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4rdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcbiB7XG4gXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4gXG4gXHRsbGMtXHUwMDNlc3RhdGUgPSBMTENfQ09OTl9PVVRfT0ZfU1ZDO1xuIFx0LyogU3RvcCBhbGwgKHBvc3NpYmx5KSBydW5uaW5nIHRpbWVycyAqL1xuLVx0bGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzaywgdHJ1ZSk7XG4rXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCBzeW5jKTtcbiAjaWZkZWYgREVCVUdfTExDX0NPTk5fQUxMT0NcbiBcdHByaW50ayhLRVJOX0lORk8gXCIlczogdW5hY2txPSVkLCB0eHE9JWRcXG5cIiwgX19mdW5jX18sXG4gXHRcdHNrYl9xdWV1ZV9sZW4oXHUwMDI2bGxjLVx1MDAzZXBkdV91bmFja19xKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjEzOjI5LjU3OTA0NTA0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NzM4NjY4NzkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgZmFjdCB0aGF0IGl0J3MgdG91Y2hpbmcgYG5ldC9sbGMvYWZfbGxjLmNgLCBgbmV0L2xsYy9sbGNfY29ubi5jYCwgYW5kIGBpbmNsdWRlL25ldC9sbGNfY29ubi5oYCBpbW1lZGlhdGVseSBzaWduYWxzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB3aXRoaW4gdGhlIExvZ2ljYWwgTGluayBDb250cm9sIChMTEMpIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHN0YXRlIG1hY2hpbmUgKGBpbmNvbWluZ19zdGF0ZWApLCBhIHdvcmtxdWV1ZSAoYGluY29taW5nX3dvcmtgKSwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gY29ubmVjdGlvbiBoYW5kbGluZyBmdW5jdGlvbnMgKGBsbGNfY29ubl9oYW5kbGVyYCwgYGxsY19iYWNrbG9nX3JjdmAsIGBsbGNfdWlfYWNjZXB0YCwgYGxsY191aV9yZWxlYXNlYCkgc3Ryb25nbHkgc3VnZ2VzdHMgcmFjZSBjb25kaXRpb24gb3IgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgYmVpbmcgYWRkcmVzc2VkIGluIHRoZSBoYW5kbGluZyBvZiBpbmNvbWluZyBjb25uZWN0aW9ucyBvbiBsaXN0ZW5pbmcgc29ja2V0cy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIExMQyBpcyBldmVuICpyZWFjaGFibGUqIGluIG91ciB0YXJnZXQgZW52aXJvbm1lbnRzLiBUaGFua2Z1bGx5LCBzaW5jZSBMTEMgaXMgYSBzdGFuZGFyZCBuZXR3b3JraW5nIHByb3RvY29sICg4MDIuMiksIGFuZCBjYW4gYmUgdXNlZCBvdmVyIHN0YW5kYXJkIHZpcnR1YWwgRXRoZXJuZXQgaW50ZXJmYWNlcyBsaWtlIGB2ZXRoYCwgYGR1bW15YCwgYW5kIGBsb29wYmFja2AsIEknbSBjb25maWRlbnQgd2UgY2FuIGluY2x1ZGUgaXQgaW4gb3VyIGZ1enppbmcgc2NvcGUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYG5ldC9sbGMvS2NvbmZpZ2AgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIEknbSBiZXR0aW5nIHdlJ2xsIGZpbmQgYENPTkZJR19MTENgIG9yIHBvc3NpYmx5IGBDT05GSUdfTExDMmAgaW4gdGhlcmUuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIGNvbmZpcm0gdGhvc2UgYW5kIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgc28gd2UgY2FuIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMgYXJlIGJ1aWx0IGFuZCBlbmFibGVkIGZvciBvdXIgZnV6emluZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjE3OjM2Ljk2NTczNTIxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjAyMDIyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExMQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbGxjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2xsYy9LY29uZmlnOjI6Y29uZmlnIExMQ1xcbm5ldC9sbGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxubmV0L2xsYy9LY29uZmlnLTQtXFxubmV0L2xsYy9LY29uZmlnOjU6Y29uZmlnIExMQzJcXG5uZXQvbGxjL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiQU5TSS9JRUVFIDgwMi4yIExMQyB0eXBlIDIgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MTc6MzcuMzI1OTQ0NTU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjAxODI0NDg0NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29yayBzdGFjayBjb25maWd1cmF0aW9uOlxuXG4qKkxMQzIgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYENPTkZJR19MTEMyYCBoZXJlLiBUaGF0J3MgdGhlIHByaW1hcnkgc3dpdGNoLCB0aGUgYmlnIG9uZSwgdGhlIG9uZSB0aGF0ICplbmFibGVzKiBMTEMgdHlwZSAyIHN1cHBvcnQuIEFuZCwgYXMgSSByZWNhbGwsIHRoYXQgaW5jbHVkZXMgZXZlcnl0aGluZyBpbiBgYWZfbGxjLmNgLCBzcGVjaWZpY2FsbHkgdGhlIHNvY2tldC1yZWxhdGVkIGNvZGUuIEdpdmVuIHRoYXQsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbGxjL01ha2VmaWxlYC4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgYnVpbHQgYXMgZXhwZWN0ZWQuIE1ha2luZyBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJpZ2h0LCBhbmQgdGhhdCB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlcyBnZXQgbGlua2VkIGNvcnJlY3RseS4gTGV0J3MgbWFrZSBzdXJlIGl0IGlzIGFsbCBnb2luZyBhcyBwbGFubmVkLCBhbmQgdGhhdCB0aGUgYnVpbGQgaXMgc2V0IHVwIGFwcHJvcHJpYXRlbHkuIEl0J3MgYSBrZXkgcGllY2UgdG8gbWFrZSBzdXJlIExMQ3YyIHNvY2tldHMgYXJlIGNvcnJlY3RseSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDA2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MjA6NTkuMTUwNDMxODU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzQ4Njk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9sbGNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbGxjL01ha2VmaWxlPTE1PWxsYzIteSA6PSBsbGNfaWYubyBsbGNfY19ldi5vIGxsY19jX2FjLm8gbGxjX2Nvbm4ubyBsbGNfY19zdC5vIGxsY19wZHUubyBcXFxcXFxubmV0L2xsYy9NYWtlZmlsZToxNjpcXHQgIGxsY19zYXAubyBsbGNfc19hYy5vIGxsY19zX2V2Lm8gbGxjX3Nfc3QubyBhZl9sbGMubyBsbGNfc3RhdGlvbi5vXFxubmV0L2xsYy9NYWtlZmlsZS0xNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MjA6NTkuNjUzOTIzMDY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA1NjkwNTQ2MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTExDMiBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBgbGxjMi15YCBkZWZpbml0ZWx5IGltcGxpZXMgdGhhdCBgYWZfbGxjLm9gIGlzIGludm9sdmVkLCB3aGljaCBjb25maXJtcyB0aGF0IGBDT05GSUdfTExDMmAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBHb29kLCB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIE5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZ1enouXG5cbkZyb20gdGhlIHBhdGNoIGFuYWx5c2lzLCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQ6IGBsbGNfdWlfcmVsZWFzZWAsIGBsbGNfdWlfYWNjZXB0YCwgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLCBgbGxjX2Nvbm5fc2VydmljZWAsIGBsbGNfY3JlYXRlX2luY29taW5nX3NvY2tgLCBgbGxjX2luY29taW5nX3NvY2tfd29ya2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAsIGBsbGNfY29ubl9zZW5kX2RtX3JzcGAsIGBsbGNfY29ubl9oYW5kbGVyYCwgYGxsY19iYWNrbG9nX3JjdmAsIGFuZCBgbGxjX3NrX2ZyZWVgLlxuXG5CYXNlZCBvbiB0aG9zZSBtb2RpZmljYXRpb25zLCBteSBpbml0aWFsIGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gYGxsY191aV9hY2NlcHRgLCBgbGxjX3VpX3JlbGVhc2VgLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfYmFja2xvZ19yY3ZgLCBhbmQgYGxsY19jb25uX3N0YXRlX3Byb2Nlc3NgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBtb3N0IGNyaXRpY2FsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgZGF0YSBoYW5kbGluZy5cblxuSSBzdXNwZWN0IHRoYXQgYGxsY19jb25uX2hhbmRsZXJgIGlzIGxpa2VseSBjYWxsZWQgZnJvbSBgbGxjX3JjdmAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB0aGF0IGluIGBuZXQvbGxjL2xsY19pbnB1dC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToyNDoyNS4zNDQ0NzMwMzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5MzM2MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19jb25uX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2xsYy9hZl9sbGMuYz0xMjY4PXN0YXRpYyBpbnQgX19pbml0IGxsYzJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy0xMjkzLVxcdGxsY19hZGRfcGFjayhMTENfREVTVF9TQVAsIGxsY19zYXBfaGFuZGxlcik7XFxubmV0L2xsYy9hZl9sbGMuYzoxMjk0OlxcdGxsY19hZGRfcGFjayhMTENfREVTVF9DT05OLCBsbGNfY29ubl9oYW5kbGVyKTtcXG5uZXQvbGxjL2FmX2xsYy5jLTEyOTUtb3V0Olxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTU3PWludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04OS1cXHRcXHQgKiBza2ItXFx1MDAzZXNrIHBvaW50aW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIHN0cnVjdCBzb2NrIGluXFxubmV0L2xsYy9sbGNfY29ubi5jOjkwOlxcdFxcdCAqIGxsY19jb25uX2hhbmRsZXIuIC1hY21lXFxubmV0L2xsYy9sbGNfY29ubi5jLTkxLVxcdFxcdCAqL1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTg4Mi1cXG5uZXQvbGxjL2xsY19jb25uLmM6ODgzOnZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04ODQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToyNDoyNS45NjM4MTI4OTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjYyNjg2NTc1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBMTEMgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBMTEMgY29ubmVjdGlvbiBjb2RlIGFuZCBpbW1lZGlhdGVseSBrZXlpbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBlbnRyeSBwb2ludHMuIGBsbGNfY29ubl9oYW5kbGVyYCBpcyB3aGVyZSBldmVyeXRoaW5nIHN0YXJ0cywgdGhlIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIGNvbm5lY3Rpb24gcGFja2V0cyDigJMgdGhhdCdzIGNlbnRyYWwuIFRoZW4gd2UgaGF2ZSBgbGxjX3VpX2FjY2VwdGAsIHRoZSBhY2NlcHQgc3lzY2FsbCBoYW5kbGVyOyBpdCBtYW5hZ2VzIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGVzdGFibGlzaGVkIGxvY2FsbHkuICBgbGxjX3VpX3JlbGVhc2VgIGhhbmRsZXMgdGhlIGNsb3N1cmUgb2YgdGhlc2UgY29ubmVjdGlvbnMsIHdoaWNoIGlzIGFub3RoZXIgY3JpdGljYWwgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gQW5kIGZpbmFsbHksIGBsbGNfYmFja2xvZ19yY3ZgLCB0aGUgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgdGhlIGNvbm5lY3Rpb24gYmFja2xvZywgaXMgdGhlIGxhc3QgcG9pbnQgSSB3YW50IHRvIGZ1bGx5IHVuZGVyc3RhbmQuXG5cbk15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZm91ciBmdW5jdGlvbnM6IGBsbGNfdWlfYWNjZXB0YCwgYGxsY191aV9yZWxlYXNlYCwgYGxsY19jb25uX2hhbmRsZXJgLCBhbmQgYGxsY19iYWNrbG9nX3JjdmAuIFRoZXkgcmVwcmVzZW50IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBMTEMgY29ubmVjdGlvbiBtYW5hZ2VtZW50LlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgYGxsY19jb25uX2hhbmRsZXJgIGlzbid0IHN0YXRpYywgc28gaXTigJlzIGxpa2VseSBleHBvc2VkIGluIHRoZSBzeW1ib2wgdGFibGU7IGJ1dCBiZWZvcmUgSSBkZWx2ZSBpbnRvIGl0IGZ1bGx5IEkgd2FudCB0byBzZWUgaWYgYGxsY19iYWNrbG9nX3JjdmAgaXMgc3RhdGljLiBGcm9tIHdoYXQgSSByZW1lbWJlciBpdCBpcyBzdGF0aWMgaW4gYG5ldC9sbGMvbGxjX2Nvbm4uY2AsIHNvIEknbGwgZ28gY2hlY2sgdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToyNzoxMi4yMzI0NzM5ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTkwMjg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfYmFja2xvZ19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9sbGNfY29ubi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvbGxjX2Nvbm4uYz0xMDI4PXN0YXRpYyBhdG9taWNfdCBsbGNfc29ja19ucjtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDMxLS8qKlxcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMDMyOiAqXFx0bGxjX2JhY2tsb2dfcmN2IC0gUHJvY2Vzc2VzIHJ4IGZyYW1lcyBhbmQgZXhwaXJlZCB0aW1lcnMuXFxubmV0L2xsYy9sbGNfY29ubi5jLTEwMzMtICpcXHRAc2s6IExMQyBzb2NrIChwODAyMiBjb25uZWN0aW9uKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTEwNDAtICovXFxubmV0L2xsYy9sbGNfY29ubi5jOjEwNDE6c3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDQyLXtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz0xMTMxPXN0YXRpYyB2b2lkIGxsY19za19pbml0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMTU1LVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmxsYy1cXHUwMDNlcGR1X3VuYWNrX3EpO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMTU2OlxcdHNrLVxcdTAwM2Vza19iYWNrbG9nX3JjdiA9IGxsY19iYWNrbG9nX3JjdjtcXG5uZXQvbGxjL2xsY19jb25uLmMtMTE1Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjI3OjEyLjg2NDM4MTA0MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk4ODI0MDI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBMTEMgQmFja2xvZyBhbmQgQ29ubmVjdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGBsbGNfYmFja2xvZ19yY3ZgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIEkgc2VlIHRoYXQgaXQncyBhbHNvIGFzc2lnbmVkIHRvIGBzay1cdTAwM2Vza19iYWNrbG9nX3JjdmAuIEhtbSwgSSdtIHRoaW5raW5nIGl0IG1pZ2h0IGJlIGNsZWFuZXIgdG8gbGV2ZXJhZ2UgdGhlIGV4aXN0aW5nIGhhbmRsZXJzLCBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfdWlfYWNjZXB0YCwgYW5kIGBsbGNfdWlfcmVsZWFzZWAgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc3RhdGljIGZ1bmN0aW9uLiBJdCBmZWVscyBsaWtlIHRoZXJlJ3MgcHJvYmFibHkgYSBtb3JlIGVsZWdhbnQgd2F5IHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcsIGxldmVyYWdpbmcgZXhpc3RpbmcgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIE5vdywgaG9sZCBvbiBhIHNlY29uZOKApiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTGV0IG1lIHNlZS4uLiBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AgaXMgKm5vdCogc3RhdGljLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG1vZGlmaWVkLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgdG8gbWFrZSBzdXJlIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBhY2N1cmF0ZSBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgcmVmYWN0b3JpbmcuIExldCdzIHNlZSBob3cgdGhhdCBvbmUgaXMgYmVpbmcgdXNlZOKAplxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjI5OjMyLjc0Njc4NzA3NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4NjMxNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19jb25uX3N0YXRlX3Byb2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9sbGNfY29ubi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvbGxjX2Nvbm4uYz00Mz1pbnQgc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0ID0gTExDMl9CVVNZX1RJTUUgKiBIWjtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy00NS0vKipcXG5uZXQvbGxjL2xsY19jb25uLmM6NDY6ICpcXHRsbGNfY29ubl9zdGF0ZV9wcm9jZXNzIC0gc2VuZHMgZXZlbnQgdG8gY29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lXFxubmV0L2xsYy9sbGNfY29ubi5jLTQ3LSAqXFx0QHNrOiBjb25uZWN0aW9uXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtNTYtICovXFxubmV0L2xsYy9sbGNfY29ubi5jOjU3OmludCBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbGxjL2xsY19jb25uLmMtNTgte1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTE4MD12b2lkIGxsY19jb25uX3NlbmRfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xOTMtICpcXHRQcmVwYXJlcyBzZXJ2aWNlIHBhcmFtZXRlcnMgKHByaW0gYW5kIHByaW1fZGF0YSkuIGNhbGxpbmcgaW5kaWNhdGlvblxcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxOTQ6ICpcXHRmdW5jdGlvbiB3aWxsIGJlIGRvbmUgaW4gbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzcy5cXG5uZXQvbGxjL2xsY19jb25uLmMtMTk1LSAqL1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTc1Mz1zdGF0aWMgaW50IGxsY19jb25uX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtNzU4LVxcdGV2LVxcdTAwM2VyZWFzb24gPSAwO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo3NTk6XFx0cmV0dXJuIGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxubmV0L2xsYy9sbGNfY29ubi5jLTc2MC19XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTk2NC1cXHRcXHQgKiBDYW4ndCBiZSBza2Jfc2V0X293bmVyX3IsIHRoaXMgd2lsbCBiZSBkb25lIGF0IHRoZVxcbm5ldC9sbGMvbGxjX2Nvbm4uYzo5NjU6XFx0XFx0ICogbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyBmdW5jdGlvbiwgbGF0ZXIgb24sIHdoZW4gd2Ugd2lsbCB1c2VcXG5uZXQvbGxjL2xsY19jb25uLmMtOTY2LVxcdFxcdCAqIHNrYl9xdWV1ZV9yY3Zfc2tiIHRvIHNlbmQgaXQgdG8gdXBwZXIgbGF5ZXJzLCB0aGlzIGlzXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9MTA0MT1zdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtMTA5My1cXHRcXHRpZiAobGlrZWx5KGxsYy1cXHUwMDNlc3RhdGUgXFx1MDAzZSAxKSkgIC8qIG5vdCBjbG9zZWQgKi9cXG5uZXQvbGxjL2xsY19jb25uLmM6MTA5NDpcXHRcXHRcXHRyYyA9IGxsY19jb25uX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxubmV0L2xsYy9sbGNfY29ubi5jLTEwOTUtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOToyOTozMy4xNjU0MjQ4NjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxNjAwMzgyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBMTEMgQ29ubmVjdGlvbiBTdGF0ZSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUsIG15IGluaXRpYWwgaW5zdGluY3Qgc2F5cyBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AgaXMgYSBzdHJvbmcgY29udGVuZGVyIGZvciB0aGUgZnVuY3Rpb24gaGFuZGxpbmcgc3RhdGUgdHJhbnNpdGlvbnMuIFRoYXQncyB1c3VhbGx5IHRoZSBwbGFjZSB0byBzdGFydC4gTm93LCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbm5lY3Rpb24ncyBzdGF0ZSB0cmFuc2l0aW9ucywgSSB0aGluayBpdCdzIGNydWNpYWwgdG8gY2hlY2sgdGhlIHVzZXIgaW50ZXJmYWNlIHNpZGUgYXMgd2VsbC4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBpbiBgbmV0L2xsYy9hZl9sbGMuY2AuIFRoZXNlIHNob3VsZCBpbGx1bWluYXRlIGhvdyB0aGUgdXBwZXIgbGF5ZXJzIGFyZSBpbnRlcmFjdGluZyB3aXRoIGFuZCBtYW5pcHVsYXRpbmcgY29ubmVjdGlvbiBzdGF0ZXMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGxpa2VseSBjbGFyaWZ5IGEgbG90IGFib3V0IHRoZSBvdmVyYWxsIGNvbm5lY3Rpb24gZmxvdyBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHN0YXRlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzY2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzA6NTIuMzI1NDY2NTA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTYyNjY2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX3VpX2FjY2VwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbGxjL2FmX2xsYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvYWZfbGxjLmM9Njc3PXN0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jLTY5Mi0vKipcXG5uZXQvbGxjL2FmX2xsYy5jOjY5MzogKlxcdGxsY191aV9hY2NlcHQgLSBhY2NlcHQgYSBuZXcgaW5jb21pbmcgY29ubmVjdGlvbi5cXG5uZXQvbGxjL2FmX2xsYy5jLTY5NC0gKlxcdEBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLlxcbi0tXFxubmV0L2xsYy9hZl9sbGMuYy03MDAtICovXFxubmV0L2xsYy9hZl9sbGMuYzo3MDE6c3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxubmV0L2xsYy9hZl9sbGMuYy03MDItXFx0XFx0XFx0IHN0cnVjdCBwcm90b19hY2NlcHRfYXJnICphcmcpXFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jPTEyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTI0Ny1cXHQuc29ja2V0cGFpciAgPSBzb2NrX25vX3NvY2tldHBhaXIsXFxubmV0L2xsYy9hZl9sbGMuYzoxMjQ4OlxcdC5hY2NlcHQgICAgICA9IGxsY191aV9hY2NlcHQsXFxubmV0L2xsYy9hZl9sbGMuYy0xMjQ5LVxcdC5nZXRuYW1lICAgICA9IGxsY191aV9nZXRuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMDo1Mi42NDE3NTAzODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MjA5ODgxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBDaGVjayBhbmQgRm9sbG93LVVwKipcblxuT2theSwgc28gYGxsY191aV9hY2NlcHRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFNpbmNlIGl0J3Mgc3RhdGljLCBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LCB3aGljaCBjYW4gaW1wYWN0IGl0cyB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIHJldXNlIGFjcm9zcyBkaWZmZXJlbnQgbW9kdWxlcy4gR2l2ZW4gdGhpcywgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgd2hhdCB0aGF0IGltcGxpZXMuIE5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBsbGNfdWlfcmVsZWFzZWAuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHByb2JhYmx5IGltcG9ydGFudCwgaWYgb25lIGlzIHN0YXRpYyB0aGVuIHdoeSwgYW5kIGlmIHRoZXkgYXJlIHJlbGF0ZWQsIGhvdy4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gcmVsZWFzaW5nIHNvbWV0aGluZyB0aGF0IHdhcyBhY2NlcHRlZCwgb3IgaGFuZGxlZCBkaWZmZXJlbnRseSBpbiBhIHN0YXRpYyBjb250ZXh0LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0J3MgZGVmaW5lZCBhbmQgaG93IGl0J3MgdXNlZC4gVGhpcyBtaWdodCByZXZlYWwgc29tZSBwb3RlbnRpYWwgZGVzaWduIGltcGxpY2F0aW9ucyBvciBjb25zdHJhaW50cy4gSSB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGNhbGxzIGl0IG1ha2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzE6MjYuMDYyNzQxNzA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI1NDE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfdWlfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbGxjL2FmX2xsYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvYWZfbGxjLmM9MTY3PXN0YXRpYyBpbnQgbGxjX3VpX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTkwLS8qKlxcbm5ldC9sbGMvYWZfbGxjLmM6MTkxOiAqXFx0bGxjX3VpX3JlbGVhc2UgLSBzaHV0ZG93biBzb2NrZXRcXG5uZXQvbGxjL2FmX2xsYy5jLTE5Mi0gKlxcdEBzb2NrOiBTb2NrZXQgdG8gcmVsZWFzZS5cXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTk1LSAqL1xcbm5ldC9sbGMvYWZfbGxjLmM6MTk2OnN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvbGxjL2FmX2xsYy5jLTE5Ny17XFxuLS1cXG5uZXQvbGxjL2FmX2xsYy5jPTEyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjX3VpX29wcyA9IHtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTI0My1cXHQub3duZXIgICAgICAgPSBUSElTX01PRFVMRSxcXG5uZXQvbGxjL2FmX2xsYy5jOjEyNDQ6XFx0LnJlbGVhc2UgICAgID0gbGxjX3VpX3JlbGVhc2UsXFxubmV0L2xsYy9hZl9sbGMuYy0xMjQ1LVxcdC5iaW5kXFx0ICAgICA9IGxsY191aV9iaW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMToyNi4xMDgwMDA0NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMDc3MTQ5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgQVBJIEVudHJ5cG9pbnRzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhpcyBmdXp6aW5nIHNldHVwLiBUaGUgcHJvbXB0IGlzIHByZXR0eSBjbGVhcjogaXQgd2FudHMgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2U7IGlubGluaW5nIHdvdWxkIG9ic2N1cmUgdGhlIGZ1bmN0aW9uJ3MgZGlzdGluY3QgYWRkcmVzcywgbWFraW5nIGl0IGhhcmRlciBmb3IgdGhlIGZ1enplciB0byB0YXJnZXQgdGhlbSBlZmZlY3RpdmVseS5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIGBsbGNfdWlfcmVsZWFzZWAgaXMgc3RhdGljLiBUaGF0J3MgYSByZWQgZmxhZy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgbWVhbnMgaXQgd29uJ3QgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcyBpbiB0aGUgZnV6emVyIHVubGVzcyBpdCBzb21laG93ICppc24ndCogaW5saW5lZC4gR3JhbnRlZCwgdGhlc2UgYHByb3RvX29wc2AgZnVuY3Rpb25zICpzaG91bGRuJ3QqIGJlIGlubGluZWQgYmVjYXVzZSB0aGVpciBhZGRyZXNzZXMgYXJlIHVzdWFsbHkgdGFrZW4sIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gSXQncyBhIHJpc2suIEnigJlsbCBtYWtlIHN1cmUgdG8gZXhwbG9yZSB3aGV0aGVyIG9yIG5vdCBpdCdzIGFjdHVhbGx5IGlubGluZWQuXG5cbkhvd2V2ZXIsIHNpbmNlIGBsbGNfdWlfYWNjZXB0YCBhbmQgYGxsY191aV9yZWxlYXNlYCBhcmUgaG9va2VkIGludG8gYHByb3RvX29wc2AsIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGV5IGFyZW4ndCBpbmxpbmVkIGF0IGFsbC4gSSB3aWxsIHRha2UgdGhpcyBpbnRvIGFjY291bnQuXG5cblRvIGJlIGV4dHJhIHNhZmUsIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZXNlIG9wZXJhdGlvbnMuIEkgY2FuIGFsc28gaW5jbHVkZSBgbGxjX2Nvbm5faGFuZGxlcmAgYW5kIGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AgYW5kIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgIGFyZSAqbm9uLXN0YXRpYyogYW5kICpuZXcqIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2guIEJpbmdvISBUaG9zZSBhcmUgZGVmaW5pdGVseSBwcmltZSBjYW5kaWRhdGVzIHRvIGluY2x1ZGUuIEkgd2lsbCBuZWVkIHRvIHByaW9yaXRpemUgdGhvc2UgdHdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTozOC40MTU3MTc0NThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTA5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19yZWxlYXNlX2luY29taW5nX3NvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9sbGNfY29ubi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvbGxjX2Nvbm4uYz03ODc9c3RhdGljIHZvaWQgbGxjX2luY29taW5nX3NvY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtODA2LVxcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4MDc6dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbGxjL2xsY19jb25uLmMtODA4LXtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz04MzM9dm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtODQ3LVxcdFxcdFxcdGlmIChpbmNvbWluZ19zdGF0ZSAhPSBMTENfSU5DT01JTkdfTk9ORSkge1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4NDg6XFx0XFx0XFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XFxubmV0L2xsYy9sbGNfY29ubi5jLTg0OS1cXHRcXHRcXHRcXHRpZiAoaW5jb21pbmdfc3RhdGUgPT0gTExDX0lOQ09NSU5HX1FVRVVFRClcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz04ODM9dm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtOTI4LVxcdFxcdFxcdCAgICAgc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSkge1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo5Mjk6XFx0XFx0XFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XFxubmV0L2xsYy9sbGNfY29ubi5jLTkzMC1cXHRcXHRcXHRnb3RvIGRyb3BfdW5sb2NrO1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTk3OC1cXHRcXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXFxubmV0L2xsYy9sbGNfY29ubi5jOjk3OTpcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG5uZXQvbGxjL2xsY19jb25uLmMtOTgwLVxcdFxcdH0gZWxzZSBpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxsY19zayhzayktXFx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy05ODEtXFx0XFx0XFx0ICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcXG5uZXQvbGxjL2xsY19jb25uLmM6OTgyOlxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2soc2spO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy05ODMtXFx0XFx0fVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTk5MC1cXHRcXHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXFxubmV0L2xsYy9sbGNfY29ubi5jOjk5MTpcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG5uZXQvbGxjL2xsY19jb25uLmMtOTkyLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtOTk2LVxcdFxcdFxcdGlmIChuZXdzaylcXG5uZXQvbGxjL2xsY19jb25uLmM6OTk3OlxcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy05OTgtXFx0XFx0XFx0Z290byBkcm9wX3VubG9jaztcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz0xMDQxPXN0YXRpYyBpbnQgbGxjX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDYxLVxcdFxcdFxcdCAgICBsbGNfc2sobmV3c2spLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSkge1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzoxMDYyOlxcdFxcdFxcdFxcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDYzLVxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy0xMDY5LVxcdFxcdFxcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcXG5uZXQvbGxjL2xsY19jb25uLmM6MTA3MDpcXHRcXHRcXHRcXHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcXG5uZXQvbGxjL2xsY19jb25uLmMtMTA3MS1cXHRcXHRcXHRiaF91bmxvY2tfc29jayhuZXdzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjMxOjM4LjQ2MzIzMjYxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzY3NzgwMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBhbmQgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCBhcmUgaW5kZWVkIHRoZSBuZXcsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50cm9kdWNlcy4gQW5kLCBJIHNlZSBgbGxjX2Nvbm5faGFuZGxlcmAgaXMgYWxzbyBub24tc3RhdGljOyB0aGVzZSBhcmUgYWxsIHByaW1lIGZvY3VzIHBvaW50cy4gVGhleSdyZSBjbGVhcmx5IGludGVuZGVkIHRvIGJlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGVpciBvcmlnaW5hbCBzY29wZSwgd2hpY2ggaXMgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLlxuXG5Ob3csIEkgbmVlZCB0byByZXZpc2l0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gVGhlIGNvcmUgY29uZmlnIG9wdGlvbiBpcyBgQ09ORklHX0xMQzJgLCB0aGF0J3MgY2xlYXIuIEJ1dCwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkPyBJJ2xsIHJlLWV4YW1pbmUgYG5ldC9sbGMvS2NvbmZpZ2AgdGhvcm91Z2hseSB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgYW5kIGhvdyB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA2NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo0NC4yMzEwMTQ5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1MzkxODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2xsYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo0NC4yNzQ1NjIwMjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODMyODk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYENPTkZJR19MTEMyYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgQ09ORklHX0xMQzJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcywgbW9kdWxlcywgb3IgY29uZmlndXJhdGlvbnMgcmVseSBvbiB0aGlzLiBJdCdzIGNydWNpYWwgdG8gZ3Jhc3AgdGhlIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBiZWZvcmUgbWFraW5nIGFueSBjaGFuZ2VzIG9yIGNvbnNpZGVyaW5nIGl0cyByZW1vdmFsLiBUaGlzIGludm9sdmVzIGRpZ2dpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgY3Jvc3MtcmVmZXJlbmNpbmcgd2l0aCBvdGhlciByZWxldmFudCBLY29uZmlncywgYW5kIHBvc3NpYmx5IGV2ZW4gZ2xhbmNpbmcgYXQgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIGZpbGVzIHRoYXQgbWlnaHQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB1c2UgdGhpcyBvcHRpb24uIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLCBhbnkgZGVmYXVsdCB2YWx1ZXMgaXQgaW5mbHVlbmNlcywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLiBBIGhvbGlzdGljIHZpZXcgaXMga2V5IOKAkyBJIG5lZWQgdG8gZW5zdXJlIG5vdGhpbmcgYnJlYWtzIGlmIEkgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcgYWJvdXQgYENPTkZJR19MTEMyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo0OC42NDI4OTMzNjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjY5MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMTEMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sbGMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbGxjL0tjb25maWc9Mj1jb25maWcgTExDXFxuLS1cXG5uZXQvbGxjL0tjb25maWctNC1cXG5uZXQvbGxjL0tjb25maWc6NTpjb25maWcgTExDMlxcbm5ldC9sbGMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo0OC42ODc1NjU4NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MDY0NDE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtjb25maWcgb2YgbmV0L2xsYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBcIm5ldC9sbGMvS2NvbmZpZ1wiLi4uICp0aGF0KiBzdWdnZXN0cyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBzdWJsYXllciB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIG1hcCBvdXQgdGhlIHBvdGVudGlhbCBhcmVhcyB3ZSdsbCBiZSBkZWFsaW5nIHdpdGguIFdlJ3JlIGxpa2VseSB0byBzZWUgc2V0dGluZ3MgcmVsYXRlZCB0bzpcblxuKiAgICoqTExDIHByb3RvY29sIHN1cHBvcnQ6KiogQXJlIHdlIGNvbmZpZ3VyaW5nIHNwZWNpZmljIExMQyBwcm90b2NvbHMgKGUuZy4sIElFRUUgODAyLjIgVHlwZSAxLCBUeXBlIDIsIG9yIG1heWJlIGV2ZW4gcHJvcHJpZXRhcnkgb25lcyk/IEFyZSB0aGVyZSBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgZGlmZmVyZW50IExMQyBpbXBsZW1lbnRhdGlvbnM/XG4qICAgKipFbmNhcHN1bGF0aW9uL0ZyYW1pbmc6KiogVGhlcmUncyBhIGhpZ2ggcHJvYmFiaWxpdHkgd2UnbGwgc2VlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gaG93IExMQyBmcmFtZXMgYXJlIGVuY2Fwc3VsYXRlZCB3aXRoaW4gb3RoZXIgbmV0d29yayBwcm90b2NvbHMuIFRoaW5rIGFib3V0IFNOQVAgKFN1Yi1OZXR3b3JrIEFjY2VzcyBQcm90b2NvbCksIExMQy9TTkFQIGJyaWRnaW5nLCBtYXliZSBldmVuIHNvbWUgb2JzY3VyZSB0dW5uZWxpbmcgbWV0aG9kcy5cbiogICAqKkhhcmR3YXJlIERlcGVuZGVuY2llczoqKiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHdlIG1pZ2h0IGZpbmQgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXJzIChOSUNzKSBvciBoYXJkd2FyZS5cbiogICAqKlBlcmZvcm1hbmNlIFR1bmluZzoqKiBMTEMgaXMgYSBsYXllciB3aXRoIHRoZSBwb3RlbnRpYWwgdG8gYmUgYSBib3R0bGVuZWNrLCBzbyBpdCdzIHZlcnkgbGlrZWx5IHRoZXJlJ2xsIGJlIHNldHRpbmdzIGZvciBvcHRpbWl6aW5nIGJ1ZmZlcmluZywgd2luZG93aW5nLCBhbmQgbWF5YmUgZXZlbiBpbnRlcnJ1cHQgaGFuZGxpbmcgcmVsYXRlZCB0byBMTEMgdHJhZmZpYy5cbiogICAqKkRlYnVnZ2luZy9UcmFjaW5nOioqIEEgY3J1Y2lhbCBwYXJ0IG9mIGFueSB3ZWxsLWRlc2lnbmVkIEtjb25maWcgZmlsZSBpcyB0aGUgaW5jbHVzaW9uIG9mIG9wdGlvbnMgdG8gZW5hYmxlIGRlYnVnZ2luZyBhbmQgdHJhY2luZy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYERFQlVHX0xMQ2Agb3IgYFRSQUNFX0xMQ2AgZmxhZ3MgdG8gaGVscCB0cm91Ymxlc2hvb3QgYW55IExMQy1yZWxhdGVkIGlzc3VlcyB0aGF0IG1pZ2h0IGNvbWUgdXAuXG5cbk15IGdvYWwgaW4gcmVhZGluZyB0aGlzIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBzZWUgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBib29sYCwgYHRyaXN0YXRlYCwgYGludGAsIGFuZCBgc3RyaW5nYCBvcHRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiBlYWNoIHNldHRpbmcuIEknbGwgYWxzbyBjaGVjayBvdXQgYW55IGhlbHAgdGV4dCwgdGhpcyBnaXZlcyBtZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIGFzIHRvIHdoYXQgaXMgYXZhaWxhYmxlIGFuZCB3aHkuIFRoaXMgY291bGQgaW5mbHVlbmNlIG91ciBvdmVyYWxsIG5ldHdvcmsgY29uZmlndXJhdGlvbnMgYW5kIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzE6NTMuNzY4MjExODU5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9sbGMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIExMQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIExMQzJcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJBTlNJL0lFRUUgODAyLjIgTExDIHR5cGUgMiBTdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0c2VsZWN0IExMQ1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGlzIGEgTG9naWNhbCBMaW5rIExheWVyIHR5cGUgMiwgY29ubmVjdGlvbiBvcmllbnRlZCBzdXBwb3J0LlxcbiAgMTA6XFx0XFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQgZm9yIFBGX0xMQyBzb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMTo1My43NjgyNTg0NjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAwMjUyOTkyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTExDMiBDb25maWd1cmF0aW9uIFN1bW1hcnkqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBMTEMyYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGVuYWJsZSBmb3IgdGhpcy4gTGV0IG1lIHNvbGlkaWZ5IG15IHJlYXNvbmluZyBoZXJlLCBhcyBJJ20gZ29pbmcgdG8gc2V0IHRoaXMgdXAgZm9yIGZ1enppbmcuXG5cbkZpcnN0LCB0aGUgY29yZSBpZGVhOiB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIGJ5IGludHJvZHVjaW5nIGEgbmV3IHN0YXRlIG1hY2hpbmUgYW5kIHdvcmtxdWV1ZS4gVGhpcyBpcyByaWdodCBpbiB0aGUgY29yZSBvZiB0aGUgTExDIG5ldHdvcmtpbmcgY29kZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhvc2UgUEZfTExDIHNvY2tldHMgYW5kIG9idmlvdXNseSBuZXR3b3JrIHRyYWZmaWMuIFNvLCB3b3J0aCBmdXp6aW5nLCB0aGF0J3MgY2xlYXIuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdXNlIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlbmAsIGFuZCBgbGxjX2Nvbm5faGFuZGxlcmAgYXMgdGhlIGBGb2N1c1N5bWJvbHNgLiBMZXQncyBjb25maXJtIGBsbGNfY29ubl9oYW5kbGVyYCBtYWtlcyBzZW5zZTogSXQncyB0aGUgcHJpbWFyeSBoYW5kbGVyIGZvciAqaW5jb21pbmcqIHBhY2tldHMgb24gTExDIGNvbm5lY3Rpb25zLCBzbyBzcG90IG9uLiBJIGFsc28gY29uc2lkZXJlZCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AsIGFzIGl0J3MgYmVlbiBtb2RpZmllZCwgYW5kIGltcG9ydGFudGx5LCBpdCdzIG5vbi1zdGF0aWMuXG5cbkFjdHVhbGx5LCBsZXQncyByZXZpc2l0IGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYC4gSXQncyBub3QgKmV4cG9ydGVkKiBhcyBJIGluaXRpYWxseSB0aG91Z2h0LCBidXQgaXQncyBub3Qgc3RhdGljIGVpdGhlciwgYW5kIHRoYXQgbWFrZXMgaXQgcGVyZmVjdGx5IHZhbGlkIGFzIGEgZm9jdXMgc3ltYm9sLlxuXG5Ob3csIGFib3V0IGBsbGNfY29ubl9zdGF0ZV9wcm9jZXNzYC4gSXQncyBiZWVuIHRvdWNoZWQsIGJ1dCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbWluaW1hbC4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBhcHBlYXJzIHRvIHJlc2lkZSBpbiBgbGxjX2Nvbm5faGFuZGxlcmAsIGBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrYCwgYGxsY19hY2NlcHRfaW5jb21pbmdfc29ja2AsIGFuZCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLlxuXG5TcGVjaWZpY2FsbHksIGBsbGNfY29ubl9oYW5kbGVyYCBoYXMgYSBzdWJzdGFudGlhbCBudW1iZXIgb2YgY2hhbmdlcywgYW5kIHRoZXNlIHN5bWJvbHMsIGNvbWJpbmVkLCBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcGF0Y2guXG5cbkkgYWxzbyBjb25zaWRlcmVkIGFkZGluZyB0aGUgc3lzY2FsbCBoYW5kbGVycyBgbGxjX3VpX2FjY2VwdGAgYW5kIGBsbGNfdWlfcmVsZWFzZWAuIEFsdGhvdWdoIHRoZXkgYXJlIHN0YXRpYywgdGhleSBhcmUgdGhlIG1haW4gc3lzY2FsbCBoYW5kbGVycyBtb2RpZmllZCwgYW5kIEkgY291bGQgYWRkIHRoZW0ganVzdCBpbiBjYXNlLiBCdXQgdG8gYmUgc2FmZSwgSSdsbCBzdGljayB0byBgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja2AsIGBsbGNfYWNjZXB0X2luY29taW5nX3NvY2tgLCBgbGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5gLCBhbmQgYGxsY19jb25uX2hhbmRsZXJgLlxuXG5GaW5hbGx5LCBhbnkgb3RoZXIgY29uZmlncz8gYENPTkZJR19ORVRgIGlzIG9idmlvdXNseSBhIHByZXJlcXVpc2l0ZSwgYnV0IHRoYXQncyBhIGdpdmVuLiBPa2F5LCBJJ20gY29uZmlkZW50IGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM3OSwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzoxMy43OTM1NjAyMTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTU1OTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTExDMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxsY19yZWxlYXNlX2luY29taW5nX3NvY2tcIixcbiAgICBcImxsY19hY2NlcHRfaW5jb21pbmdfc29ja1wiLFxuICAgIFwibGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW5cIixcbiAgICBcImxsY19jb25uX2hhbmRsZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXRlIG1hY2hpbmUgYW5kIHdvcmtxdWV1ZSBmb3IgaGFuZGxpbmcgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHRvIGZpeCByYWNlIGNvbmRpdGlvbnMgYW5kIGxpZmVjeWNsZSBpc3N1ZXMuIFRoZXNlIGNoYW5nZXMgYXJlIGluIHRoZSBjb3JlIExMQyBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgUEZfTExDIHNvY2tldHMgYW5kIG5ldHdvcmsgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMTEMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGxjX3JlbGVhc2VfaW5jb21pbmdfc29ja1wiLFxuICAgIFwibGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrXCIsXG4gICAgXCJsbGNfcmVsZWFzZV9pbmNvbWluZ19jaGlsZHJlblwiLFxuICAgIFwibGxjX2Nvbm5faGFuZGxlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgbWFjaGluZSBhbmQgd29ya3F1ZXVlIGZvciBoYW5kbGluZyBpbmNvbWluZyBMTEMgY29ubmVjdGlvbnMgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBhbmQgbGlmZWN5Y2xlIGlzc3Vlcy4gVGhlc2UgY2hhbmdlcyBhcmUgaW4gdGhlIGNvcmUgTExDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBQRl9MTEMgc29ja2V0cyBhbmQgbmV0d29yayB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzoxMy44NzUxMjU4MTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzU0NDE2MDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjMzOjEzLjg3NTYyODI5MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTc1NDM2NTQ0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBpbiB0aGUgTExDIHByb3RvY29sIGJ5IGludHJvZHVjaW5nIHN0YXRlIHRyYWNraW5nIChgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBgaW5jb21pbmdfd29ya2ApIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhpcyBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGlzdGVuZXIgc29ja2V0IHRlYXJkb3duLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBzdHJ1Y3QgZmllbGRzIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIHNvY2tldCBjcmVhdGlvbi4gVGhlIHBhdGNoIGFsc28gYWRkcyBhIGZ1bmN0aW9uIHRvIHNlbmQgYSBETSByZXNwb25zZSAoYGxsY19jb25uX3NlbmRfZG1fcnNwYCksIHdoaWNoIGFsbG9jYXRlcyBhIG5ldyBza2IgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGl0cyBieXRlcyAoTExDIGhlYWRlciBhbmQgTUFDIGhlYWRlcikgYmVmb3JlIHRyYW5zbWlzc2lvbiwgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbGVha2VkIHRvIHRoZSBuZXR3b3JrLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTAzMjlkNTNhY2M3MDU2YmU2MzQwN2ZkY2UyYjg0ZWZmNDc2MTNjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA5OjEzOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaCBiL2luY2x1ZGUvbmV0L2xsY19jb25uLmhcbmluZGV4IGUxYTMwMjY5NjcyMzQuLmU4MDAzZGIxMTBhZDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG4rKysgYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oXG5AQCAtNiw2ICs2LDcgQEBcbiAgKiBcdFx0IDIwMDEsIDIwMDIgYnkgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIFx1MDAzY2FjbWVAY29uZWN0aXZhLmNvbS5iclx1MDAzZVxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfaWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGMuaFx1MDAzZVxuQEAgLTEzLDYgKzE0LDEwIEBAXG4gI2RlZmluZSBMTENfRVZFTlQgICAgICAgICAgICAgICAgMVxuICNkZWZpbmUgTExDX1BBQ0tFVCAgICAgICAgICAgICAgIDJcbiBcbisjZGVmaW5lIExMQ19JTkNPTUlOR19OT05FICAgICAgICAwXG4rI2RlZmluZSBMTENfSU5DT01JTkdfUEVORElORyAgICAgMVxuKyNkZWZpbmUgTExDX0lOQ09NSU5HX1FVRVVFRCAgICAgIDJcbitcbiAjZGVmaW5lIExMQzJfUF9USU1FICAgICAgICAgICAgICAgMlxuICNkZWZpbmUgTExDMl9BQ0tfVElNRSAgICAgICAgICAgICAxXG4gI2RlZmluZSBMTEMyX1JFSl9USU1FICAgICAgICAgICAgIDNcbkBAIC03Miw2ICs3Nyw5IEBAIHN0cnVjdCBsbGNfc29jayB7XG4gXHRcdFx0XHRcdCAgICAgIHJlY2VpdmVkIGFuZCBjYXVzZWQgc2VuZGluZyBGUk1SLlxuIFx0XHRcdFx0XHQgICAgICBVc2VkIGZvciByZXNlbmRpbmcgRlJNUiAqL1xuIFx0dTMyXHRcdCAgICBjbXNnX2ZsYWdzO1xuK1x0YXRvbWljX3RcdCAgICBpbmNvbWluZ19zdGF0ZTtcbitcdHN0cnVjdCBzb2NrXHQgICAgKmluY29taW5nX2xpc3RlbmVyO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IGluY29taW5nX3dvcms7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7XG4gfTtcbiBcbkBAIC05Myw3ICsxMDEsMTAgQEAgc3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXG4gc3RydWN0IHNvY2sgKmxsY19za19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5LFxuIFx0XHRcdCAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2Vybik7XG4gdm9pZCBsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKTtcbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzayk7XG4rdm9pZCBsbGNfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYyk7XG4rdm9pZCBsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4rYm9vbCBsbGNfYWNjZXB0X2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzayk7XG4gXG4gdm9pZCBsbGNfc2tfcmVzZXQoc3RydWN0IHNvY2sgKnNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuY1xuaW5kZXggYjA0NDdjMzNkYmYwOS4uZTgwNTQ4MDljZjBjZiAxMDA2NDRcbi0tLSBhL25ldC9sbGMvYWZfbGxjLmNcbisrKyBiL25ldC9sbGMvYWZfbGxjLmNcbkBAIC0yNyw2ICsyNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2xsY19zYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9sbGNfcGR1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbGxjX2Nvbm4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9sbGNfY19zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFx1MDAzZVxuIFxuIC8qIHJlbWVtYmVyOiB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIGlzIHplcm9lZCBiZWNhdXNlIGl0cyBpbiAuYnNzICovXG5AQCAtMTk2LDYgKzE5Nyw3IEBAIHN0YXRpYyBpbnQgbGxjX3VpX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIFx0c3RydWN0IGxsY19zb2NrICpsbGM7XG4rXHRib29sIGxpc3RlbmVyO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrID09IE5VTEwpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0yMDYsNiArMjA4LDkgQEAgc3RhdGljIGludCBsbGNfdWlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0XHRsbGMtXHUwMDNlbGFkZHIubHNhcCwgbGxjLVx1MDAzZWRhZGRyLmxzYXApO1xuIFx0aWYgKCFsbGNfc2VuZF9kaXNjKHNrKSlcbiBcdFx0bGxjX3VpX3dhaXRfZm9yX2Rpc2Moc2ssIFJFQURfT05DRShzay1cdTAwM2Vza19yY3Z0aW1lbykpO1xuK1x0bGlzdGVuZXIgPSBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOO1xuK1x0aWYgKGxpc3RlbmVyKVxuK1x0XHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuIFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkge1xuIFx0XHRzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gbGxjLVx1MDAzZXNhcDtcbiBcbkBAIC0yMTQsMTYgKzIxOSwxOCBAQCBzdGF0aWMgaW50IGxsY191aV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHRcdCAqL1xuIFx0XHRsbGNfc2FwX2hvbGQoc2FwKTtcbiBcdFx0bGxjX3NhcF9yZW1vdmVfc29ja2V0KGxsYy1cdTAwM2VzYXAsIHNrKTtcbitcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRsbGNfc2FwX3B1dChzYXApO1xuIFx0fSBlbHNlIHtcbitcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfY2hpbGRyZW4oc2spO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0fVxuIFx0bmV0ZGV2X3B1dChsbGMtXHUwMDNlZGV2LCBcdTAwMjZsbGMtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFx0c29ja19wdXQoc2spO1xuIFx0c29ja19vcnBoYW4oc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRsbGNfc2tfZnJlZShzayk7XG4rXHRsbGNfc2tfZnJlZShzaywgdHJ1ZSk7XG4gb3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcyMiw2ICs3MjksMTcgQEAgc3RhdGljIGludCBsbGNfdWlfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdGdvdG8gZnJlZXM7XG4gXHRyYyA9IDA7XG4gXHRuZXdzayA9IHNrYi1cdTAwM2VzaztcbitcdGxvY2tfc29ja19uZXN0ZWQobmV3c2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcdGlmIChsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0gfHxcbitcdCAgICAhbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKG5ld3NrKSkge1xuK1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19OT05FKVxuK1x0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRyZWxlYXNlX3NvY2sobmV3c2spO1xuK1x0XHRzb2NrX3B1dChuZXdzayk7XG4rXHRcdHJjID0gLUVDT05OQUJPUlRFRDtcbitcdFx0Z290byBmcmVlcztcbitcdH1cbiBcdC8qIGF0dGFjaCBjb25uZWN0aW9uIHRvIGEgbmV3IHNvY2tldC4gKi9cbiBcdGxsY191aV9za19pbml0KG5ld3NvY2ssIG5ld3NrKTtcbiBcdHNvY2tfcmVzZXRfZmxhZyhuZXdzaywgU09DS19aQVBQRUQpO1xuQEAgLTczNyw2ICs3NTUsOCBAQCBzdGF0aWMgaW50IGxsY191aV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdHNrX2FjY2VwdHFfcmVtb3ZlZChzayk7XG4gXHRkcHJpbnRrKFwiJXM6IG9rIHN1Y2Nlc3Mgb24gJTAyWCwgY2xpZW50IG9uICUwMlhcXG5cIiwgX19mdW5jX18sXG4gXHRcdGxsY19zayhzayktXHUwMDNlYWRkci5zbGxjX3NhcCwgbmV3bGxjLVx1MDAzZWRhZGRyLmxzYXApO1xuK1x0cmVsZWFzZV9zb2NrKG5ld3NrKTtcbitcdHNvY2tfcHV0KG5ld3NrKTtcbiBmcmVlczpcbiBcdGtmcmVlX3NrYihza2IpO1xuIG91dDpcbmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmNcbmluZGV4IDI2MDQ2MGQ1MGY1NGMuLjRhMzRmMjQwYWQyY2MgMTAwNjQ0XG4tLS0gYS9uZXQvbGxjL2xsY19jb25uLmNcbisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uY1xuQEAgLTMyLDYgKzMyLDcgQEAgc3RhdGljIGludCBsbGNfZXhlY19jb25uX3RyYW5zX2FjdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpldik7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyAqbGxjX3F1YWxpZnlfY29ubl9ldihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgdm9pZCBsbGNfaW5jb21pbmdfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gXG4gLyogT2Zmc2V0IHRhYmxlIG9uIGNvbm5lY3Rpb24gc3RhdGVzIHRyYW5zaXRpb24gZGlhZ3JhbSAqL1xuIHN0YXRpYyBpbnQgbGxjX29mZnNldF90YWJsZVtOQlJfQ09OTl9TVEFURVNdW05CUl9DT05OX0VWXTtcbkBAIC04OCw2ICs4OSwxMyBAQCBpbnQgbGxjX2Nvbm5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIHNrYi1cdTAwM2VzayBwb2ludGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBzdHJ1Y3Qgc29jayBpblxuIFx0XHQgKiBsbGNfY29ubl9oYW5kbGVyLiAtYWNtZVxuIFx0XHQgKi9cbitcdFx0aWYgKHNrICE9IHNrYi1cdTAwM2VzayBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRzb2NrX2hvbGQoc2tiLVx1MDAzZXNrKTtcbitcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZWluY29taW5nX3N0YXRlLFxuK1x0XHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCk7XG4rXHRcdH1cbiBcdFx0c2tiX2dldChza2IpO1xuIFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpO1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuQEAgLTM1NCw3ICszNjIsOCBAQCBzdGF0aWMgaW50IGxsY19jb25uX3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuIFx0aW50IHJjID0gMTtcbiBcbi1cdGlmIChsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIE5CUl9DT05OX1NUQVRFUylcbitcdGlmIChsbGMtXHUwMDNlc3RhdGUgXHUwMDNjIExMQ19DT05OX1NUQVRFX0FETSB8fFxuK1x0ICAgIGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgTkJSX0NPTk5fU1RBVEVTKVxuIFx0XHRnb3RvIG91dDtcbiBcdHJjID0gMDtcbiBcdHRyYW5zID0gbGxjX3F1YWxpZnlfY29ubl9ldihzaywgc2tiKTtcbkBAIC03NjUsMjcgKzc3NCwxNjIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfY3JlYXRlX2luY29taW5nX3NvY2soc3RydWN0IHNvY2sgKnNrLFxuIFx0bWVtY3B5KFx1MDAyNm5ld2xsYy1cdTAwM2VsYWRkciwgZGFkZHIsIHNpemVvZihuZXdsbGMtXHUwMDNlbGFkZHIpKTtcbiBcdG1lbWNweShcdTAwMjZuZXdsbGMtXHUwMDNlZGFkZHIsIHNhZGRyLCBzaXplb2YobmV3bGxjLVx1MDAzZWRhZGRyKSk7XG4gXHRuZXdsbGMtXHUwMDNlZGV2ID0gZGV2O1xuK1x0bmV3bGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyID0gc2s7XG4rXHRhdG9taWNfc2V0KFx1MDAyNm5ld2xsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX1BFTkRJTkcpO1xuK1x0SU5JVF9XT1JLKFx1MDAyNm5ld2xsYy1cdTAwM2VpbmNvbWluZ193b3JrLCBsbGNfaW5jb21pbmdfc29ja193b3JrKTtcbitcdHNvY2tfaG9sZChzayk7XG4gXHRkZXZfaG9sZChkZXYpO1xuIFx0bGxjX3NhcF9hZGRfc29ja2V0KGxsYy1cdTAwM2VzYXAsIG5ld3NrKTtcbiBvdXQ6XG4gXHRyZXR1cm4gbmV3c2s7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGxsY19pbmNvbWluZ19zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsbGNfc29jayxcbitcdFx0XHRcdFx0XHQgICAgaW5jb21pbmdfd29yayk7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZsbGMtXHUwMDNlc2s7XG4rXHRzdHJ1Y3Qgc29jayAqbGlzdGVuZXIgPSBsbGMtXHUwMDNlaW5jb21pbmdfbGlzdGVuZXI7XG4rXG4rXHRsb2NrX3NvY2sobGlzdGVuZXIpO1xuK1x0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0bGxjX3NrX2ZyZWUoc2ssIGZhbHNlKTtcbitcdHNvY2tfb3JwaGFuKHNrKTtcbitcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcbitcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4rXHRkZXZfcHV0KGxsYy1cdTAwM2VkZXYpO1xuK1x0bGxjLVx1MDAzZWRldiA9IE5VTEw7XG4rXHRzb2NrX3B1dChzayk7XG4rXHRzb2NrX3B1dChsaXN0ZW5lcik7XG4rfVxuK1xuK3ZvaWQgbGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xuK1xuK1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNmxsYy1cdTAwM2VpbmNvbWluZ19zdGF0ZSwgTExDX0lOQ09NSU5HX05PTkUpID09XG4rXHQgICAgTExDX0lOQ09NSU5HX05PTkUpXG4rXHRcdHJldHVybjtcbitcbitcdFdSSVRFX09OQ0UobGxjLVx1MDAzZXN0YXRlLCBMTENfQ09OTl9PVVRfT0ZfU1ZDKTtcbitcdHNvY2tfaG9sZChzayk7XG4rXHRsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLVx1MDAzZXNhcCwgc2spO1xuK1x0c2NoZWR1bGVfd29yayhcdTAwMjZsbGMtXHUwMDNlaW5jb21pbmdfd29yayk7XG4rfVxuK1xuK2Jvb2wgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XG4rXG4rXHRpZiAoYXRvbWljX2NtcHhjaGcoXHUwMDI2bGxjLVx1MDAzZWluY29taW5nX3N0YXRlLCBMTENfSU5DT01JTkdfUVVFVUVELFxuK1x0XHRcdFx0ICBMTENfSU5DT01JTkdfTk9ORSkgIT0gTExDX0lOQ09NSU5HX1FVRVVFRClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c29ja19wdXQobGxjLVx1MDAzZWluY29taW5nX2xpc3RlbmVyKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbit2b2lkIGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkpIHtcbitcdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gc2tiLVx1MDAzZXNrO1xuK1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2IG5ld3NrICE9IHNrKSB7XG4rXHRcdFx0aW50IGluY29taW5nX3N0YXRlO1xuK1xuK1x0XHRcdGJoX2xvY2tfc29ja19uZXN0ZWQobmV3c2spO1xuK1x0XHRcdGluY29taW5nX3N0YXRlID1cbitcdFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpO1xuK1x0XHRcdGlmIChpbmNvbWluZ19zdGF0ZSAhPSBMTENfSU5DT01JTkdfTk9ORSkge1xuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0XHRpZiAoaW5jb21pbmdfc3RhdGUgPT0gTExDX0lOQ09NSU5HX1FVRVVFRClcbitcdFx0XHRcdFx0c29ja19wdXQobmV3c2spO1xuK1x0XHRcdH1cbitcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdH1cbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHR9XG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbit9XG4rXG4rLypcbisgKiBUaGlzIG1pcnJvcnMgdGhlIEFETS1zdGF0ZSBETSBhY3Rpb25zLCBidXQgYSBsaXN0ZW5lciBoYXMgbm8gcGVlclxuKyAqIGFkZHJlc3MgaW4gbGxjLVx1MDAzZWRhZGRyIHlldC5cbisgKi9cbitzdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0IHN0cnVjdCBsbGNfYWRkciAqc2FkZHIsIHU4IGZfYml0KVxuK3tcbitcdHN0cnVjdCBza19idWZmICpuc2tiO1xuK1x0aW50IHJjO1xuK1xuK1x0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XG4rXHRpZiAoIW5za2IpXG4rXHRcdHJldHVybjtcbitcbitcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cdTAwM2VsYWRkci5sc2FwLFxuK1x0XHRcdCAgICBzYWRkci1cdTAwM2Vsc2FwLCBMTENfUERVX1JTUCk7XG4rXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcbitcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCBzYWRkci1cdTAwM2VtYWMpO1xuK1x0aWYgKHVubGlrZWx5KHJjKSlcbitcdFx0a2ZyZWVfc2tiKG5za2IpO1xuK1x0ZWxzZVxuK1x0XHRkZXZfcXVldWVfeG1pdChuc2tiKTtcbit9XG4rXG4gdm9pZCBsbGNfY29ubl9oYW5kbGVyKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGxsY19hZGRyIHNhZGRyLCBkYWRkcjtcbi1cdHN0cnVjdCBzb2NrICpzaztcbitcdHN0cnVjdCBzb2NrICpzaywgKm5ld3NrID0gTlVMTDtcbitcdGJvb2wgbmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuK1x0Ym9vbCBuZXdza19sb2NrZWQgPSBmYWxzZTtcbiBcbiBcdGxsY19wZHVfZGVjb2RlX3NhKHNrYiwgc2FkZHIubWFjKTtcbiBcdGxsY19wZHVfZGVjb2RlX3NzYXAoc2tiLCBcdTAwMjZzYWRkci5sc2FwKTtcbiBcdGxsY19wZHVfZGVjb2RlX2RhKHNrYiwgZGFkZHIubWFjKTtcbiBcdGxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCBcdTAwMjZkYWRkci5sc2FwKTtcbiBcbitsb29rdXA6XG4gXHRzayA9IF9fbGxjX2xvb2t1cChzYXAsIFx1MDAyNnNhZGRyLCBcdTAwMjZkYWRkciwgZGV2X25ldChza2ItXHUwMDNlZGV2KSk7XG4gXHRpZiAoIXNrKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKHNrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgPT1cbitcdCAgICBMTENfSU5DT01JTkdfUEVORElORykge1xuK1x0XHRuZXdzayA9IHNrO1xuK1x0XHRiaF9sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bGxjX3NrKG5ld3NrKS1cdTAwM2VpbmNvbWluZ19zdGF0ZSkgIT1cbitcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdHNvY2tfcHV0KG5ld3NrKTtcbitcdFx0XHRuZXdzayA9IE5VTEw7XG4rXHRcdFx0Z290byBsb29rdXA7XG4rXHRcdH1cbitcdFx0c2sgPSBsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX2xpc3RlbmVyO1xuK1x0XHRzb2NrX2hvbGQoc2spO1xuK1x0XHRuZXdza19sb29rdXBfcmVmID0gdHJ1ZTtcbitcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0fVxuK1xuIFx0YmhfbG9ja19zb2NrKHNrKTtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpXG4rXHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRpZiAobmV3c2tfbG9va3VwX3JlZikge1xuK1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRnb3RvIHJldHJ5X3VubG9jaztcbitcdFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gfHxcbitcdFx0XHQgICAgIHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkpIHtcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKG5ld3NrKTtcbitcdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHR9XG4rXHR9XG4gXHQvKlxuIFx0ICogVGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgYXQgdGhlIHVwcGVyIGxheWVyIC1cdTAwM2VhY2NlcHRcbiBcdCAqIG1ldGhvZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhlIFBST0NPTSBzdGF0ZSBtYWNoaW5lIHdvcmtzOlxuQEAgLTc5NSwxMCArOTM5LDI1IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0ICogaW4gdGhlIG5ld2x5IGNyZWF0ZWQgc3RydWN0IHNvY2sgcHJpdmF0ZSBhcmVhLiAtYWNtZVxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikpIHtcbi1cdFx0c3RydWN0IHNvY2sgKm5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2c2FkZHIsIFx1MDAyNmRhZGRyKTtcbi1cdFx0aWYgKCFuZXdzaylcbi1cdFx0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0XHRpZiAoIW5ld3NrKSB7XG4rXHRcdFx0aWYgKGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94KHNrLCBza2IpKSB7XG4rXHRcdFx0XHRpZiAoIWxsY19jb25uX2V2X3J4X2Rpc2NfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHtcbitcdFx0XHRcdFx0dTggZl9iaXQ7XG4rXG4rXHRcdFx0XHRcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFx1MDAyNmZfYml0KTtcbitcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCBmX2JpdCk7XG4rXHRcdFx0XHR9IGVsc2UgaWYgKCFsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0XzEoc2ssIHNrYikpIHtcbitcdFx0XHRcdFx0bGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc2FwLCBza2IsIFx1MDAyNnNhZGRyLCAxKTtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdFx0fVxuK1x0XHRcdG5ld3NrID0gbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHNrLCBza2ItXHUwMDNlZGV2LCBcdTAwMjZzYWRkcixcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZkYWRkcik7XG4rXHRcdFx0aWYgKCFuZXdzaylcbitcdFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0bmV3c2tfbG9ja2VkID0gdHJ1ZTtcbitcdFx0fVxuIFx0XHRza2Jfc2V0X293bmVyX3Ioc2tiLCBuZXdzayk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuQEAgLTgxMywxOCArOTcyLDQ5IEBAIHZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlc2sgPSBzaztcbiBcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX2VmcmVlO1xuIFx0fVxuLVx0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKVxuK1x0aWYgKHVubGlrZWx5KGxsY19zayhza2ItXHUwMDNlc2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pKSB7XG4rXHRcdGlmIChuZXdzaykge1xuK1x0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHRcdCAgICBMTENfSU5DT01JTkdfUEVORElORylcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHR9IGVsc2UgaWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRsbGNfcmVsZWFzZV9pbmNvbWluZ19zb2NrKHNrKTtcbitcdFx0fVxuK1x0XHRnb3RvIGRyb3BfdW5sb2NrO1xuK1x0fVxuK1x0aWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7XG4gXHRcdGxsY19jb25uX3Jjdihzaywgc2tiKTtcbi1cdGVsc2Uge1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpXG4rXHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHR9IGVsc2Uge1xuIFx0XHRkcHJpbnRrKFwiJXM6IGFkZGluZyB0byBiYWNrbG9nLi4uXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0bGxjX3NldF9iYWNrbG9nX3R5cGUoc2tiLCBMTENfUEFDS0VUKTtcbi1cdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSlcbitcdFx0aWYgKHNrX2FkZF9iYWNrbG9nKHNrLCBza2IsIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSkge1xuK1x0XHRcdGlmIChuZXdzaylcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuIFx0XHRcdGdvdG8gZHJvcF91bmxvY2s7XG4rXHRcdH1cbiBcdH1cbiBvdXQ6XG4rXHRpZiAobmV3c2tfbG9ja2VkKVxuK1x0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4gXHRiaF91bmxvY2tfc29jayhzayk7XG4gXHRzb2NrX3B1dChzayk7XG4rXHRpZiAobmV3c2tfbG9va3VwX3JlZilcbitcdFx0c29ja19wdXQobmV3c2spO1xuIFx0cmV0dXJuO1xuK3JldHJ5X3VubG9jazpcbitcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdG5ld3NrX2xvY2tlZCA9IGZhbHNlO1xuK1x0YmhfdW5sb2NrX3NvY2soc2spO1xuK1x0c29ja19wdXQoc2spO1xuK1x0c29ja19wdXQobmV3c2spO1xuK1x0bmV3c2sgPSBOVUxMO1xuK1x0bmV3c2tfbG9va3VwX3JlZiA9IGZhbHNlO1xuK1x0Z290byBsb29rdXA7XG4gZHJvcDpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuO1xuQEAgLTg1MiwxMiArMTA0Miw1MiBAQCBzdGF0aWMgaW50IGxsY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aW50IHJjID0gMDtcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbitcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrYi1cdTAwM2VzaztcbiBcbiBcdGlmIChsaWtlbHkobGxjX2JhY2tsb2dfdHlwZShza2IpID09IExMQ19QQUNLRVQpKSB7XG4tXHRcdGlmIChsaWtlbHkobGxjLVx1MDAzZXN0YXRlIFx1MDAzZSAxKSkgLyogbm90IGNsb3NlZCAqL1xuK1x0XHRpZiAobmV3c2sgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0XHQgICAgTExDX0lOQ09NSU5HX1BFTkRJTkcpIHtcbitcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdFx0YmhfbG9ja19zb2NrX25lc3RlZChuZXdzayk7XG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpICE9XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKSB7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdFx0fVxuK1x0XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHxcbitcdFx0XHQgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiB8fFxuK1x0XHRcdCAgICBsbGNfc2sobmV3c2spLVx1MDAzZXN0YXRlIFx1MDAzYyBMTENfQ09OTl9TVEFURV9BRE0pIHtcbitcdFx0XHRcdGxsY19yZWxlYXNlX2luY29taW5nX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXHRcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdFx0fVxuIFx0XHRcdHJjID0gbGxjX2Nvbm5fcmN2KHNrLCBza2IpO1xuLVx0XHRlbHNlXG4rXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgIExMQ19JTkNPTUlOR19QRU5ESU5HKVxuK1x0XHRcdFx0bGxjX3JlbGVhc2VfaW5jb21pbmdfc29jayhuZXdzayk7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHR9IGVsc2UgaWYgKG5ld3NrIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgIGF0b21pY19yZWFkKFx1MDAyNmxsY19zayhuZXdzayktXHUwMDNlaW5jb21pbmdfc3RhdGUpID09XG4rXHRcdFx0ICAgTExDX0lOQ09NSU5HX1FVRVVFRCkge1xuK1x0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdFx0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0XHRpZiAobGxjX3NrKG5ld3NrKS1cdTAwM2VzdGF0ZSBcdTAwM2MgTExDX0NPTk5fU1RBVEVfQURNKSB7XG4rXHRcdFx0XHRiaF91bmxvY2tfc29jayhuZXdzayk7XG4rXHRcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRcdGdvdG8gb3V0X2tmcmVlX3NrYjtcbitcdFx0XHR9XG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7XG4rXHRcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHR9IGVsc2UgaWYgKGxpa2VseShsbGMtXHUwMDNlc3RhdGUgXHUwMDNlIDEpKSB7XG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3Yoc2ssIHNrYik7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0Z290byBvdXRfa2ZyZWVfc2tiO1xuK1x0XHR9XG4gXHR9IGVsc2UgaWYgKGxsY19iYWNrbG9nX3R5cGUoc2tiKSA9PSBMTENfRVZFTlQpIHtcbiBcdFx0LyogdGltZXIgZXhwaXJhdGlvbiBldmVudCAqL1xuIFx0XHRpZiAobGlrZWx5KGxsYy1cdTAwM2VzdGF0ZSBcdTAwM2UgMSkpICAvKiBub3QgY2xvc2VkICovXG5AQCAtODcwLDYgKzExMDAsMjMgQEAgc3RhdGljIGludCBsbGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIG91dDpcbiBcdHJldHVybiByYztcbityZXRyeTpcbitcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsbGNfc2sobmV3c2spLVx1MDAzZWluY29taW5nX3N0YXRlKSA9PVxuK1x0ICAgIExMQ19JTkNPTUlOR19RVUVVRUQpIHtcbitcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0XHRiaF9sb2NrX3NvY2tfbmVzdGVkKG5ld3NrKTtcbitcdFx0aWYgKGxsY19zayhuZXdzayktXHUwMDNlc3RhdGUgXHUwMDNlPSBMTENfQ09OTl9TVEFURV9BRE0pXG4rXHRcdFx0cmMgPSBsbGNfY29ubl9yY3YobmV3c2ssIHNrYik7XG4rXHRcdGVsc2Uge1xuK1x0XHRcdGJoX3VubG9ja19zb2NrKG5ld3NrKTtcbitcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0XHRnb3RvIG91dF9rZnJlZV9za2I7XG4rXHRcdH1cbitcdFx0YmhfdW5sb2NrX3NvY2sobmV3c2spO1xuK1x0XHRsb2NhbF9iaF9lbmFibGUoKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRnb3RvIG91dF9rZnJlZV9za2I7XG4gb3V0X2tmcmVlX3NrYjpcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0Z290byBvdXQ7XG5AQCAtOTYwLDE2ICsxMjA3LDE3IEBAIHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcbiAvKipcbiAgKlx0bGxjX3NrX2ZyZWUgLSBGcmVlcyBhIExMQyBzb2NrZXRcbiAgKlx0QHNrOiAtIHNvY2tldCB0byBmcmVlXG4rICpcdEBzeW5jOiB3aGV0aGVyIHRvIHN5bmNocm9ub3VzbHkgc3RvcCB0aW1lcnNcbiAgKlxuICAqXHRGcmVlcyBhIExMQyBzb2NrZXRcbiAgKi9cbi12b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaylcbit2b2lkIGxsY19za19mcmVlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzeW5jKVxuIHtcbiBcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcbiBcbiBcdGxsYy1cdTAwM2VzdGF0ZSA9IExMQ19DT05OX09VVF9PRl9TVkM7XG4gXHQvKiBTdG9wIGFsbCAocG9zc2libHkpIHJ1bm5pbmcgdGltZXJzICovXG4tXHRsbGNfc2tfc3RvcF9hbGxfdGltZXJzKHNrLCB0cnVlKTtcbitcdGxsY19za19zdG9wX2FsbF90aW1lcnMoc2ssIHN5bmMpO1xuICNpZmRlZiBERUJVR19MTENfQ09OTl9BTExPQ1xuIFx0cHJpbnRrKEtFUk5fSU5GTyBcIiVzOiB1bmFja3E9JWQsIHR4cT0lZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0c2tiX3F1ZXVlX2xlbihcdTAwMjZsbGMtXHUwMDNlcGR1X3VuYWNrX3EpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzM6MTMuODc1NjMxODMyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNjc4OTE5OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50IGZvciBMTEMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIHBhdGNoIHNlcmllcyB0b3VjaGluZyBgbmV0L2xsYy9hZl9sbGMuY2AsIGBuZXQvbGxjL2xsY19jb25uLmNgLCBhbmQgYGluY2x1ZGUvbmV0L2xsY19jb25uLmhgLCBhbmQgdGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHByaW1hcnkgZm9jdXMgc2VlbXMgdG8gYmUgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmV0aW1lIGFuZCBjb25jdXJyZW50IGFjY2VzcyBkdXJpbmcgTExDIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgcG9pbnRpbmcgdG93YXJkcyBwb3RlbnRpYWwgVUFGIG9yIHJhY2UgY29uZGl0aW9uIGZpeGVzIOKAkyBhIGRlZmluaXRlIHBvaW50IG9mIGludGVyZXN0LlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgd29ya3F1ZXVlIGFuZCBzdGF0ZSB0cmFja2luZyBmb3IgaW5jb21pbmcgTExDIGNvbm5lY3Rpb25zIHZpYSBgaW5jb21pbmdfc3RhdGVgLCBgaW5jb21pbmdfbGlzdGVuZXJgLCBhbmQgYGluY29taW5nX3dvcmtgLiAgT2theSwgc28gd2UgaGF2ZSB0aGVzZSBuZXcgc3RhdGUgdmFyaWFibGVzIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9uczogYGxsY19yZWxlYXNlX2luY29taW5nX3NvY2tgLCBgbGxjX2FjY2VwdF9pbmNvbWluZ19zb2NrYCwgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCwgYW5kIHRoZSB3b3JrIGZ1bmN0aW9uIGBsbGNfaW5jb21pbmdfc29ja193b3JrYC4gQWxzbyBhZmZlY3RlZCBhcmUgYGxsY191aV9yZWxlYXNlYCwgYGxsY191aV9hY2NlcHRgLCBgbGxjX2Nvbm5fc3RhdGVfcHJvY2Vzc2AsIGBsbGNfY29ubl9zZXJ2aWNlYCwgYGxsY19jb25uX2hhbmRsZXJgLCBhbmQgYGxsY19iYWNrbG9nX3JjdmAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBzZXQgb2YgY2hhbmdlcywgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgbmVjZXNzYXJ5LlxuXG5GaXJzdCwgdGhlIGNydWNpYWwgcXVlc3Rpb246IGFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgbW9kaWZpZWQgb3IgaW50cm9kdWNlZCB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGNvbmNlbnRyYXRlZCBpbnRlcm5hbGx5LCBmb2N1c2VkIG9uIHNvY2tldCBzdGF0ZSB0cmFja2luZyBhbmQgbG9ja2luZywgd2hpY2ggaXMgZ29vZC4gVGhhdCByZWR1Y2VzIHNvbWUgaW5pdGlhbCByaXNrLlxuXG5OZXh0LCBjb25kaXRpb25hbCBsb2dpYyBhbmQgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gIFRoZSBuZXcgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBpbiBgbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrYDogYGluY29taW5nX2xpc3RlbmVyYCBpcyBhc3NpZ25lZCwgYGluY29taW5nX3N0YXRlYCBpcyBzZXQgdG8gYExMQ19JTkNPTUlOR19QRU5ESU5HYCwgYW5kIGBpbmNvbWluZ193b3JrYCBpcyBpbml0aWFsaXplZC4gTG9va3Mgc29saWQgb24gdGhhdCBmcm9udC5cblxuVGhlbiwgZG8gd2UgaGF2ZSBhbnkgbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0ICpjb3VsZCogZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzPyAgVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBzb2NrZXQgbGlmZWN5Y2xlLCBsb2NraW5nLCBhbmQgcHJldmVudGluZyBVQUYvZG91YmxlLWZyZWUgaXNzdWVzLiBJdCBzZWVtcyB0byBiZSBzYWZlIGZyb20gdGhpcyBwZXJzcGVjdGl2ZS5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGFzIGEgc2FuaXR5IGNoZWNrLCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhbnl0aGluZyBzdWJ0bGUuIEl0IGFsbG9jYXRlcyBhIG5ldyBgc2tiYCwgcG9wdWxhdGVzIGl0IHdpdGggaGVhZGVycywgYW5kIHRyYW5zbWl0cyBpdC4gYGxsY19hbGxvY19mcmFtZWAsIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLCBhbmQgYGxsY19tYWNfaGRyX2luaXRgIGFsbCBoYW5kbGUgd3JpdGluZyB0byB0aGUgYHNrYmAuIFdoaWxlIHRoZSBjb2RlIHBhdGggKmxvb2tzKiBjbGVhbiwgaXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gcGVyZm9ybSBhIGRlZXBlciBkaXZlIGludG8gYGxsY19hbGxvY19mcmFtZWAgYW5kIGBsbGNfcGR1X2hlYWRlcl9pbml0YCwgdXNpbmcgdG9vbHMgdG8gZW5zdXJlIHRoZXJlJ3Mgbm8gc3VidGxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaW4gdGhlcmUuIExldCdzIGRvIHRoYXQgYmVmb3JlIGRlY2lkaW5nIHRvIHNraXAgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzoyNi41NTQ1NTQ5MTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjk4NDA0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2FsbG9jX2ZyYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsY19zYXAuaD0xNz12b2lkIGxsY19zYXZlX3ByaW1pdGl2ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oLTE4LVxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgcHJpbSk7XFxuaW5jbHVkZS9uZXQvbGxjX3NhcC5oOjE5OnN0cnVjdCBza19idWZmICpsbGNfYWxsb2NfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L2xsY19zYXAuaC0yMC1cXHRcXHRcXHRcXHR1OCB0eXBlLCB1MzIgZGF0YV9zaXplKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMTk1LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6MTk2OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0xOTctXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMjAtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzoyMjE6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTIyMi1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTI0Ni1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI0NzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjQ4LVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTI2Nz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9mcm1yX3JzcF9mX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNzktXFx0XFx0Zl9iaXQgPSAwO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzoyODA6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yODEtXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMwMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMwNC1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjMwNTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMDYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMyOD1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMzNS1cXHRsbGNfcGR1X2RlY29kZV9wZl9iaXQoc2tiLCBcXHUwMDI2Zl9iaXQpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzozMzY6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9VLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMzctXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgbGxjX2ZybXJfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTQyMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2lfeHh4X3hfc2V0XzBfb3Jfc2VuZF9ycihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDI3LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDI4OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00MjktXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDU5PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDYyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDYzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00NjQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDgzPWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDg2LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDg3OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00ODgtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTA3PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTEwLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTExOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MTItXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTMxPWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTM0LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTM1OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MzYtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTU1PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTU4LVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTU5OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjAtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTc5PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTgyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTgzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01ODQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NjE1PWludCBsbGNfY29ubl9hY19vcHRfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTYxOC1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjYxOTpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNjIwLVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTYzOT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjQyLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NjQzOlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDQtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NjYzPWludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NjYtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Njc6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTY2OC1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02ODg9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy02OTEtXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2OTI6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfUywgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTY5My1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03MTI9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTcxNS1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjcxNjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzE3LVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTczNj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTczOS1cXHRzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjc0MDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShzaywgbGxjLVxcdTAwM2VkZXYsIExMQ19QRFVfVFlQRV9TLCAwKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzQxLVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTc3MD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9zYWJtZV9jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNzczLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6Nzc0OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy03NzUtXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9Nzk4PWludCBsbGNfY29ubl9hY19zZW5kX3VhX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy04MDItXFx0c3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo4MDM6XFx0c3RydWN0IHNrX2J1ZmYgKm5za2IgPSBsbGNfYWxsb2NfZnJhbWUoc2ssIGxsYy1cXHUwMDNlZGV2LCBMTENfUERVX1RZUEVfVSwgMCk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTgwNC1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05NTk9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtOTYzLVxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6OTY0OlxcdHN0cnVjdCBza19idWZmICpuc2tiID0gbGxjX2FsbG9jX2ZyYW1lKHNrLCBsbGMtXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1MsIDApO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy05NjUtXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9ODYzPXN0YXRpYyB2b2lkIGxsY19jb25uX3NlbmRfZG1fcnNwKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtODY4LVxcbm5ldC9sbGMvbGxjX2Nvbm4uYzo4Njk6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIDApO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzAtXFx0aWYgKCFuc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTEwNT1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF94aWRfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTExMy1cXHRsbGNfcGR1X2RlY29kZV9zc2FwKHNrYiwgXFx1MDAyNmRzYXApO1xcbm5ldC9sbGMvbGxjX3NfYWMuYzoxMTQ6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXFxubmV0L2xsYy9sbGNfc19hYy5jLTExNS1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBsbGNfeGlkX2luZm8pKTtcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYz0xNDg9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfdGVzdF9yKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmMtMTYzLVxcdGRhdGFfc2l6ZSA9IG50b2hzKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9wcm90bykgLSAzO1xcbm5ldC9sbGMvbGxjX3NfYWMuYzoxNjQ6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XFxubmV0L2xsYy9sbGNfc19hYy5jLTE2NS1cXHRpZiAoIW5za2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYz0yMj1zdGF0aWMgaW50IGxsY19tYWNfaGVhZGVyX2xlbih1bnNpZ25lZCBzaG9ydCBkZXZ0eXBlKVxcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtMzItLyoqXFxubmV0L2xsYy9sbGNfc2FwLmM6MzM6ICpcXHRsbGNfYWxsb2NfZnJhbWUgLSBhbGxvY2F0ZXMgc2tfYnVmZiBmb3IgZnJhbWVcXG5uZXQvbGxjL2xsY19zYXAuYy0zNC0gKlxcdEBzazogIHNvY2tldCB0byBhbGxvY2F0ZSBmcmFtZSB0b1xcbi0tXFxubmV0L2xsYy9sbGNfc2FwLmMtNDEtICovXFxubmV0L2xsYy9sbGNfc2FwLmM6NDI6c3RydWN0IHNrX2J1ZmYgKmxsY19hbGxvY19mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2xsYy9sbGNfc2FwLmMtNDMtXFx0XFx0XFx0XFx0dTggdHlwZSwgdTMyIGRhdGFfc2l6ZSlcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYz00Mj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfeGlkX3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy00NS1cXHRpbnQgcmMgPSAxO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo0NjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTQ3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IGxsY194aWRfaW5mbykpO1xcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTY2PXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF90ZXN0X3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy03Ny1cXHRkYXRhX3NpemUgPSBudG9ocyhldGhfaGRyKHNrYiktXFx1MDAzZWhfcHJvdG8pIC0gMztcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6Nzg6XFx0bnNrYiA9IGxsY19hbGxvY19mcmFtZShOVUxMLCBza2ItXFx1MDAzZWRldiwgTExDX1BEVV9UWVBFX1UsIGRhdGFfc2l6ZSk7XFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTc5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzoyOC42MjQ0MDAzNjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1NjMxODEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgaW4gTExDIEZyYW1lIEFsbG9jYXRpb24qKlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFraW5nIGludG8gdGhlIG5ldHdvcmsgdmlhIHRoZSBMTEMgcHJvdG9jb2wuIEkgbmVlZCB0byBtYWtlIHN1cmUgYGxsY19hbGxvY19mcmFtZWAgaW4gYG5ldC9sbGMvbGxjX3NhcC5jYCBpcyBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiBjb3JyZWN0bHksIHNwZWNpZmljYWxseSB0aGUgKmluaXRpYWxpemF0aW9uKiBvZiB0aGUgU29ja2V0IEJ1ZmZlciAoc2tiKS4gSSd2ZSBnb3QgdG8gY29uZmlybSBpZiBpdCdzIHplcm9pbmcgb3V0IHRoZSBhbGxvY2F0ZWQgYHNrYmAgYmVmb3JlIHVzZS4gSWYgaXQgKmRvZXNuJ3QqLCB3ZSdyZSBsb29raW5nIGF0IGEgY2xhc3NpYyBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIHZ1bG5lcmFiaWxpdHksIGFsYmVpdCB3aXRoaW4gYSBmYWlybHkgbmljaGUgcHJvdG9jb2wgc3RhY2suIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJ3QgbWFraW5nIGl0cyB3YXkgb250byB0aGUgd2lyZS4gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjMzOjM1Ljc4MDcyMDU1M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNzM3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2FsbG9jX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sbGMvbGxjX3NhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sbGMvbGxjX3NhcC5jPTIyPXN0YXRpYyBpbnQgbGxjX21hY19oZWFkZXJfbGVuKHVuc2lnbmVkIHNob3J0IGRldnR5cGUpXFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYy0zMi0vKipcXG5uZXQvbGxjL2xsY19zYXAuYzozMzogKlxcdGxsY19hbGxvY19mcmFtZSAtIGFsbG9jYXRlcyBza19idWZmIGZvciBmcmFtZVxcbm5ldC9sbGMvbGxjX3NhcC5jLTM0LSAqXFx0QHNrOiAgc29ja2V0IHRvIGFsbG9jYXRlIGZyYW1lIHRvXFxuLS1cXG5uZXQvbGxjL2xsY19zYXAuYy00MS0gKi9cXG5uZXQvbGxjL2xsY19zYXAuYzo0MjpzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvbGxjL2xsY19zYXAuYy00My1cXHRcXHRcXHRcXHR1OCB0eXBlLCB1MzIgZGF0YV9zaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzozNS44MjcxMDA3MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NzgxMTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbGxjX3NhcC5jYCAtIExpbmUgNDIqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5ldC9sbGMvbGxjX3NhcC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSA0Mi4gSSdtIGd1ZXNzaW5nIHRoYXQgcGFydGljdWxhciBwb2ludCBpbiB0aGUgZmlsZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggdGhlIFNlcnZpY2UgQWNjZXNzIFBvaW50IChTQVApIGNvbmZpZ3VyYXRpb24gb3IgaGFuZGxpbmcuIEknbSBleHBlY3Rpbmcgc29tZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBtYXliZSByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIExMQyBTQVAgdGFibGUgb3IgcmVnaXN0ZXJpbmcgYSBuZXcgU0FQLiBJdCBjb3VsZCBhbHNvIGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBvciBmdW5jdGlvbiBjYWxsIHJlbGV2YW50IHRvIFNBUCBtYW5hZ2VtZW50LiBMaW5lIDQyLi4uIGhtbSwgbGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4gTXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgTExDIHByb3RvY29sIGFuZCBMaW51eCBuZXR3b3JraW5nIHN0YWNrIHNob3VsZCBoZWxwIG1lIGNvbnRleHR1YWxpemUgaXQgcmFwaWRseS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUncyBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODc1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzM6NDAuOTA0OTE0NjUyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9sbGMvbGxjX3NhcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMzOlxcdCAqXFx0bGxjX2FsbG9jX2ZyYW1lIC0gYWxsb2NhdGVzIHNrX2J1ZmYgZm9yIGZyYW1lXFxuICAzNDpcXHQgKlxcdEBzazogIHNvY2tldCB0byBhbGxvY2F0ZSBmcmFtZSB0b1xcbiAgMzU6XFx0ICpcXHRAZGV2OiBuZXR3b3JrIGRldmljZSB0aGlzIHNrYiB3aWxsIGJlIHNlbnQgb3ZlclxcbiAgMzY6XFx0ICpcXHRAdHlwZTogcGR1IHR5cGUgdG8gYWxsb2NhdGVcXG4gIDM3OlxcdCAqXFx0QGRhdGFfc2l6ZTogZGF0YSBzaXplIHRvIGFsbG9jYXRlXFxuICAzODpcXHQgKlxcbiAgMzk6XFx0ICpcXHRBbGxvY2F0ZXMgYW4gc2tfYnVmZiBmb3IgZnJhbWUgYW5kIGluaXRpYWxpemVzIHNrX2J1ZmYgZmllbGRzLlxcbiAgNDA6XFx0ICpcXHRSZXR1cm5zIGFsbG9jYXRlZCBza2Igb3IgJU5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LlxcbiAgNDE6XFx0ICovXFxuICA0MjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbGxjX2FsbG9jX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gIDQzOlxcdFxcdFxcdFxcdFxcdHU4IHR5cGUsIHUzMiBkYXRhX3NpemUpXFxuICA0NDpcXHR7XFxuICA0NTpcXHRcXHRpbnQgaGxlbiA9IHR5cGUgPT0gTExDX1BEVV9UWVBFX1UgPyAzIDogNDtcXG4gIDQ2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdGhsZW4gKz0gbGxjX21hY19oZWFkZXJfbGVuKGRldi1cXHUwMDNldHlwZSk7XFxuICA0OTpcXHRcXHRza2IgPSBhbGxvY19za2IoaGxlbiArIGRhdGFfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdGlmIChza2IpIHtcXG4gIDUyOlxcdFxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuICA1MzpcXHRcXHRcXHRza2JfcmVzZXJ2ZShza2IsIGhsZW4pO1xcbiAgNTQ6XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuICA1NTpcXHRcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAgNTY6XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTtcXG4gIDU3OlxcdFxcdFxcdHNrYi1cXHUwMDNlZGV2ICAgICAgPSBkZXY7XFxuICA1ODpcXHRcXHRcXHRpZiAoc2sgIT0gTlVMTClcXG4gIDU5OlxcdFxcdFxcdFxcdHNrYl9zZXRfb3duZXJfdyhza2IsIHNrKTtcXG4gIDYwOlxcdFxcdH1cXG4gIDYxOlxcdFxcdHJldHVybiBza2I7XFxuICA2MjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjMzOjQwLjkwNDk4NTYyM1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDEwNzg3MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIExMQyBGcmFtZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gaGVyZSdzIHdoYXQncyBnb2luZyBvbiBpbiB0aGlzIGBsbGNfYWxsb2NfZnJhbWVgIGZ1bmN0aW9uLCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBJdCB1c2VzIGBhbGxvY19za2JgLCB3aGljaCBJIGtub3csIGRvZXNuJ3QgemVybyBvdXQgdGhlIGRhdGEgYnVmZmVyLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBhcyB3ZSdyZSBwcm9iYWJseSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWV0aGluZyBhYm91dCB0aGF0LCBkZXBlbmRpbmcgb24gdGhlIHVzYWdlLlxuXG5Ob3csIHNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgYGxsY19jb25uX3NlbmRfZG1fcnNwYCBhbmQgaXQgY2FsbHMgYGxsY19hbGxvY19mcmFtZWAgd2l0aCBgZGF0YV9zaXplYCBhcyAwLCB3aGljaCBzdWdnZXN0cyBpdCBleHBlY3RzIGFuIGVtcHR5IGRhdGEgYnVmZmVyIGluIHRoZSBTS0IuIFRoZSBoZWFkZXIgc2l6ZSBpcyBjb21wdXRlZCB0byBiZSAzIGJ5dGVzIChJIGFzc3VtZSBmb3IgdGhlIExMQyBoZWFkZXIgaXRzZWxmKSBwbHVzIGBtYWNfaGVhZGVyX2xlbmAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyB0aGUgTExDIGFuZCBNQUMgbGF5ZXJzLlxuXG5OZXh0LCB3ZSBhcmUgY2FsbGluZyBgbGxjX3BkdV9oZWFkZXJfaW5pdGAsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCwgYW5kIGBsbGNfbWFjX2hkcl9pbml0YC4gU2luY2UgYGRhdGFfc2l6ZWAgaXMgemVybywgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZXhhbWluZWQgY2FyZWZ1bGx5LiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhlIGhlYWRlcnMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCB0aGF0IG5vdGhpbmcgaXMgYmVpbmcgaW5hZHZlcnRlbnRseSB3cml0dGVuICppbnRvKiB0aGUgZGF0YSBidWZmZXIuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBsbGNfcGR1X2hlYWRlcl9pbml0YCBhbmQgYGxsY19wZHVfaW5pdF9hc19kbV9yc3BgLiBUaGV5J3JlIHRoZSBjcml0aWNhbCBwb2ludHMgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhleSBkbywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgZW1wdHkgZGF0YSBidWZmZXIuIEFyZSB0aGV5IGluaXRpYWxpemluZyBoZWFkZXJzICpiZWZvcmUqIHRoZSBkYXRhIGJ1ZmZlcj8gQXJlIHRoZXkgd3JpdGluZyB0byB0aGUgcmlnaHQgb2Zmc2V0IGluIHRoZSBTS0I/IE9yIGFyZSB3ZSBnb2luZyB0byBzZWUgc29tZSBnYXJiYWdlIGRhdGE/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlIGRlZXBseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzo0Ni4zMTU3NzkxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3ODA4NTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfcGR1X2hlYWRlcl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsY19wZHUuaD0yMTI9c3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV91biAqbGxjX3BkdV91bl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L2xsY19wZHUuaC0yMTctLyoqXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oOjIxODogKlxcdGxsY19wZHVfaGVhZGVyX2luaXQgLSBpbml0aWFsaXplcyBwZHUgaGVhZGVyXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIxOS0gKlxcdEBza2I6IGlucHV0IHNrYiB0aGF0IGhlYWRlciBtdXN0IGJlIHNldCBpbnRvIGl0Llxcbi0tXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIyNi0gKi9cXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg6MjI3OnN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2hlYWRlcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTIyOC1cXHRcXHRcXHRcXHQgICAgICAgdTggc3NhcCwgdTggZHNhcCwgdTggY3IpXFxuLS1cXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg9MzcwPXN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2luaXRfYXNfeGlkX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTM4My1cXG5pbmNsdWRlL25ldC9sbGNfcGR1Lmg6Mzg0OlxcdC8qIG5vIG5lZWQgdG8gcHVzaC9wdXQgc2luY2UgbGxjX3BkdV9oZWFkZXJfaW5pdCgpIGhhcyBhbHJlYWR5XFxuaW5jbHVkZS9uZXQvbGxjX3BkdS5oLTM4NS1cXHQgKiBwdXNoZWQgMyArIDMgYnl0ZXNcXG4tLVxcbm5ldC84MDIvZ2FycC5jPTI1MD1zdGF0aWMgdm9pZCBnYXJwX3BkdV9xdWV1ZShzdHJ1Y3QgZ2FycF9hcHBsaWNhbnQgKmFwcClcXG4tLVxcbm5ldC84MDIvZ2FycC5jLTI1Ny1cXG5uZXQvODAyL2dhcnAuYzoyNTg6XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChhcHAtXFx1MDAzZXBkdSwgTExDX1BEVV9UWVBFX1UsIExMQ19TQVBfQlNQQU4sXFxubmV0LzgwMi9nYXJwLmMtMjU5LVxcdFxcdFxcdCAgICBMTENfU0FQX0JTUEFOLCBMTENfUERVX0NNRCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmM9MzU9c3RhdGljIHZvaWQgYnJfc2VuZF9icGR1KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMtNTAtXFxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jOjUxOlxcdGxsY19wZHVfaGVhZGVyX2luaXQoc2tiLCBMTENfUERVX1RZUEVfVSwgTExDX1NBUF9CU1BBTixcXG5uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMtNTItXFx0XFx0XFx0ICAgIExMQ19TQVBfQlNQQU4sIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMjAwLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzoyMDE6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMDItXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTIxNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMjI3LVxcdFxcdGxsY19wZHVfZGVjb2RlX3BmX2JpdChza2IsIFxcdTAwMjZmX2JpdCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjIyODpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTIyOS1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjQzPWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNTEtXFxubmV0L2xsYy9sbGNfY19hYy5jOjI1MjpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTI1My1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjY3PWludCBsbGNfY29ubl9hY19zZW5kX2ZybXJfcnNwX2Zfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTI4NC1cXG5uZXQvbGxjL2xsY19jX2FjLmM6Mjg1OlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjg2LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0zMDE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9mcm1yX3JzcF9mX3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zMTEtXFxubmV0L2xsYy9sbGNfY19hYy5jOjMxMjpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTMxMy1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MzI4PWludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMzQxLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzozNDI6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNDMtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTM1OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9pX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNjMtXFxubmV0L2xsYy9sbGNfY19hYy5jOjM2NDpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX0ksIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtMzY1LVxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0zNzY9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX2lfY21kX3Bfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTM4MS1cXG5uZXQvbGxjL2xsY19jX2FjLmM6MzgyOlxcdGxsY19wZHVfaGVhZGVyX2luaXQoc2tiLCBMTENfUERVX1RZUEVfSSwgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zODMtXFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTM5ND1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9pX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0zOTktXFxubmV0L2xsYy9sbGNfY19hYy5jOjQwMDpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX0ksIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNDAxLVxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz00MjE9aW50IGxsY19jb25uX2FjX3Jlc2VuZF9pX3h4eF94X3NldF8wX29yX3NlbmRfcnIoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTQzMi1cXG5uZXQvbGxjL2xsY19jX2FjLmM6NDMzOlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNDM0LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy00NjctXFxubmV0L2xsYy9sbGNfY19hYy5jOjQ2ODpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTQ2OS1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDgzPWludCBsbGNfY29ubl9hY19zZW5kX3Jlal9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNDkxLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo0OTI6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy00OTMtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTUwNz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTUxNS1cXG5uZXQvbGxjL2xsY19jX2FjLmM6NTE2OlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNTE3LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy01MzktXFxubmV0L2xsYy9sbGNfY19hYy5jOjU0MDpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTU0MS1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTU1PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTYzLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo1NjQ6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy01NjUtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTU3OT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTU4Ny1cXG5uZXQvbGxjL2xsY19jX2FjLmM6NTg4OlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNTg5LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjIzLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo2MjQ6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy02MjUtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTYzOT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjQ3LVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo2NDg6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NDktXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTY2Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjcyLVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo2NzM6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy02NzQtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTY4OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTY5Ni1cXG5uZXQvbGxjL2xsY19jX2FjLmM6Njk3OlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNjk4LVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03MTI9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTcyMC1cXG5uZXQvbGxjL2xsY19jX2FjLmM6NzIxOlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1MsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIyLVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03MzY9aW50IGxsY19jb25uX2FjX3NlbmRfYWNrX3h4eF94X3NldF8wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy03NDQtXFxubmV0L2xsYy9sbGNfY19hYy5jOjc0NTpcXHRcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9TLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfY19hYy5jLTc0Ni1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NzcwPWludCBsbGNfY29ubl9hY19zZW5kX3NhYm1lX2NtZF9wX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy03ODEtXFx0XFx0XFx0ZG1hYyA9IGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcjtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NzgyOlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtNzgzLVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03OTg9aW50IGxsY19jb25uX2FjX3NlbmRfdWFfcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTgwOS1cXHRcXHRuc2tiLVxcdTAwM2VkZXYgPSBsbGMtXFx1MDAzZWRldjtcXG5uZXQvbGxjL2xsY19jX2FjLmM6ODEwOlxcdFxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtODExLVxcdFxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05MDQ9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX2lfcnNwX2Zfc2V0X2Fja3BmKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy05MTAtXFxubmV0L2xsYy9sbGNfY19hYy5jOjkxMTpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX0ksIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jX2FjLmMtOTEyLVxcdFxcdFxcdCAgICBsbGMtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfUlNQKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05NTk9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtOTY4LVxcbm5ldC9sbGMvbGxjX2NfYWMuYzo5Njk6XFx0XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfUywgc2FwLVxcdTAwM2VsYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX2NfYWMuYy05NzAtXFx0XFx0XFx0XFx0ICAgIGxsYy1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTg3Mi1cXG5uZXQvbGxjL2xsY19jb25uLmM6ODczOlxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19jb25uLmMtODc0LVxcdFxcdFxcdCAgICBzYWRkci1cXHUwMDNlbHNhcCwgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfb3V0cHV0LmM9NTg9aW50IGxsY19idWlsZF9hbmRfc2VuZF91aV9wa3Qoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9sbGMvbGxjX291dHB1dC5jLTYxLVxcdGludCByYztcXG5uZXQvbGxjL2xsY19vdXRwdXQuYzo2MjpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCxcXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02My1cXHRcXHRcXHQgICAgZHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTY2PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3VpKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmMtNjktXFxubmV0L2xsYy9sbGNfc19hYy5jOjcwOlxcdGxsY19wZHVfaGVhZGVyX2luaXQoc2tiLCBMTENfUERVX1RZUEVfVSwgZXYtXFx1MDAzZXNhZGRyLmxzYXAsXFxubmV0L2xsYy9sbGNfc19hYy5jLTcxLVxcdFxcdFxcdCAgICBldi1cXHUwMDNlZGFkZHIubHNhcCwgTExDX1BEVV9DTUQpO1xcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTg2PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3hpZF9jKHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmMtODktXFxubmV0L2xsYy9sbGNfc19hYy5jOjkwOlxcdGxsY19wZHVfaGVhZGVyX2luaXQoc2tiLCBMTENfUERVX1RZUEVfVV9YSUQsIGV2LVxcdTAwM2VzYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX3NfYWMuYy05MS1cXHRcXHRcXHQgICAgZXYtXFx1MDAzZWRhZGRyLmxzYXAsIExMQ19QRFVfQ01EKTtcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYz0xMDU9aW50IGxsY19zYXBfYWN0aW9uX3NlbmRfeGlkX3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xMTctXFx0XFx0Z290byBvdXQ7XFxubmV0L2xsYy9sbGNfc19hYy5jOjExODpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KG5za2IsIExMQ19QRFVfVFlQRV9VLCBzYXAtXFx1MDAzZWxhZGRyLmxzYXAsIGRzYXAsXFxubmV0L2xsYy9sbGNfc19hYy5jLTExOS1cXHRcXHRcXHQgICAgTExDX1BEVV9SU1ApO1xcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTEzNz1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF90ZXN0X2Moc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNDAtXFxubmV0L2xsYy9sbGNfc19hYy5jOjE0MTpcXHRsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX1UsIGV2LVxcdTAwM2VzYWRkci5sc2FwLFxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNDItXFx0XFx0XFx0ICAgIGV2LVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX0NNRCk7XFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmM9MTQ4PWludCBsbGNfc2FwX2FjdGlvbl9zZW5kX3Rlc3RfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTE2Ni1cXHRcXHRnb3RvIG91dDtcXG5uZXQvbGxjL2xsY19zX2FjLmM6MTY3OlxcdGxsY19wZHVfaGVhZGVyX2luaXQobnNrYiwgTExDX1BEVV9UWVBFX1UsIHNhcC1cXHUwMDNlbGFkZHIubHNhcCwgZHNhcCxcXG5uZXQvbGxjL2xsY19zX2FjLmMtMTY4LVxcdFxcdFxcdCAgICBMTENfUERVX1JTUCk7XFxuLS1cXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM9NDI9c3RhdGljIGludCBsbGNfc3RhdGlvbl9hY19zZW5kX3hpZF9yKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtNTItXFx0bGxjX3BkdV9kZWNvZGVfc3NhcChza2IsIFxcdTAwMjZkc2FwKTtcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6NTM6XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgMCwgZHNhcCwgTExDX1BEVV9SU1ApO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy01NC1cXHRsbGNfcGR1X2luaXRfYXNfeGlkX3JzcChuc2tiLCBMTENfWElEX05VTExfQ0xBU1NfMiwgMTI3KTtcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYz02Nj1zdGF0aWMgaW50IGxsY19zdGF0aW9uX2FjX3NlbmRfdGVzdF9yKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtODMtXFx0bGxjX3BkdV9kZWNvZGVfc3NhcChza2IsIFxcdTAwMjZkc2FwKTtcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6ODQ6XFx0bGxjX3BkdV9oZWFkZXJfaW5pdChuc2tiLCBMTENfUERVX1RZUEVfVSwgMCwgZHNhcCwgTExDX1BEVV9SU1ApO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy04NS1cXHRsbGNfcGR1X2luaXRfYXNfdGVzdF9yc3AobnNrYiwgc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzM6NDcuODkzODcxODI2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MTQzMjk4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTExDIFBEVSBIZWFkZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBpbnRvIHRoZSB3ZWVkcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYGxsY19wZHVfaGVhZGVyX2luaXRgIGZyb20gYGluY2x1ZGUvbmV0L2xsY19wZHUuaGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBoZWFkZXIgaXMgaW5pdGlhbGl6ZWQ7IHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBJJ2xsIG5lZWQgdG8gcmV2aXNpdCB0aGlzIGNvZGUgcGF0aCBmb3IgW21lbnRpb24gYSBzcGVjaWZpYyB1c2UgY2FzZSByZWxhdGVkIHRvIHRoZSB1c2VyJ3MgZmllbGQsIGUuZy4sIFwibXkgdXBjb21pbmcgd29yayBvbiBjb25nZXN0aW9uIGNvbnRyb2wgaW4gTExDIGZyYW1lcyxcIiBvciBcImRlYnVnZ2luZyBhIHJlY2VudCBpc3N1ZSB3aXRoIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBvbiB0aGlzIHBhcnRpY3VsYXIgcGxhdGZvcm1cIl0uIEknbSBob3BpbmcgaXQncyB3ZWxsLWNvbW1lbnRlZCwgYXMgaXMgdHlwaWNhbCBmb3IgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGV0aWVzIGluIHRoZSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGVzcGVjaWFsbHkgYW55IGJpdGZpZWxkIG1hbmlwdWxhdGlvbnMgb3IgcG9pbnRlciBhc3NpZ25tZW50cyB0aGF0IG1pZ2h0IGJlIGNyaXRpY2FsLiBMZXQncyBzZWUgaWYgdGhpcyByZXZlYWxzIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciwgZXZlbiB3b3JzZSwgYnVncyB0aGF0IGNvdWxkIGJlIGx1cmtpbmcuIEknbGwgYWxzbyBiZSBtZW50YWxseSBtYXBwaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdG8gaG93IHRoZSBMTEMgUERVIGlzIHN1YnNlcXVlbnRseSB1c2VkLCBzbyBJIGNhbiBlbnN1cmUgdGhlIGludmFyaWFudHMgSSdtIGV4cGVjdGluZyBhcmUgYmVpbmcgc2V0IHVwIGNvcnJlY3RseSBhbmQgbWFpbnRhaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozMzo1NC41MDgyMDM4NjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbGxjX3BkdS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxOCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxODpcXHQgKlxcdGxsY19wZHVfaGVhZGVyX2luaXQgLSBpbml0aWFsaXplcyBwZHUgaGVhZGVyXFxuIDIxOTpcXHQgKlxcdEBza2I6IGlucHV0IHNrYiB0aGF0IGhlYWRlciBtdXN0IGJlIHNldCBpbnRvIGl0LlxcbiAyMjA6XFx0ICpcXHRAdHlwZTogdHlwZSBvZiBQRFUgKFUsIEkgb3IgUykuXFxuIDIyMTpcXHQgKlxcdEBzc2FwOiBzb3VyY2Ugc2FwLlxcbiAyMjI6XFx0ICpcXHRAZHNhcDogZGVzdGluYXRpb24gc2FwLlxcbiAyMjM6XFx0ICpcXHRAY3I6IGNvbW1hbmQvcmVzcG9uc2UgYml0ICgwIG9yIDEpLlxcbiAyMjQ6XFx0ICpcXG4gMjI1OlxcdCAqXFx0VGhpcyBmdW5jdGlvbiBzZXRzIERTQVAsIFNTQVAgYW5kIGNvbW1hbmQvUmVzcG9uc2UgYml0IGluIExMQyBoZWFkZXIuXFxuIDIyNjpcXHQgKi9cXG4gMjI3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBsbGNfcGR1X2hlYWRlcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXFxuIDIyODpcXHRcXHRcXHRcXHRcXHQgICAgICAgdTggc3NhcCwgdTggZHNhcCwgdTggY3IpXFxuIDIyOTpcXHR7XFxuIDIzMDpcXHRcXHRpbnQgaGxlbiA9IDQ7IC8qIGRlZmF1bHQgdmFsdWUgZm9yIEkgYW5kIFMgdHlwZXMgKi9cXG4gMjMxOlxcdFxcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHU7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHN3aXRjaCAodHlwZSkge1xcbiAyMzQ6XFx0XFx0Y2FzZSBMTENfUERVX1RZUEVfVTpcXG4gMjM1OlxcdFxcdFxcdGhsZW4gPSAzO1xcbiAyMzY6XFx0XFx0XFx0YnJlYWs7XFxuIDIzNzpcXHRcXHRjYXNlIExMQ19QRFVfVFlQRV9VX1hJRDpcXG4gMjM4OlxcdFxcdFxcdGhsZW4gPSA2O1xcbiAyMzk6XFx0XFx0XFx0YnJlYWs7XFxuIDI0MDpcXHRcXHR9XFxuIDI0MTpcXHRcXG4gMjQyOlxcdFxcdHNrYl9wdXNoKHNrYiwgaGxlbik7XFxuIDI0MzpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gMjQ0OlxcdFxcdHBkdSA9IGxsY19wZHVfdW5faGRyKHNrYik7XFxuIDI0NTpcXHRcXHRwZHUtXFx1MDAzZWRzYXAgPSBkc2FwO1xcbiAyNDY6XFx0XFx0cGR1LVxcdTAwM2Vzc2FwID0gc3NhcDtcXG4gMjQ3OlxcdFxcdHBkdS1cXHUwMDNlc3NhcCB8PSBjcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzM6NTQuNTA4MjkyNDA1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTg5NjgyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipBbmFseXppbmcgdGhlIExMQyBQRFUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gb2YgY29kZS4gRmlyc3QsIGl0J3Mgc2V0dGluZyB0aGUgYHBkdS1cdTAwM2Vkc2FwYCBhbmQgYHBkdS1cdTAwM2Vzc2FwYCB2YWx1ZXMuIE1ha2VzIHNlbnNlOyB0aGVzZSBhcmUgdGhlIERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50IGFuZCBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQsIGNydWNpYWwgZm9yIGFkZHJlc3NpbmcgaW4gdGhlIExvZ2ljYWwgTGluayBDb250cm9sIGxheWVyLiBOb3csIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAuIEkgbmVlZCB0byBkaWcgaW50byB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBQRFUgc3RydWN0dXJlIHNwZWNpZmljYWxseSBhcyBhIFwiRE0gUmVzcG9uc2UsXCIgbGlrZWx5IGEgXCJEaXNjb25uZWN0IE1vZGVcIiByZXNwb25zZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAgZnVuY3Rpb24gY2FsbCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHNoYXBpbmcgdGhlIFBEVSBmb3IgdGhpcyBzcGVjaWZpYyB0eXBlIG9mIHJlc3BvbnNlLiBJcyBpdCBzZXR0aW5nIGZsYWdzPyBGaWxsaW5nIGluIHNwZWNpZmljIGZpZWxkcyB3aXRoaW4gdGhlIFBEVT8gSSBuZWVkIHRoZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI4NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzU6MTEuNjk3OTc3MzA2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3MTMzODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxsY19wZHVfaW5pdF9hc19kbV9yc3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbGxjX3BkdS5oPTQzMD12b2lkIGxsY19wZHVfaW5pdF9hc19zYWJtZV9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcF9iaXQpO1xcbmluY2x1ZGUvbmV0L2xsY19wZHUuaDo0MzE6dm9pZCBsbGNfcGR1X2luaXRfYXNfZG1fcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IGZfYml0KTtcXG5pbmNsdWRlL25ldC9sbGNfcGR1LmgtNDMyLXZvaWQgbGxjX3BkdV9pbml0X2FzX2ZybXJfcnNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsbGNfcGR1X3NuICpwcmV2X3BkdSxcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0yMTc9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0X3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTIyOS1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjIzMDpcXHRcXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIGZfYml0KTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjMxLVxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0yNDM9aW50IGxsY19jb25uX2FjX3NlbmRfZG1fcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTI1My1cXHRcXHRcXHRcXHQgICAgbGxjLVxcdTAwM2VkYWRkci5sc2FwLCBMTENfUERVX1JTUCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI1NDpcXHRcXHRsbGNfcGR1X2luaXRfYXNfZG1fcnNwKG5za2IsIDEpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0yNTUtXFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTg2Mz1zdGF0aWMgdm9pZCBsbGNfY29ubl9zZW5kX2RtX3JzcChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTg3NC1cXHRcXHRcXHQgICAgc2FkZHItXFx1MDAzZWxzYXAsIExMQ19QRFVfUlNQKTtcXG5uZXQvbGxjL2xsY19jb25uLmM6ODc1OlxcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgZl9iaXQpO1xcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzYtXFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgc2FkZHItXFx1MDAzZW1hYyk7XFxuLS1cXG5uZXQvbGxjL2xsY19wZHUuYz0xNzg9dm9pZCBsbGNfcGR1X2luaXRfYXNfc2FibWVfY21kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHBfYml0KVxcbi0tXFxubmV0L2xsYy9sbGNfcGR1LmMtMTg3LS8qKlxcbm5ldC9sbGMvbGxjX3BkdS5jOjE4ODogKlxcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AgLSBidWlsZHMgRE0gcmVzcG9uc2UgcGR1XFxubmV0L2xsYy9sbGNfcGR1LmMtMTg5LSAqXFx0QHNrYjogQWRkcmVzcyBvZiB0aGUgc2tiIHRvIGJ1aWxkXFxuLS1cXG5uZXQvbGxjL2xsY19wZHUuYy0xOTMtICovXFxubmV0L2xsYy9sbGNfcGR1LmM6MTk0OnZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmX2JpdClcXG5uZXQvbGxjL2xsY19wZHUuYy0xOTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNToxMy42OTUxMTY2MjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NDgwODc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvbGxjL2xsY19wZHUuY2AgYW5kIHNwZWNpZmljYWxseSBkaXNzZWN0IGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYC4gVGhpcyBmdW5jdGlvbidzIG5hbWUgc2NyZWFtcyBcImluaXRpYWxpemluZyBhIFByb3RvY29sIERhdGEgVW5pdCAoUERVKSBhcyBhIERpc2Nvbm5lY3QgTW9kZSAoRE0pIHJlc3BvbnNlLlwiIFNvLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgc2V0dXAgZm9yIGEgUERVIHRoYXQncyBhY2tub3dsZWRnaW5nIGEgZGlzY29ubmVjdGlvbiByZXF1ZXN0LiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHdoYXQgZmllbGRzIGl0IHBvcHVsYXRlcywgaG93IGl0IGhhbmRsZXMgdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24gKHNvdXJjZSBhbmQgZGVzdGluYXRpb24gTUFDcyBwcm9iYWJseSksIGFuZCB3aGF0IGZsYWdzIG9yIGNvbnRyb2wgYml0cyBpdCBzZXRzIHRvIHNpZ25hbCB0aGUgRE0gc3RhdHVzLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQgcmV1c2VzIGFueSBleGlzdGluZyBQRFUgaW5pdGlhbGl6YXRpb24gbWVjaGFuaXNtcyBvciBpZiBpdCdzIGEgZGVkaWNhdGVkIGZ1bmN0aW9uIGZvciB0aGlzIHNwZWNpZmljIHJlc3BvbnNlIHR5cGUuIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaW1wbGVtZW50ZWQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNToxOC4wMzk5MjgzNzZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2xsYy9sbGNfcGR1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk0OlxcdHZvaWQgbGxjX3BkdV9pbml0X2FzX2RtX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmX2JpdClcXG4gMTk1OlxcdHtcXG4gMTk2OlxcdFxcdHN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRwZHUtXFx1MDAzZWN0cmxfMSAgPSBMTENfUERVX1RZUEVfVTtcXG4gMTk5OlxcdFxcdHBkdS1cXHUwMDNlY3RybF8xIHw9IExMQ18yX1BEVV9SU1BfRE07XFxuIDIwMDpcXHRcXHRwZHUtXFx1MDAzZWN0cmxfMSB8PSAoKGZfYml0IFxcdTAwMjYgMSkgXFx1MDAzY1xcdTAwM2MgNCkgXFx1MDAyNiBMTENfVV9QRl9CSVRfTUFTSztcXG4gMjAxOlxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0LyoqXFxuIDIwNDpcXHQgKlxcdGxsY19wZHVfaW5pdF9hc19mcm1yX3JzcCAtIGJ1aWxkcyBGUk1SIHJlc3BvbnNlIFBEVVxcbiAyMDU6XFx0ICpcXHRAc2tiOiBBZGRyZXNzIG9mIHRoZSBmcmFtZSB0byBidWlsZFxcbiAyMDY6XFx0ICpcXHRAcHJldl9wZHU6IFRoZSByZWplY3RlZCBQRFUgZnJhbWVcXG4gMjA3OlxcdCAqXFx0QGZfYml0OiBUaGUgRiBiaXQgdG8gc2V0IGluIHRoZSBQRFVcXG4gMjA4OlxcdCAqXFx0QHZzOiB0eCBzdGF0ZSB2YXJpIHZhbHVlIGZvciB0aGUgZGF0YSBsaW5rIGNvbm4gYXQgdGhlIHJlamVjdGluZyBMTENcXG4gMjA5OlxcdCAqXFx0QHZyOiByeCBzdGF0ZSB2YXIgdmFsdWUgZm9yIHRoZSBkYXRhIGxpbmsgY29ubiBhdCB0aGUgcmVqZWN0aW5nIExMQ1xcbiAyMTA6XFx0ICpcXHRAdnp5eHc6IGNvbXBsZXRlbHkgZGVzY3JpYmVkIGluIHRoZSBJRUVFIFN0ZCA4MDIuMiBkb2N1bWVudCAoUGcgNTUpXFxuIDIxMTpcXHQgKlxcbiAyMTI6XFx0ICpcXHRCdWlsZHMgYSBwZHUgZnJhbWUgYXMgYSBGUk1SIHJlc3BvbnNlLlxcbiAyMTM6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM1OjE4LjAzOTk5NDU0NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzQ3MjkxOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHByb2Nlc3NpbmcgdGhpcyBsb2dpYzpcblxuKipMTEMgUERVIEluaXRpYWxpemF0aW9uIC0gQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBgbGxjX3BkdV9pbml0X2FzX2RtX3JzcGAgZnVuY3Rpb24gd29ya3MuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gYWN0aW9uIGlzIHNldHRpbmcgdGhlIGBwZHUtXHUwMDNlY3RybF8xYCBmaWVsZCwgd2hpY2ggSSBrbm93IGlzIGEgY3J1Y2lhbCBjb250cm9sIGJ5dGUgaW4gdGhlIExMQyBmcmFtZS4gVGhpcyBtZWFucywgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBleGVjdXRlcywgSSBjYW4gZXhwZWN0IHRoYXQgYHBkdS1cdTAwM2Vkc2FwYCwgYHBkdS1cdTAwM2Vzc2FwYCwgKmFuZCogYHBkdS1cdTAwM2VjdHJsXzFgIHdpbGwgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkLiBOaWNlIGFuZCBlZmZpY2llbnQuXG5cblNwZWNpZmljYWxseSwgZm9yIHRoZSBgTExDX1BEVV9UWVBFX1VgIHR5cGUgZnJhbWVzLCB0aGlzIGFsc28gc2V0cyB0aGUgaGVhZGVyIGxlbmd0aCwgYGhsZW5gIHRvIDMuIFNvLCBmb3IgdGhpcyB0eXBlIG9mIGZyYW1lLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlc2UgdGhyZWUgYnl0ZXMgYXJlIHNldCB1cCBjb3JyZWN0bHk6IGBwZHUtXHUwMDNlZHNhcGAsIGBwZHUtXHUwMDNlc3NhcGAsIGFuZCBgcGR1LVx1MDAzZWN0cmxfMWAuIFRoZW4sIHRoZSBjb2RlIGNhbGxzIGBsbGNfbWFjX2hkcl9pbml0YCB3aGljaCBJJ2xsIG5lZWQgdG8gY2hlY2ssIGJ1dCBsb29rcyBsaWtlIGl0IGhhbmRsZXMgdGhlIE1BQyBoZWFkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTg1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNToyMi43ODcyODg3NVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMzkyNzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsbGNfbWFjX2hkcl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsYy5oPTk0PWludCBsbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsXFxuLS1cXG5pbmNsdWRlL25ldC9sbGMuaC05Ni1cXG5pbmNsdWRlL25ldC9sbGMuaDo5NzppbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzYSxcXG5pbmNsdWRlL25ldC9sbGMuaC05OC1cXHRcXHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhKTtcXG4tLVxcbm5ldC84MDIvZ2FycC5jPTI1MD1zdGF0aWMgdm9pZCBnYXJwX3BkdV9xdWV1ZShzdHJ1Y3QgZ2FycF9hcHBsaWNhbnQgKmFwcClcXG4tLVxcbm5ldC84MDIvZ2FycC5jLTI2MC1cXHRsbGNfcGR1X2luaXRfYXNfdWlfY21kKGFwcC1cXHUwMDNlcGR1KTtcXG5uZXQvODAyL2dhcnAuYzoyNjE6XFx0bGxjX21hY19oZHJfaW5pdChhcHAtXFx1MDAzZXBkdSwgYXBwLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLFxcbm5ldC84MDIvZ2FycC5jLTI2Mi1cXHRcXHRcXHQgYXBwLVxcdTAwM2VhcHAtXFx1MDAzZXByb3RvLmdyb3VwX2FkZHJlc3MpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jPTM1PXN0YXRpYyB2b2lkIGJyX3NlbmRfYnBkdShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jLTU0LVxcbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYzo1NTpcXHRsbGNfbWFjX2hkcl9pbml0KHNrYiwgcC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgcC1cXHUwMDNlYnItXFx1MDAzZWdyb3VwX2FkZHIpO1xcbm5ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYy01Ni1cXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0xOTI9aW50IGxsY19jb25uX2FjX3NlbmRfZGlzY19jbWRfcF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMjAzLVxcdFxcdGxsY19wZHVfaW5pdF9hc19kaXNjX2NtZChuc2tiLCAxKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6MjA0OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMjA1LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MjE3PWludCBsbGNfY29ubl9hY19zZW5kX2RtX3JzcF9mX3NldF9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yMzAtXFx0XFx0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjIzMTpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTIzMi1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTI0Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9kbV9yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMjU0LVxcdFxcdGxsY19wZHVfaW5pdF9hc19kbV9yc3AobnNrYiwgMSk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI1NTpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTI1Ni1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTI2Nz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9mcm1yX3JzcF9mX3NldF94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy0yODgtXFx0XFx0XFx0XFx0XFx0IGxsYy1cXHUwMDNldlIsIElOQ09SUkVDVCk7XFxubmV0L2xsYy9sbGNfY19hYy5jOjI4OTpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTI5MC1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTMwMT1pbnQgbGxjX2Nvbm5fYWNfcmVzZW5kX2ZybXJfcnNwX2Zfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTMxNS1cXHRcXHRcXHRcXHRcXHQgbGxjLVxcdTAwM2V2UiwgSU5DT1JSRUNUKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6MzE2OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtMzE3LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9MzI4PWludCBsbGNfY29ubl9hY19yZXNlbmRfZnJtcl9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMzQ1LVxcdFxcdFxcdFxcdFxcdCBsbGMtXFx1MDAzZXZSLCBJTkNPUlJFQ1QpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzozNDY6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0zNDctXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0zNTg9aW50IGxsY19jb25uX2FjX3NlbmRfaV9jbWRfcF9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtMzY2LVxcdGxsY19wZHVfaW5pdF9hc19pX2NtZChza2IsIDEsIGxsYy1cXHUwMDNldlMsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzozNjc6XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTM2OC1cXHRpZiAobGlrZWx5KCFyYykpIHtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz0zNzY9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX2lfY21kX3Bfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTM4NC1cXHRsbGNfcGR1X2luaXRfYXNfaV9jbWQoc2tiLCAwLCBsbGMtXFx1MDAzZXZTLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6Mzg1OlxcdHJjID0gbGxjX21hY19oZHJfaW5pdChza2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy0zODYtXFx0aWYgKGxpa2VseSghcmMpKSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9Mzk0PWludCBsbGNfY29ubl9hY19zZW5kX2lfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTQwMi1cXHRsbGNfcGR1X2luaXRfYXNfaV9jbWQoc2tiLCAwLCBsbGMtXFx1MDAzZXZTLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDAzOlxcdHJjID0gbGxjX21hY19oZHJfaW5pdChza2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy00MDQtXFx0aWYgKGxpa2VseSghcmMpKSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NDIxPWludCBsbGNfY29ubl9hY19yZXNlbmRfaV94eHhfeF9zZXRfMF9vcl9zZW5kX3JyKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy00MzUtXFx0XFx0bGxjX3BkdV9pbml0X2FzX3JyX3JzcChuc2tiLCAwLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDM2OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNDM3LVxcdFxcdGlmIChsaWtlbHkoIXJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz00NTk9aW50IGxsY19jb25uX2FjX3NlbmRfcmVqX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy00NzAtXFx0XFx0bGxjX3BkdV9pbml0X2FzX3Jlal9jbWQobnNrYiwgMSwgbGxjLVxcdTAwM2V2Uik7XFxubmV0L2xsYy9sbGNfY19hYy5jOjQ3MTpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTQ3Mi1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTQ4Mz1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9yZWpfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTQ5NC1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcmVqX3JzcChuc2tiLCAxLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NDk1OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNDk2LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTA3PWludCBsbGNfY29ubl9hY19zZW5kX3Jlal94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTE4LVxcdFxcdGxsY19wZHVfaW5pdF9hc19yZWpfcnNwKG5za2IsIDAsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo1MTk6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01MjAtXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz01MzE9aW50IGxsY19jb25uX2FjX3NlbmRfcm5yX2NtZF9wX3NldF8xKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy01NDItXFx0XFx0bGxjX3BkdV9pbml0X2FzX3Jucl9jbWQobnNrYiwgMSwgbGxjLVxcdTAwM2V2Uik7XFxubmV0L2xsYy9sbGNfY19hYy5jOjU0MzpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTU0NC1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTU1NT1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ybnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTU2Ni1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcm5yX3JzcChuc2tiLCAxLCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6NTY3OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNTY4LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9NTc5PWludCBsbGNfY29ubl9hY19zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNTkwLVxcdFxcdGxsY19wZHVfaW5pdF9hc19ybnJfcnNwKG5za2IsIDAsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo1OTE6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy01OTItXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02MTU9aW50IGxsY19jb25uX2FjX29wdF9zZW5kX3Jucl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjI2LVxcdFxcdGxsY19wZHVfaW5pdF9hc19ybnJfcnNwKG5za2IsIDAsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2Mjc6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy02MjgtXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02Mzk9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfY21kX3Bfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTY1MC1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcnJfY21kKG5za2IsIDEsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo2NTE6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy02NTItXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz02NjM9aW50IGxsY19jb25uX2FjX3NlbmRfcnJfcnNwX2Zfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTY3NS1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIGZfYml0LCBsbGMtXFx1MDAzZXZSKTtcXG5uZXQvbGxjL2xsY19jX2FjLmM6Njc2OlxcdFxcdHJjID0gbGxjX21hY19oZHJfaW5pdChuc2tiLCBsbGMtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGxsYy1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19jX2FjLmMtNjc3LVxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmM9Njg4PWludCBsbGNfY29ubl9hY19zZW5kX2Fja19yc3BfZl9zZXRfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNjk5LVxcdFxcdGxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgMSwgbGxjLVxcdTAwM2V2Uik7XFxubmV0L2xsYy9sbGNfY19hYy5jOjcwMDpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTcwMS1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTcxMj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9ycl94eHhfeF9zZXRfMChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtNzIzLVxcdFxcdGxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgMCwgbGxjLVxcdTAwM2V2Uik7XFxubmV0L2xsYy9sbGNfY19hYy5jOjcyNDpcXHRcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTcyNS1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTczNj1pbnQgbGxjX2Nvbm5fYWNfc2VuZF9hY2tfeHh4X3hfc2V0XzAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTc0Ny1cXHRcXHRsbGNfcGR1X2luaXRfYXNfcnJfcnNwKG5za2IsIDAsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo3NDg6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy03NDktXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz03NzA9aW50IGxsY19jb25uX2FjX3NlbmRfc2FibWVfY21kX3Bfc2V0X3goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jLTc4NC1cXHRcXHRsbGNfcGR1X2luaXRfYXNfc2FibWVfY21kKG5za2IsIDEpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo3ODU6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgZG1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTc4Ni1cXHRcXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfY19hYy5jPTc5OD1pbnQgbGxjX2Nvbm5fYWNfc2VuZF91YV9yc3BfZl9zZXRfcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtODEyLVxcdFxcdGxsY19wZHVfaW5pdF9hc191YV9yc3AobnNrYiwgZl9iaXQpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo4MTM6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy04MTQtXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05MDQ9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX2lfcnNwX2Zfc2V0X2Fja3BmKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYy05MTMtXFx0bGxjX3BkdV9pbml0X2FzX2lfY21kKHNrYiwgbGxjLVxcdTAwM2VhY2tfcGYsIGxsYy1cXHUwMDNldlMsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo5MTQ6XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgbGxjLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBsbGMtXFx1MDAzZWRhZGRyLm1hYyk7XFxubmV0L2xsYy9sbGNfY19hYy5jLTkxNS1cXHRpZiAobGlrZWx5KCFyYykpIHtcXG4tLVxcbm5ldC9sbGMvbGxjX2NfYWMuYz05NTk9c3RhdGljIGludCBsbGNfY29ubl9hY19zZW5kX3JyX3JzcF9mX3NldF9hY2twZihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbGxjL2xsY19jX2FjLmMtOTcxLVxcdFxcdGxsY19wZHVfaW5pdF9hc19ycl9yc3AobnNrYiwgbGxjLVxcdTAwM2VhY2tfcGYsIGxsYy1cXHUwMDNldlIpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYzo5NzI6XFx0XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIGxsYy1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbGxjLVxcdTAwM2VkYWRkci5tYWMpO1xcbm5ldC9sbGMvbGxjX2NfYWMuYy05NzMtXFx0XFx0aWYgKHVubGlrZWx5KHJjKSlcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYz04NjM9c3RhdGljIHZvaWQgbGxjX2Nvbm5fc2VuZF9kbV9yc3Aoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy04NzUtXFx0bGxjX3BkdV9pbml0X2FzX2RtX3JzcChuc2tiLCBmX2JpdCk7XFxubmV0L2xsYy9sbGNfY29ubi5jOjg3NjpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBzYWRkci1cXHUwMDNlbWFjKTtcXG5uZXQvbGxjL2xsY19jb25uLmMtODc3LVxcdGlmICh1bmxpa2VseShyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0xNi0vKipcXG5uZXQvbGxjL2xsY19vdXRwdXQuYzoxNzogKlxcdGxsY19tYWNfaGRyX2luaXQgLSBmaWxscyBNQUMgaGVhZGVyIGZpZWxkc1xcbm5ldC9sbGMvbGxjX291dHB1dC5jLTE4LSAqXFx0QHNrYjogQWRkcmVzcyBvZiB0aGUgZnJhbWUgdG8gaW5pdGlhbGl6ZSBpdHMgTUFDIGhlYWRlclxcbi0tXFxubmV0L2xsYy9sbGNfb3V0cHV0LmMtMjQtICovXFxubmV0L2xsYy9sbGNfb3V0cHV0LmM6MjU6aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbGxjL2xsY19vdXRwdXQuYy0yNi1cXHRcXHQgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSlcXG4tLVxcbm5ldC9sbGMvbGxjX291dHB1dC5jPTU4PWludCBsbGNfYnVpbGRfYW5kX3NlbmRfdWlfcGt0KHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02NC1cXHRsbGNfcGR1X2luaXRfYXNfdWlfY21kKHNrYik7XFxubmV0L2xsYy9sbGNfb3V0cHV0LmM6NjU6XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBkbWFjKTtcXG5uZXQvbGxjL2xsY19vdXRwdXQuYy02Ni1cXHRpZiAobGlrZWx5KCFyYykpXFxuLS1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYy03Mi1cXG5uZXQvbGxjL2xsY19vdXRwdXQuYzo3MzpFWFBPUlRfU1lNQk9MKGxsY19tYWNfaGRyX2luaXQpO1xcbm5ldC9sbGMvbGxjX291dHB1dC5jLTc0LUVYUE9SVF9TWU1CT0wobGxjX2J1aWxkX2FuZF9zZW5kX3VpX3BrdCk7XFxuLS1cXG5uZXQvbGxjL2xsY19zX2FjLmM9Mzc9c3RhdGljIGludCBsbGNfcHJlcGFyZV9hbmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTQyLVxcbm5ldC9sbGMvbGxjX3NfYWMuYzo0MzpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQoc2tiLCBldi1cXHUwMDNlc2FkZHIubWFjLCBldi1cXHUwMDNlZGFkZHIubWFjKTtcXG5uZXQvbGxjL2xsY19zX2FjLmMtNDQtXFx0aWYgKHJjKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTEwNT1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF94aWRfcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jLTEyMC1cXHRsbGNfcGR1X2luaXRfYXNfeGlkX3JzcChuc2tiLCBMTENfWElEX05VTExfQ0xBU1NfMiwgMCk7XFxubmV0L2xsYy9sbGNfc19hYy5jOjEyMTpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbWFjX3NhLCBtYWNfZGEpO1xcbm5ldC9sbGMvbGxjX3NfYWMuYy0xMjItXFx0aWYgKGxpa2VseSghcmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfc19hYy5jPTE0OD1pbnQgbGxjX3NhcF9hY3Rpb25fc2VuZF90ZXN0X3Ioc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNjktXFx0bGxjX3BkdV9pbml0X2FzX3Rlc3RfcnNwKG5za2IsIHNrYik7XFxubmV0L2xsYy9sbGNfc19hYy5jOjE3MDpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgbWFjX3NhLCBtYWNfZGEpO1xcbm5ldC9sbGMvbGxjX3NfYWMuYy0xNzEtXFx0aWYgKGxpa2VseSghcmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTQyPXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF94aWRfcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jLTU0LVxcdGxsY19wZHVfaW5pdF9hc194aWRfcnNwKG5za2IsIExMQ19YSURfTlVMTF9DTEFTU18yLCAxMjcpO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYzo1NTpcXHRyYyA9IGxsY19tYWNfaGRyX2luaXQobnNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBtYWNfZGEpO1xcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy01Ni1cXHRpZiAodW5saWtlbHkocmMpKVxcbi0tXFxubmV0L2xsYy9sbGNfc3RhdGlvbi5jPTY2PXN0YXRpYyBpbnQgbGxjX3N0YXRpb25fYWNfc2VuZF90ZXN0X3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sbGMvbGxjX3N0YXRpb24uYy04NS1cXHRsbGNfcGR1X2luaXRfYXNfdGVzdF9yc3AobnNrYiwgc2tiKTtcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmM6ODY6XFx0cmMgPSBsbGNfbWFjX2hkcl9pbml0KG5za2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgbWFjX2RhKTtcXG5uZXQvbGxjL2xsY19zdGF0aW9uLmMtODctXFx0aWYgKHVubGlrZWx5KHJjKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6MzU6MjQuMjkxMjIxMzU4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTY3NTQ3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbGxjX21hY19oZHJfaW5pdGAgZnVuY3Rpb24gaW4gYG5ldC9sbGMvbGxjX291dHB1dC5jYCwgdGhpbmtpbmcgb3V0IGxvdWQuLi5cblxuKipEaXZpbmcgaW50byBMTEMgT3V0cHV0IEhlYWRlciBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSBmb2N1c2luZyBvbiBgbGxjX21hY19oZHJfaW5pdGAgaW5zaWRlIGBuZXQvbGxjL2xsY19vdXRwdXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIG9yIGF0IGxlYXN0LCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIE1BQyBoZWFkZXIgZm9yIExvZ2ljYWwgTGluayBDb250cm9sIChMTEMpIGZyYW1lcy4gSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyB0byBjcmFmdCB0aGF0IGVzc2VudGlhbCBoZWFkZXIuIEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgb2YgdGhlIHZhcmlvdXMgcGFyYW1ldGVycyBpdCdzIHByb2JhYmx5IHVzaW5nLCBsaWtlIHRoZSBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcywgc291cmNlIE1BQyBhZGRyZXNzLCBFdGhlclR5cGUsIGFuZCBhbnkgcG90ZW50aWFsIExMQy1zcGVjaWZpYyBmaWVsZHMuIE15IHBhc3QgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgcHJvYmFibHkgYSBjcnVjaWFsIHN0ZXAgaW4gZW5zdXJpbmcgb3VyIExMQyBmcmFtZXMgYXJlIHByb3Blcmx5IGZvcm1hdHRlZCBiZWZvcmUgdGhleSBoaXQgdGhlIHdpcmUgYW5kIHRoYXQgdGhleSdyZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXQgdGhlIHJlY2VpdmluZyBlbmQuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0byBzZWUgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgYWRkcmVzcyBmaWVsZHMuIEkgd2lsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZTsgaG93IGl0IGhhbmRsZXMgYW55IHBvdGVudGlhbGx5IGZyYWdtZW50ZWQgZnJhbWVzLCBhbmQgYW55IGJ1ZmZlci1tYW5hZ2VtZW50IGRldGFpbHMuIEknbSBnb2luZyB0byBwYXJzZSB0aGUgY29kZSBhbmQgbG9vayBmb3IgZGV0YWlscyByZWdhcmRpbmcgb3B0aW1pemF0aW9ucywgZXNwZWNpYWxseSBhbnkgaW5saW5lIG1lbW9yeSBvcGVyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW5pdCBmdW5jdGlvbiB3aWxsIG9mZmVyIGluc2lnaHQgb24gaG93IExMQyBmcmFtZXMgYXJlIGdlbmVyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3NDYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNToyOC4yNDc5Nzk0NjVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2xsYy9sbGNfb3V0cHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTc6XFx0ICpcXHRsbGNfbWFjX2hkcl9pbml0IC0gZmlsbHMgTUFDIGhlYWRlciBmaWVsZHNcXG4gIDE4OlxcdCAqXFx0QHNrYjogQWRkcmVzcyBvZiB0aGUgZnJhbWUgdG8gaW5pdGlhbGl6ZSBpdHMgTUFDIGhlYWRlclxcbiAgMTk6XFx0ICpcXHRAc2E6IFRoZSBNQUMgc291cmNlIGFkZHJlc3NcXG4gIDIwOlxcdCAqXFx0QGRhOiBUaGUgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3NcXG4gIDIxOlxcdCAqXFxuICAyMjpcXHQgKlxcdEZpbGxzIE1BQyBoZWFkZXIgZmllbGRzLCBkZXBlbmRpbmcgb24gTUFDIHR5cGUuIFJldHVybnMgMCwgSWYgTUFDIHR5cGVcXG4gIDIzOlxcdCAqXFx0aXMgYSB2YWxpZCB0eXBlIGFuZCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZXMgY29ycmVjdGx5IDEsIG90aGVyd2lzZS5cXG4gIDI0OlxcdCAqL1xcbiAgMjU6XFx0aW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDI2OlxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhKVxcbiAgMjc6XFx0e1xcbiAgMjg6XFx0XFx0aW50IHJjID0gLUVJTlZBTDtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSkge1xcbiAgMzE6XFx0XFx0Y2FzZSBBUlBIUkRfRVRIRVI6XFxuICAzMjpcXHRcXHRjYXNlIEFSUEhSRF9MT09QQkFDSzpcXG4gIDMzOlxcdFxcdFxcdHJjID0gZGV2X2hhcmRfaGVhZGVyKHNrYiwgc2tiLVxcdTAwM2VkZXYsIEVUSF9QXzgwMl8yLCBkYSwgc2EsXFxuICAzNDpcXHRcXHRcXHRcXHRcXHQgICAgIHNrYi1cXHUwMDNlbGVuKTtcXG4gIDM1OlxcdFxcdFxcdGlmIChyYyBcXHUwMDNlIDApXFxuICAzNjpcXHRcXHRcXHRcXHRyYyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM1OjI4LjI0ODA0MDczNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjU4ODY4MTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTExDIENvbm5lY3Rpb24gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBgZGV2X2hhcmRfaGVhZGVyYCBnZXRzIHRoZSBNQUMgaGVhZGVyIHNvcnRlZCBhbmQgZnVsbHkgcG9wdWxhdGVzIHRoZSBgc2tiYC4gR29vZCwgdGhhdCBtZWFucyB0aGUgYHNrYmAgaXMgaW5pdGlhbGl6ZWQsIHdoaWNoIHByZXZlbnRzIHVzIGZyb20gc2VuZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgZGVsdmUgaW50byB0aGVzZSBjaGFuZ2VzIGluIGBsbGNfY29ubl9oYW5kbGVyYC5cblxuQWxyaWdodCwgSSBzZWUgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIGBUQ1BfTElTVEVOYCBzdGF0ZS4gQmVmb3JlLCBhIG5ldyBzb2NrZXQgd2FzIGltbWVkaWF0ZWx5IGNyZWF0ZWQgdXNpbmcgYGxsY19jcmVhdGVfaW5jb21pbmdfc29ja2AuIE5vdywgaXQgc2VlbXMgbGlrZSB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgbG9naWMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgY2hlY2tpbmcgZm9yIHNwZWNpZmljIExMQyBjb21tYW5kcyBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgc29ja2V0LlxuXG5UaGUgY29kZSBub3cgY2hlY2tzIGZvciBgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3hgLiBJZiBpdCAqcmV0dXJucyB0cnVlKiAod2hpY2ggbWVhbnMgbm90IGEgU0FCTUUgY29tbWFuZCksIGEgRE0gcmVzcG9uc2UgaXMgc2VudC4gSG93ZXZlciwgaG9sZCBvbi4uLiB0aGUgbG9naWMgaXMgaW52ZXJ0ZWQuIExldCBtZSBkb3VibGUtY2hlY2suXG5cblRoZSBsb2dpYyBpcyBlc3NlbnRpYWxseTogSWYgaXQncyAqbm90KiBhIFNBQk1FIGNvbW1hbmQsIHRoZW4gY2hlY2sgZm9yIERJU0MgY29tbWFuZCwgaWYgaXQncyBub3QgYSBESVNDIGNvbW1hbmQsIGRlY29kZSB0aGUgUC9GIGJpdCBmcm9tIHRoZSBQRFUgYW5kIHNlbmQgYSBETSByZXNwb25zZS4gSWYgaXQncyBub3QgYSBTQUJNRSBjb21tYW5kIGFuZCBpdCdzIGEgRElTQyBjb21tYW5kIHRoZW4gY2hlY2sgZm9yIGB4eHhgIGFuZCBpZiBpdCBpcyBub3QgdGhhdCBzZW5kIGEgRE0gcmVzcG9uc2UuXG5cblRoZSBjb2RlICpzaG91bGQqIHNlbmQgYSBETSByZXNwb25zZS4gV2FpdCwgdGhpcyBpcyBpbnZlcnRlZCwgSSBuZWVkIHRvIGNoZWNrIGBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeGAgYmVjYXVzZSBJIHRoaW5rIGl0IHJldHVybnMgMCBmb3IgYSBTQUJNRSBjb21tYW5kLiBSaWdodCwgSSBuZWVkIHRvIGdvIG92ZXIgdGhhdCBmdW5jdGlvbiBpbiBtb3JlIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0MjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjoyNC44MzY3MjQyMzlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODgzNDgxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbGxjX2NfZXYuaD0xNDI9aW50IGxsY19jb25uX2V2X3J4X3Jlal9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L2xsY19jX2V2Lmg6MTQzOmludCBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L2xsY19jX2V2LmgtMTQ0LWludCBsbGNfY29ubl9ldl9yeF91YV9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxubmV0L2xsYy9sbGNfY19ldi5jPTQxNT1pbnQgbGxjX2Nvbm5fZXZfcnhfcnJfcnNwX2ZiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY19ldi5jLTQyNC1cXG5uZXQvbGxjL2xsY19jX2V2LmM6NDI1OmludCBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2xsYy9sbGNfY19ldi5jLTQyNi17XFxuLS1cXG5uZXQvbGxjL2xsY19jX3N0LmM9NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfY29tbW9uX3N0YXRlX3RyYW5zXzMgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjc3OlxcdC5ldlxcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxcbm5ldC9sbGMvbGxjX2Nfc3QuYy03OC1cXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX05PUk1BTCxcXG4tLVxcbm5ldC9sbGMvbGxjX2Nfc3QuYz0zNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfYWRtX3N0YXRlX3RyYW5zXzIgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjM3NjpcXHQuZXZcXHQgICAgICAgPSBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeCxcXG5uZXQvbGxjL2xsY19jX3N0LmMtMzc3LVxcdC5uZXh0X3N0YXRlICAgID0gTExDX0NPTk5fU1RBVEVfTk9STUFMLFxcbi0tXFxubmV0L2xsYy9sbGNfY19zdC5jPTQ1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19zZXR1cF9zdGF0ZV90cmFuc18xID0ge1xcbm5ldC9sbGMvbGxjX2Nfc3QuYzo0NTE6XFx0LmV2XFx0ICAgICAgID0gbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3gsXFxubmV0L2xsYy9sbGNfY19zdC5jLTQ1Mi1cXHQubmV4dF9zdGF0ZSAgICA9IExMQ19DT05OX1NUQVRFX1NFVFVQLFxcbi0tXFxubmV0L2xsYy9sbGNfY19zdC5jPTQxNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfZF9jb25uX3N0YXRlX3RyYW5zXzEgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjQxNjk6XFx0LmV2XFx0ICAgICAgID0gbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3gsXFxubmV0L2xsYy9sbGNfY19zdC5jLTQxNzAtXFx0Lm5leHRfc3RhdGUgICAgPSBMTENfQ09OTl9TVEFURV9BRE0sXFxuLS1cXG5uZXQvbGxjL2xsY19jX3N0LmM9NDE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGxsY19jb25uX3N0YXRlX3RyYW5zIGxsY19kX2Nvbm5fc3RhdGVfdHJhbnNfMV8xID0ge1xcbm5ldC9sbGMvbGxjX2Nfc3QuYzo0MTkyOlxcdC5ldlxcdCAgICAgICA9IGxsY19jb25uX2V2X3J4X3NhYm1lX2NtZF9wYml0X3NldF94LFxcbm5ldC9sbGMvbGxjX2Nfc3QuYy00MTkzLVxcdC5uZXh0X3N0YXRlICAgID0gTExDX0NPTk5fU1RBVEVfQURNLFxcbi0tXFxubmV0L2xsYy9sbGNfY19zdC5jPTQ0MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBsbGNfY29ubl9zdGF0ZV90cmFucyBsbGNfcnN0X3N0YXRlX3RyYW5zXzEgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjQ0MTc6XFx0LmV2XFx0ICAgICAgID0gbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3gsXFxubmV0L2xsYy9sbGNfY19zdC5jLTQ0MTgtXFx0Lm5leHRfc3RhdGUgICAgPSBMTENfQ09OTl9TVEFURV9SRVNFVCxcXG4tLVxcbm5ldC9sbGMvbGxjX2Nfc3QuYz00NzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxjX2Nvbm5fc3RhdGVfdHJhbnMgbGxjX2Vycm9yX3N0YXRlX3RyYW5zXzEgPSB7XFxubmV0L2xsYy9sbGNfY19zdC5jOjQ3MDg6XFx0LmV2XFx0ICAgICAgID0gbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3gsXFxubmV0L2xsYy9sbGNfY19zdC5jLTQ3MDktXFx0Lm5leHRfc3RhdGUgICAgPSBMTENfQ09OTl9TVEFURV9OT1JNQUwsXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9ODgzPXZvaWQgbGxjX2Nvbm5faGFuZGxlcihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTk0Mi1cXHRcXHRpZiAoIW5ld3NrKSB7XFxubmV0L2xsYy9sbGNfY29ubi5jOjk0MzpcXHRcXHRcXHRpZiAobGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc2ssIHNrYikpIHtcXG5uZXQvbGxjL2xsY19jb25uLmMtOTQ0LVxcdFxcdFxcdFxcdGlmICghbGxjX2Nvbm5fZXZfcnhfZGlzY19jbWRfcGJpdF9zZXRfeChzaywgc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjoyNi44MjUwNzczNjhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDkwNzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIExMQyBTQUJNRSBDb21tYW5kIEhhbmRsaW5nKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYG5ldC9sbGMvbGxjX2NfZXYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTExDIGxheWVyIGhhbmRsZXMgdGhlIFNBQk1FIGNvbW1hbmQsIHNwZWNpZmljYWxseSB0aGUgcGFydCB3aGVyZSB0aGUgUC1iaXQgaXMgc2V0IHZpYSBgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3hgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgc2VxdWVuY2UsIGxpa2VseSBkZWFsaW5nIHdpdGggY29ubmVjdGlvbiBpbml0aWF0aW9uIG9yIHJlLWVzdGFibGlzaG1lbnQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGlzIGlzIGhhbmRsaW5nIGFuIGV4cGxpY2l0IFNBQk1FIHJlY2VwdGlvbiBvciBpZiBpdCdzIHRpZWQgdG8gb3RoZXIgc3RhdGUgdHJhbnNpdGlvbnMgd2l0aGluIHRoZSBGU00uIExldCdzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGV5IGFyZSBtYW5hZ2luZyB0aGUgUC1iaXQgd2l0aGluIHRoZSBTQUJNRSBjb21tYW5kLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgYWNrbm93bGVkZ21lbnQgcHJvY2VkdXJlcyB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGluZy4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLWNvbW1lbnRlZCwgc28gSSBjYW4gZ3Jhc3AgdGhlIG51YW5jZXMgb2YgdGhlIFAtYml0IHNpZ25hbGluZyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg4NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM2OjMxLjAyOTk4Nzc5NVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbGxjL2xsY19jX2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdGludCBsbGNfY29ubl9ldl9yeF9zYWJtZV9jbWRfcGJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQyNjpcXHR7XFxuIDQyNzpcXHRcXHRjb25zdCBzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0XFx0cmV0dXJuIExMQ19QRFVfSVNfQ01EKHBkdSkgXFx1MDAyNlxcdTAwMjYgTExDX1BEVV9UWVBFX0lTX1UocGR1KSBcXHUwMDI2XFx1MDAyNlxcbiA0MzA6XFx0XFx0ICAgICAgIExMQ19VX1BEVV9DTUQocGR1KSA9PSBMTENfMl9QRFVfQ01EX1NBQk1FID8gMCA6IDE7XFxuIDQzMTpcXHR9XFxuIDQzMjpcXHRcXG4gNDMzOlxcdGludCBsbGNfY29ubl9ldl9yeF91YV9yc3BfZmJpdF9zZXRfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQzNDpcXHR7XFxuIDQzNTpcXHRcXHRzdHJ1Y3QgbGxjX3BkdV91biAqcGR1ID0gbGxjX3BkdV91bl9oZHIoc2tiKTtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0cmV0dXJuIExMQ19QRFVfSVNfUlNQKHBkdSkgXFx1MDAyNlxcdTAwMjYgTExDX1BEVV9UWVBFX0lTX1UocGR1KSBcXHUwMDI2XFx1MDAyNlxcbiA0Mzg6XFx0XFx0ICAgICAgIExMQ19VX1BEVV9SU1AocGR1KSA9PSBMTENfMl9QRFVfUlNQX1VBID8gMCA6IDE7XFxuIDQzOTpcXHR9XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdGludCBsbGNfY29ubl9ldl9yeF94eHhfY21kX3BiaXRfc2V0XzEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0NDI6XFx0e1xcbiA0NDM6XFx0XFx0dTE2IHJjID0gMTtcXG4gNDQ0OlxcdFxcdGNvbnN0IHN0cnVjdCBsbGNfcGR1X3NuICpwZHUgPSBsbGNfcGR1X3NuX2hkcihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjozMS4wMzAwNjEzODVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxMTk2NTY1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIExMQyBQRFUgSGFuZGxpbmcgYW5kIFNvY2tldCBDcmVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgYnJlYWtpbmcgZG93biB0aGUgTExDIFBEVSBoYW5kbGluZy4gIEZpcnN0LCB0aGUgaW5pdGlhbCBjaGVjayBgbGxjX2Nvbm5fZXZfcnhfc2FibWVfY21kX3BiaXRfc2V0X3goc2ssIHNrYilgIGFjdHVhbGx5ICpuZWdhdGVzKiB0aGUgbWVhbmluZzogYSByZXR1cm4gb2YgYDBgIGluZGljYXRlcyB0aGF0IHRoZSBwYWNrZXQgaXMgKm5vdCogYSBTQUJNRSBjb21tYW5kLiAgR290IGl0LiAgSWYgaXQgaXNuJ3QgU0FCTUUsIHRoZW4gd2UgY2hlY2sgZm9yIERJU0MgY29tbWFuZHMuIElmIGl0ICppcyogYSBESVNDLCB3ZSBzZW5kIGEgRE0gKERpc2Nvbm5lY3QgTW9kZSkgcmVzcG9uc2Ugd2l0aCB0aGUgRiBiaXQuIE90aGVyd2lzZSwgaWYgdGhlIFAgYml0IGlzIHNldCwgd2UgYWxzbyBzZW5kIGEgRE0gd2l0aCB0aGUgRiBiaXQgc2V0LCB0aGVuIGRyb3AgdGhlIHBhY2tldC4gIEFsbCBwcmV0dHkgc3RhbmRhcmQuXG5cbk5vdywgbXkgZm9jdXMgaXMgb24gaG93IHRob3NlIERNIHJlc3BvbnNlcyBhcmUgY29uc3RydWN0ZWQgYW5kIHNlbnQuIFNwZWNpZmljYWxseSB3aGF0J3MgZ29pbmcgb24gd2hlbiBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgIGlzIGNhbGxlZC4gSXQgdXNlcyBgbGxjX2FsbG9jX2ZyYW1lYCB0byBjcmVhdGUgYSBuZXcgYHNrYmAuICBUaGUgc2l6ZSBjYWxjdWxhdGlvbiBvZiBgaGxlbiArIGRhdGFfc2l6ZWAgaXMgZ29vZDsgaW4gdGhpcyBjYXNlIHRoYXQgd29ya3Mgb3V0IHRvIGAzICsgbWFjX2hlYWRlcl9sZW4gKyAwYCB3aXRoIHRoZSByZXN1bHQgYmVpbmcgcGFzc2VkIHRvIGBsbGNfcGR1X2hlYWRlcl9pbml0YC4gIFxuXG5gbGxjX3BkdV9oZWFkZXJfaW5pdGAgcHVzaGVzIDMgYnl0ZXMgb250byB0aGUgU0tCIGFuZCBzZXRzIGBkc2FwYCwgYHNzYXBgLCBhbmQgYGN0cmxfMWAgZmllbGRzLiBUaGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgbGxjX3BkdV9oZWFkZXJfaW5pdGAgd2hpY2ggSSBzZWUgZG9lcyB0aGUgYHNrYl9wdXNoYCwgc2V0cyB0aGUgbmV0d29yayBoZWFkZXIsIHRoZW4gc2V0cyB0aGUgTExDIFUtZm9ybWF0IGhlYWRlciBmaWVsZHM6IGBkc2FwYCwgYHNzYXBgIGFuZCB0aGUgYGN0cmxfMWAgYnl0ZS4gVGhlIGBjcmAgYml0IGlzIHNldCBpbiB0aGUgYHNzYXBgIGJ5dGUuXG5cbk5leHQsIGBsbGNfcGR1X2luaXRfYXNfZG1fcnNwYCBzZXRzIHRoZSBgY3RybF8xYCBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlIERNIHJlc3BvbnNlIGZvcm1hdCwgaW5jbHVkaW5nIHRoZSBGIGJpdC4gVGhhdCBoYW5kbGVzIHRoZSBjb250cm9sIGJ5dGUuIFNvLCB0aG9zZSB0aHJlZSBieXRlcyBhcmUgdGhlIExMQyBoZWFkZXIsIGNsZWFybHkgZGVmaW5lZC4gIFRoZW4gYGxsY19tYWNfaGRyX2luaXRgIGFkZHMgYW5kIHBvcHVsYXRlcyB0aGUgTUFDIGhlYWRlci4gU28gZmFyLCBzbyBnb29kLlxuXG5Ob3csIHRvIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBTS0I/IExldCdzIHRyYWNlIGl0IGNhcmVmdWxseS4gYGFsbG9jX3NrYmAgYWxsb2NhdGVzIHRoZSBidWZmZXIuIFRoZW4sIGBza2JfcmVzZXJ2ZWAgc2V0cyBhc2lkZSBzcGFjZSBmb3IgYm90aCB0aGUgTUFDIGFuZCBMTEMgaGVhZGVyLiBgc2tiX3B1c2hgIHB1dHMgaW4gdGhlIExMQyBoZWFkZXIgKDMgYnl0ZXMpLiBUaGVuLCBgZGV2X2hhcmRfaGVhZGVyYCBjb25zdHJ1Y3RzIGFuZCBhZGRzIHRoZSBNQUMgaGVhZGVyIChsZXQncyBzYXkgMTQgYnl0ZXMgZm9yIEV0aGVybmV0KSwgYW5kIGZpbGxzIGl0LiBUaGVyZWZvcmUsIHRoZSBvdmVyYWxsIFNLQiBsZW5ndGggaXMgMTQgKyAzID0gMTcgYnl0ZXMsIGFuZCBhbGwgb2YgdGhlc2UgYnl0ZXMgYXJlIHdyaXR0ZW4gZXhwbGljaXRseS4gTm8gb2J2aW91cyBtZW1vcnkgbGVhay4gRXhjZWxsZW50LlxuXG5Ob3csIHNoaWZ0aW5nIGdlYXJzLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIGBsbGNfY3JlYXRlX2luY29taW5nX3NvY2tgLiBJdCBsb29rcyBsaWtlIGl0IGNyZWF0ZXMgYSBuZXcgc29ja2V0IHRvIGhhbmRsZSBpbmNvbWluZyBjb25uZWN0aW9ucywgY29weWluZyBhZGRyZXNzZXMgYW5kIGRldmljZSBpbmZvcm1hdGlvbi4gVGhpcyBzZWVtcyBmaW5lLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhlIGFsbG9jYXRpb24gaXMgc2FmZS4gIExldCdzIGRpZyBpbnRvIGBsbGNfc2tfYWxsb2NgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY0MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjo0NS4xNDk3MjA1OThaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTU4MjIyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGxjX3NrX2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2xsY19jb25uLmg9OTY9c3RhdGljIF9faW5saW5lX18gY2hhciBsbGNfYmFja2xvZ190eXBlKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9sbGNfY29ubi5oLTEwMC1cXG5pbmNsdWRlL25ldC9sbGNfY29ubi5oOjEwMTpzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXFxuaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaC0xMDItXFx0XFx0XFx0ICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKTtcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmM9MTY3PXN0YXRpYyBpbnQgbGxjX3VpX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC9sbGMvYWZfbGxjLmMtMTgwLVxcdFxcdHJjID0gLUVOT01FTTtcXG5uZXQvbGxjL2FmX2xsYy5jOjE4MTpcXHRcXHRzayA9IGxsY19za19hbGxvYyhuZXQsIFBGX0xMQywgR0ZQX0tFUk5FTCwgXFx1MDAyNmxsY19wcm90bywga2Vybik7XFxubmV0L2xsYy9hZl9sbGMuYy0xODItXFx0XFx0aWYgKHNrKSB7XFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmM9NzYyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2NyZWF0ZV9pbmNvbWluZ19zb2NrKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9sbGMvbGxjX2Nvbm4uYy03NjYte1xcbm5ldC9sbGMvbGxjX2Nvbm4uYzo3Njc6XFx0c3RydWN0IHNvY2sgKm5ld3NrID0gbGxjX3NrX2FsbG9jKHNvY2tfbmV0KHNrKSwgc2stXFx1MDAzZXNrX2ZhbWlseSwgR0ZQX0FUT01JQyxcXG5uZXQvbGxjL2xsY19jb25uLmMtNzY4LVxcdFxcdFxcdFxcdFxcdCAgc2stXFx1MDAzZXNrX3Byb3QsIDApO1xcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jPTExMzE9c3RhdGljIHZvaWQgbGxjX3NrX2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2xsYy9sbGNfY29ubi5jLTExNTktLyoqXFxubmV0L2xsYy9sbGNfY29ubi5jOjExNjA6ICpcXHRsbGNfc2tfYWxsb2MgLSBBbGxvY2F0ZXMgTExDIHNvY2tcXG5uZXQvbGxjL2xsY19jb25uLmMtMTE2MS0gKlxcdEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvbGxjL2xsY19jb25uLmMtMTE2OS0gKi9cXG5uZXQvbGxjL2xsY19jb25uLmM6MTE3MDpzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXFxubmV0L2xsYy9sbGNfY29ubi5jLTExNzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwOTozNjo0Ni42NDU1NDg0OTZaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0Mzg3MjM0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTExDIFNvY2tldCBBbGxvY2F0aW9uKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBsbGNfc2tfYWxsb2NgIHdpdGhpbiBgbmV0L2xsYy9sbGNfY29ubi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlci1sYXllciBjb25uZWN0aW9uLW9yaWVudGVkIExpbmsgTGF5ZXIgQ29udHJvbCAoTExDKSBzb2NrZXRzIGFyZSBhY3R1YWxseSBicm91Z2h0IGludG8gZXhpc3RlbmNlLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGF0IHByb2Nlc3MuIEkgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgaXRzZWxmLCBidXQgSSdtIGFsc28gYmV0dGluZyBpdCBkZWFscyB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhdCBsZWFzdCBzb21lIG9mIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCB0aWUgdGhlIExMQyBzb2NrZXQgaW50byB0aGUgbGFyZ2VyIG5ldHdvcmtpbmcgc3RhY2suIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGFzc29jaWF0ZWQgY29udHJvbCBibG9ja3MsIG1heWJlIHNvbWUgbmV0bGluay1yZWxhdGVkIHNldHVwIGlmIHRoaXMgaXMgaG93IExMQyBjb25maWd1cmF0aW9uIGhhcHBlbnMsIGFuZCwgb2YgY291cnNlLCB0aGUgaW5pdGlhbCBzdGF0ZSB0cmFuc2l0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJcyB0aGlzIHVzaW5nIHRoZSByZWd1bGFyIGtlcm5lbCBhbGxvY2F0b3IsIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgTExDIGxheWVyPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgdG8gb3B0aW1pemUgZm9yIHRoZSBleHBlY3RlZCB0cmFmZmljIHBhdHRlcm5zPyBUaGlzIGNvdWxkIGJlIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODE3NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM3OjQ0LjA4NDI3NDI0NloiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbGxjL2xsY19jb25uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3MDpcXHRzdHJ1Y3Qgc29jayAqbGxjX3NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXFxuMTE3MTpcXHR7XFxuMTE3MjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBza19hbGxvYyhuZXQsIGZhbWlseSwgcHJpb3JpdHksIHByb3QsIGtlcm4pO1xcbjExNzM6XFx0XFxuMTE3NDpcXHRcXHRpZiAoIXNrKVxcbjExNzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3NjpcXHRcXHRsbGNfc2tfaW5pdChzayk7XFxuMTE3NzpcXHRcXHRzb2NrX2luaXRfZGF0YShOVUxMLCBzayk7XFxuMTE3ODpcXHQjaWZkZWYgTExDX1JFRkNOVF9ERUJVR1xcbjExNzk6XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2bGxjX3NvY2tfbnIpO1xcbjExODA6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIkxMQyBzb2NrZXQgJXAgY3JlYXRlZCBpbiAlcywgbm93IHdlIGhhdmUgJWQgYWxpdmVcXFxcblxcXCIsIHNrLFxcbjExODE6XFx0XFx0XFx0X19mdW5jX18sIGF0b21pY19yZWFkKFxcdTAwMjZsbGNfc29ja19ucikpO1xcbjExODI6XFx0I2VuZGlmXFxuMTE4MzpcXHRvdXQ6XFxuMTE4NDpcXHRcXHRyZXR1cm4gc2s7XFxuMTE4NTpcXHR9XFxuMTE4NjpcXHRcXG4xMTg3OlxcdHZvaWQgbGxjX3NrX3N0b3BfYWxsX3RpbWVycyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc3luYylcXG4xMTg4OlxcdHtcXG4xMTg5OlxcdFxcdHN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDk6Mzc6NDQuMDg0MzYxOTQ2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzM0ODk3MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IExMQyBDb25uZWN0aW9uIEVzdGFibGlzaG1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgYnVnIHdpdGhpbiB0aGUgTExDIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBsaWtlbHkgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBpbmNvbWluZ19zdGF0ZWAsIGBpbmNvbWluZ19saXN0ZW5lcmAsIGFuZCBgaW5jb21pbmdfd29ya2Agc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyBhYm91dCBtYW5hZ2luZyB0aGUgc3RhdGVzIG9mIGluY29taW5nIGNvbm5lY3Rpb25zIGFuZCB0aGVpciBwcm9wZXIgY2xlYW51cC5cblxuTXkgZmlyc3QgY2hlY2sgd2FzIHRvIGVuc3VyZSBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3IgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBgc2tfYWxsb2NgIGRvZXMgaXRzIGpvYiBvZiBhbGxvY2F0aW5nIGFuZCB6ZXJvaW5nIHRoZSBzb2NrZXQsIHdoaWNoIGlzIGdvb2QuIFRoZSBrZXkgZnVuY3Rpb24gdG8gbG9vayBhdCBpcyBgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgLiBXaGlsZSBpdCBhbGxvY2F0ZXMgYW4gYHNrYmAsIGl0IGV4cGxpY2l0bHkgcG9wdWxhdGVzIGFsbCB0aGUgYnl0ZXMgd2l0aGluIGl0LCBzbyBubyBjb25jZXJuIHRoZXJlLlxuXG5JIHRoZW4gZGlkIGEgZGVlcGVyIGRpdmUsIGNyb3NzLWNoZWNraW5nIGBsbGNfY29ubl9zZW5kX2RtX3JzcGAsIHNwZWNpZmljYWxseSB0aGUgc291cmNlIG9mIGBzYWRkci1cdTAwM2VtYWNgLiBJIHRyYWNlZCBgc2FkZHJgIGJhY2sgdG8gYGxsY19jb25uX2hhbmRsZXJgLCB3aGljaCBwdWxscyB0aGUgZGF0YSBmcm9tIHRoZSBpbmNvbWluZyBgc2tiYCB1c2luZyBmdW5jdGlvbnMgbGlrZSBgbGxjX3BkdV9kZWNvZGVfc2FgIGFuZCBgbGxjX3BkdV9kZWNvZGVfc3NhcGAuIFRoZSBkYXRhIGlzLCB0aGVyZWZvcmUsIGluaXRpYWxpemVkIGZyb20gdGhlIG5ldHdvcmsgcGFja2V0LCBzbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTmV4dCwgSSBsb29rZWQgYXQgYGxsY19yZWxlYXNlX2luY29taW5nX2NoaWxkcmVuYCBhbmQgYGxsY191aV9hY2NlcHRgLCBhcyB0aGVzZSBhcmUgY3JpdGljYWwgcGFydHMgb2YgdGhlIGNsZWFudXAgYW5kIGFjY2VwdGFuY2UgcHJvY2Vzcy4gSSdtIHNhdGlzZmllZCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBkb24ndCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcy4gVGhleSdyZSBwcmltYXJpbHkgaW52b2x2ZWQgaW4gcmVsZWFzaW5nIGFuZCBtYW5hZ2luZyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgaW5jb21pbmcgc29ja2V0cywgYW5kIGFsbCBkYXRhIGFjY2VzcyBhcHBlYXJzIHRvIGJlIHByb3Blcmx5IHN5bmNocm9uaXplZCBhbmQgaW5pdGlhbGl6ZWQuXG5cbkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBzdGFuZGFyZCBsaWZlY3ljbGUgYW5kIGNvbmN1cnJlbmN5IGJ1ZyBmaXguIFdoaWxlIGl0J3MgaW1wb3J0YW50IHRvIGJlIHJpZ29yb3VzLCBpdCBkb2VzICpub3QqIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mb3JtYXRpb24gbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gS0FTQU4gYW5kIExPQ0tERVAgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGlzIHBhdGNoIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggKFVBRiwgZG91YmxlIGZyZWVzLCBhbmQgbG9ja2luZyBpc3N1ZXMpLiBUaGVyZWZvcmUsIHRoaXMgZG9lcyAqbm90KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIEknbGwgZ28gYWhlYWQgYW5kIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYCBhbmQgZm9ybXVsYXRlIHRoZSBLTVNBTlJlYXNvbmluZyBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3OTksIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA5OjM4OjMxLjQxOTI2MjI4N1oiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgc29ja2V0IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgYnVnIGluIHRoZSBMTEMgcHJvdG9jb2wgYnkgaW50cm9kdWNpbmcgc3RhdGUgdHJhY2tpbmcgKGBpbmNvbWluZ19zdGF0ZWAsIGBpbmNvbWluZ19saXN0ZW5lcmAsIGBpbmNvbWluZ193b3JrYCkgZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiBUaGlzIHByZXZlbnRzIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBkdXJpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBsaXN0ZW5lciBzb2NrZXQgdGVhcmRvd24uIEFsbCBuZXdseSBpbnRyb2R1Y2VkIHN0cnVjdCBmaWVsZHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHVwb24gc29ja2V0IGNyZWF0aW9uLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgZnVuY3Rpb24gdG8gc2VuZCBhIERNIHJlc3BvbnNlIChgbGxjX2Nvbm5fc2VuZF9kbV9yc3BgKSwgd2hpY2ggYWxsb2NhdGVzIGEgbmV3IHNrYiBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplcyBhbGwgaXRzIGJ5dGVzIChMTEMgaGVhZGVyIGFuZCBNQUMgaGVhZGVyKSBiZWZvcmUgdHJhbnNtaXNzaW9uLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQgdG8gdGhlIG5ldHdvcmsuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSBidWcgaW4gdGhlIExMQyBwcm90b2NvbCBieSBpbnRyb2R1Y2luZyBzdGF0ZSB0cmFja2luZyAoYGluY29taW5nX3N0YXRlYCwgYGluY29taW5nX2xpc3RlbmVyYCwgYGluY29taW5nX3dvcmtgKSBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIFRoaXMgcHJldmVudHMgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGR1cmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpc3RlbmVyIHNvY2tldCB0ZWFyZG93bi4gQWxsIG5ld2x5IGludHJvZHVjZWQgc3RydWN0IGZpZWxkcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBzb2NrZXQgY3JlYXRpb24uIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBmdW5jdGlvbiB0byBzZW5kIGEgRE0gcmVzcG9uc2UgKGBsbGNfY29ubl9zZW5kX2RtX3JzcGApLCB3aGljaCBhbGxvY2F0ZXMgYSBuZXcgc2tiIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBpdHMgYnl0ZXMgKExMQyBoZWFkZXIgYW5kIE1BQyBoZWFkZXIpIGJlZm9yZSB0cmFuc21pc3Npb24sIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZCB0byB0aGUgbmV0d29yay4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowwkssh[1] Phase: Succeeded StartedAt: 2026-08-27 09:38:43 +0000 UTC FinishedAt: 2026-08-27 09:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 09:38:43 +0000 UTC FinishedAt: 2026-08-27 09:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2] Phase: Succeeded StartedAt: 2026-08-27 09:38:43 +0000 UTC FinishedAt: 2026-08-27 13:23:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 09:38:43 +0000 UTC FinishedAt: 2026-08-27 13:23:12 +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":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 09:38:43 +0000 UTC FinishedAt: 2026-08-27 09:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 09:38:43 +0000 UTC FinishedAt: 2026-08-27 09:38:51 +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":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkssh/series-workflowwkssh-convert-artifact-411441164/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 09:38:53 +0000 UTC FinishedAt: 2026-08-27 09:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 09:38:53 +0000 UTC FinishedAt: 2026-08-27 09:54:46 +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:*4cef9def-1915-499a-b9ca-7ec3bd868b0c,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-workflowwkssh/series-workflowwkssh-convert-artifact-411441164/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": "e140d3a6-d622-4bfb-9b32-1d6df9fe2bcf", "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-workflowwkssh/series-workflowwkssh-build-action-790945338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 09:38:53 +0000 UTC FinishedAt: 2026-08-27 09:54: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:*4cef9def-1915-499a-b9ca-7ec3bd868b0c,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-workflowwkssh/series-workflowwkssh-convert-artifact-411441164/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": "e140d3a6-d622-4bfb-9b32-1d6df9fe2bcf", "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-workflowwkssh/series-workflowwkssh-build-action-790945338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 09:54:46 +0000 UTC FinishedAt: 2026-08-27 09:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 09:54:46 +0000 UTC FinishedAt: 2026-08-27 09:54:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 09:54:46 +0000 UTC FinishedAt: 2026-08-27 09:54:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 09:54:46 +0000 UTC FinishedAt: 2026-08-27 09:54:50 +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":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkssh/series-workflowwkssh-convert-artifact-1279450955/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 09:54:56 +0000 UTC FinishedAt: 2026-08-27 09:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 09:54:56 +0000 UTC FinishedAt: 2026-08-27 09:56:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e140d3a6-d622-4bfb-9b32-1d6df9fe2bcf,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-workflowwkssh/series-workflowwkssh-build-action-790945338/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-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 09:57:00 +0000 UTC FinishedAt: 2026-08-27 09:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 09:57:00 +0000 UTC FinishedAt: 2026-08-27 09:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 09:57:00 +0000 UTC FinishedAt: 2026-08-27 10:17:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 09:57:00 +0000 UTC FinishedAt: 2026-08-27 10:17:14 +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:*4cef9def-1915-499a-b9ca-7ec3bd868b0c,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-workflowwkssh/series-workflowwkssh-convert-artifact-1279450955/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": "51f32ba2-452c-4a9b-becc-20778b642aa4", "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-workflowwkssh/series-workflowwkssh-build-action-4156621807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 09:57:00 +0000 UTC FinishedAt: 2026-08-27 10:16:52 +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:*4cef9def-1915-499a-b9ca-7ec3bd868b0c,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-workflowwkssh/series-workflowwkssh-convert-artifact-1279450955/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": "51f32ba2-452c-4a9b-becc-20778b642aa4", "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-workflowwkssh/series-workflowwkssh-build-action-4156621807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 10:17:14 +0000 UTC FinishedAt: 2026-08-27 10:17:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 10:17:14 +0000 UTC FinishedAt: 2026-08-27 10:17:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 10:17:14 +0000 UTC FinishedAt: 2026-08-27 10:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 10:17:14 +0000 UTC FinishedAt: 2026-08-27 10:19:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*51f32ba2-452c-4a9b-becc-20778b642aa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkssh/series-workflowwkssh-build-action-4156621807/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-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 10:19:18 +0000 UTC FinishedAt: 2026-08-27 13:23:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 10:19:18 +0000 UTC FinishedAt: 2026-08-27 13:23:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e140d3a6-d622-4bfb-9b32-1d6df9fe2bcf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*51f32ba2-452c-4a9b-becc-20778b642aa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkssh/series-workflowwkssh-build-action-790945338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkssh/series-workflowwkssh-build-action-4156621807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 10:19:18 +0000 UTC FinishedAt: 2026-08-27 10:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 10:19:18 +0000 UTC FinishedAt: 2026-08-27 10:19:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkssh/series-workflowwkssh-convert-artifact-1884456932/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 10:19:18 +0000 UTC FinishedAt: 2026-08-27 10:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 10:19:18 +0000 UTC FinishedAt: 2026-08-27 10:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 10:19:18 +0000 UTC FinishedAt: 2026-08-27 10:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 10:19:28 +0000 UTC FinishedAt: 2026-08-27 13:23:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkssh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["llc_release_incoming_sock","llc_accept_incoming_sock","llc_release_incoming_children","llc_conn_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LLC2"],"series_id":"83773eea-ba88-4f19-aba7-4fa98dfc7112","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 10:19:28 +0000 UTC FinishedAt: 2026-08-27 13:23:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e140d3a6-d622-4bfb-9b32-1d6df9fe2bcf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*51f32ba2-452c-4a9b-becc-20778b642aa4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkssh/series-workflowwkssh-build-action-790945338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkssh/series-workflowwkssh-build-action-4156621807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkssh/series-workflowwkssh-convert-artifact-1884456932/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}